summaryrefslogtreecommitdiffstats
path: root/browser/components
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:14:29 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:14:29 +0000
commitfbaf0bb26397aa498eb9156f06d5a6fe34dd7dd8 (patch)
tree4c1ccaf5486d4f2009f9a338a98a83e886e29c97 /browser/components
parentReleasing progress-linux version 124.0.1-1~progress7.99u1. (diff)
downloadfirefox-fbaf0bb26397aa498eb9156f06d5a6fe34dd7dd8.tar.xz
firefox-fbaf0bb26397aa498eb9156f06d5a6fe34dd7dd8.zip
Merging upstream version 125.0.1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/components')
-rw-r--r--browser/components/BrowserContentHandler.sys.mjs124
-rw-r--r--browser/components/BrowserGlue.sys.mjs308
-rw-r--r--browser/components/about/AboutRedirector.cpp8
-rw-r--r--browser/components/about/components.conf2
-rw-r--r--browser/components/aboutlogins/AboutLoginsParent.sys.mjs11
-rw-r--r--browser/components/aboutlogins/content/components/login-item.css2
-rw-r--r--browser/components/aboutlogins/content/components/login-item.mjs2
-rw-r--r--browser/components/aboutlogins/content/components/login-list.css2
-rw-r--r--browser/components/aboutlogins/tests/browser/browser_alertDismissedAfterChangingPassword.js4
-rw-r--r--browser/components/aboutlogins/tests/browser/browser_createLogin.js186
-rw-r--r--browser/components/aboutlogins/tests/browser/browser_loginListChanges.js2
-rw-r--r--browser/components/aboutlogins/tests/browser/browser_openExport.js2
-rw-r--r--browser/components/aboutlogins/tests/browser/browser_openImportCSV.js10
-rw-r--r--browser/components/aboutlogins/tests/browser/browser_updateLogin.js186
-rw-r--r--browser/components/aboutlogins/tests/browser/browser_vulnerableLoginAddedInSecondaryWindow.js3
-rw-r--r--browser/components/aboutlogins/tests/chrome/aboutlogins_common.js2
-rw-r--r--browser/components/aboutlogins/tests/chrome/test_login_item.html2
-rw-r--r--browser/components/aboutwelcome/.eslintrc.js7
-rw-r--r--browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs28
-rw-r--r--browser/components/aboutwelcome/actors/AboutWelcomeParent.sys.mjs6
-rw-r--r--browser/components/aboutwelcome/content-src/aboutwelcome.scss367
-rw-r--r--browser/components/aboutwelcome/content-src/components/AddonsPicker.jsx4
-rw-r--r--browser/components/aboutwelcome/content-src/components/EmbeddedMigrationWizard.jsx25
-rw-r--r--browser/components/aboutwelcome/content-src/components/MSLocalized.jsx1
-rw-r--r--browser/components/aboutwelcome/content-src/components/MultiStageProtonScreen.jsx17
-rw-r--r--browser/components/aboutwelcome/content/aboutwelcome.bundle.js107
-rw-r--r--browser/components/aboutwelcome/content/aboutwelcome.css210
-rw-r--r--browser/components/aboutwelcome/content/onboarding.ftl13
-rw-r--r--browser/components/aboutwelcome/karma.mc.config.js39
-rw-r--r--browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs79
-rw-r--r--browser/components/aboutwelcome/moz.build5
-rw-r--r--browser/components/aboutwelcome/package-lock.json6625
-rw-r--r--browser/components/aboutwelcome/package.json32
-rw-r--r--browser/components/aboutwelcome/tests/browser/browser.toml5
-rw-r--r--browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_attribution.js2
-rw-r--r--browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_configurable_ui.js104
-rw-r--r--browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_multistage_experimentAPI.js208
-rw-r--r--browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_multistage_transitions.js219
-rw-r--r--browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_observer.js5
-rw-r--r--browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_toolbar_button.js64
-rw-r--r--browser/components/aboutwelcome/tests/unit/MultiStageAWProton.test.jsx103
-rw-r--r--browser/components/aboutwelcome/tests/xpcshell/test_AboutWelcomeAttribution.js (renamed from browser/components/newtab/test/xpcshell/test_AboutWelcomeAttribution.js)0
-rw-r--r--browser/components/aboutwelcome/tests/xpcshell/test_AboutWelcomeTelemetry.js (renamed from browser/components/newtab/test/xpcshell/test_AboutWelcomeTelemetry.js)0
-rw-r--r--browser/components/aboutwelcome/tests/xpcshell/test_AboutWelcomeTelemetry_glean.js (renamed from browser/components/newtab/test/xpcshell/test_AboutWelcomeTelemetry_glean.js)0
-rw-r--r--browser/components/aboutwelcome/tests/xpcshell/xpcshell.toml9
-rw-r--r--browser/components/asrouter/.eslintrc.js5
-rw-r--r--browser/components/asrouter/README.md23
-rw-r--r--browser/components/asrouter/actors/ASRouterChild.sys.mjs2
-rw-r--r--browser/components/asrouter/bin/import-rollouts.js2
-rw-r--r--browser/components/asrouter/content-src/asrouter-utils.mjs (renamed from browser/components/asrouter/content-src/asrouter-utils.js)18
-rw-r--r--browser/components/asrouter/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx25
-rw-r--r--browser/components/asrouter/content-src/components/ASRouterAdmin/CopyButton.jsx2
-rw-r--r--browser/components/asrouter/content-src/components/ConditionalWrapper/ConditionalWrapper.jsx9
-rw-r--r--browser/components/asrouter/content-src/components/ImpressionsWrapper/ImpressionsWrapper.jsx76
-rw-r--r--browser/components/asrouter/content-src/schemas/MessagingExperiment.schema.json4
-rw-r--r--browser/components/asrouter/content-src/schemas/message-format.md111
-rw-r--r--browser/components/asrouter/content-src/styles/_shopping.scss1
-rw-r--r--browser/components/asrouter/content-src/templates/OnboardingMessage/Spotlight.schema.json4
-rw-r--r--browser/components/asrouter/content/asrouter-admin.bundle.js139
-rw-r--r--browser/components/asrouter/content/components/ASRouterAdmin/ASRouterAdmin.css21
-rw-r--r--browser/components/asrouter/docs/telemetry.md2
-rw-r--r--browser/components/asrouter/karma.mc.config.js63
-rw-r--r--browser/components/asrouter/modules/ASRouter.sys.mjs22
-rw-r--r--browser/components/asrouter/modules/ASRouterPreferences.sys.mjs2
-rw-r--r--browser/components/asrouter/modules/ASRouterTargeting.sys.mjs2
-rw-r--r--browser/components/asrouter/modules/ASRouterTriggerListeners.sys.mjs8
-rw-r--r--browser/components/asrouter/modules/CFRPageActions.sys.mjs2
-rw-r--r--browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs2
-rw-r--r--browser/components/asrouter/modules/MessagingExperimentConstants.sys.mjs4
-rw-r--r--browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs4
-rw-r--r--browser/components/asrouter/modules/ToastNotification.sys.mjs2
-rw-r--r--browser/components/asrouter/modules/ToolbarBadgeHub.sys.mjs2
-rw-r--r--browser/components/asrouter/package-lock.json7114
-rw-r--r--browser/components/asrouter/package.json34
-rw-r--r--browser/components/asrouter/tests/browser/browser_asrouter_cfr.js66
-rw-r--r--browser/components/asrouter/tests/browser/browser_asrouter_experimentsAPILoader.js2
-rw-r--r--browser/components/asrouter/tests/browser/browser_asrouter_targeting.js2
-rw-r--r--browser/components/asrouter/tests/browser/browser_feature_callout_panel.js2
-rw-r--r--browser/components/asrouter/tests/browser/browser_trigger_listeners.js4
-rw-r--r--browser/components/asrouter/tests/browser/head.js4
-rw-r--r--browser/components/asrouter/tests/unit/ASRouterChild.test.js11
-rw-r--r--browser/components/asrouter/tests/unit/ASRouterTargeting.test.js4
-rw-r--r--browser/components/asrouter/tests/unit/CFRPageActions.test.js6
-rw-r--r--browser/components/asrouter/tests/unit/TargetingDocs.test.js2
-rw-r--r--browser/components/asrouter/tests/unit/ToolbarPanelHub.test.js18
-rw-r--r--browser/components/asrouter/tests/unit/asrouter-utils.test.js36
-rw-r--r--browser/components/asrouter/tests/unit/unit-entry.js14
-rw-r--r--browser/components/asrouter/webpack.asrouter-admin.config.js2
-rw-r--r--browser/components/backup/.eslintrc.js9
-rw-r--r--browser/components/backup/BackupResources.sys.mjs15
-rw-r--r--browser/components/backup/BackupService.sys.mjs103
-rw-r--r--browser/components/backup/docs/backup-service.rst8
-rw-r--r--browser/components/backup/docs/index.rst13
-rw-r--r--browser/components/backup/metrics.yaml30
-rw-r--r--browser/components/backup/moz.build18
-rw-r--r--browser/components/backup/resources/BackupResource.sys.mjs109
-rw-r--r--browser/components/backup/tests/xpcshell/data/test_xulstore.json18
-rw-r--r--browser/components/backup/tests/xpcshell/test_BrowserResource.js63
-rw-r--r--browser/components/backup/tests/xpcshell/test_measurements.js40
-rw-r--r--browser/components/backup/tests/xpcshell/xpcshell.toml8
-rw-r--r--browser/components/contentanalysis/content/ContentAnalysis.sys.mjs232
-rw-r--r--browser/components/contextualidentity/test/browser/browser_saveLink.js2
-rw-r--r--browser/components/controlcenter/content/protectionsPanel.inc.xhtml82
-rw-r--r--browser/components/customizableui/CustomizableUI.sys.mjs23
-rw-r--r--browser/components/customizableui/PanelMultiView.sys.mjs51
-rw-r--r--browser/components/customizableui/test/browser_1856572_ensure_Fluent_works_in_customizeMode.js43
-rw-r--r--browser/components/downloads/DownloadsCommon.sys.mjs4
-rw-r--r--browser/components/downloads/DownloadsViewUI.sys.mjs2
-rw-r--r--browser/components/downloads/DownloadsViewableInternally.sys.mjs2
-rw-r--r--browser/components/downloads/content/allDownloadsView.js6
-rw-r--r--browser/components/downloads/content/contentAreaDownloadsView.js2
-rw-r--r--browser/components/downloads/content/downloads.js12
-rw-r--r--browser/components/downloads/test/browser/browser_download_overwrite.js6
-rw-r--r--browser/components/downloads/test/browser/browser_downloads_panel_dontshow.js2
-rw-r--r--browser/components/downloads/test/browser/browser_downloads_panel_opens.js2
-rw-r--r--browser/components/downloads/test/browser/browser_iframe_gone_mid_download.js2
-rw-r--r--browser/components/downloads/test/browser/browser_image_mimetype_issues.js6
-rw-r--r--browser/components/downloads/test/browser/browser_library_clearall.js2
-rw-r--r--browser/components/downloads/test/unit/test_DownloadsCommon_isFileOfType.js2
-rw-r--r--browser/components/enterprisepolicies/Policies.sys.mjs71
-rw-r--r--browser/components/enterprisepolicies/content/aboutPolicies.js12
-rw-r--r--browser/components/enterprisepolicies/helpers/BookmarksPolicies.sys.mjs4
-rw-r--r--browser/components/enterprisepolicies/helpers/ProxyPolicies.sys.mjs2
-rw-r--r--browser/components/enterprisepolicies/schemas/policies-schema.json38
-rw-r--r--browser/components/enterprisepolicies/tests/browser/browser_policy_allowfileselectiondialogs.js2
-rw-r--r--browser/components/enterprisepolicies/tests/xpcshell/test_policy_search_engine.js2
-rw-r--r--browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js13
-rw-r--r--browser/components/extensions/ExtensionBrowsingData.sys.mjs2
-rw-r--r--browser/components/extensions/ExtensionControlledPopup.sys.mjs2
-rw-r--r--browser/components/extensions/ExtensionPopups.sys.mjs4
-rw-r--r--browser/components/extensions/child/ext-devtools.js2
-rw-r--r--browser/components/extensions/child/ext-menus.js2
-rw-r--r--browser/components/extensions/parent/ext-browser.js2
-rw-r--r--browser/components/extensions/parent/ext-browserAction.js4
-rw-r--r--browser/components/extensions/parent/ext-chrome-settings-overrides.js2
-rw-r--r--browser/components/extensions/parent/ext-commands.js2
-rw-r--r--browser/components/extensions/parent/ext-devtools-panels.js2
-rw-r--r--browser/components/extensions/parent/ext-devtools.js2
-rw-r--r--browser/components/extensions/parent/ext-history.js2
-rw-r--r--browser/components/extensions/parent/ext-menus.js4
-rw-r--r--browser/components/extensions/parent/ext-omnibox.js6
-rw-r--r--browser/components/extensions/parent/ext-pageAction.js6
-rw-r--r--browser/components/extensions/parent/ext-search.js2
-rw-r--r--browser/components/extensions/parent/ext-sidebarAction.js2
-rw-r--r--browser/components/extensions/parent/ext-tabs.js16
-rw-r--r--browser/components/extensions/parent/ext-topSites.js2
-rw-r--r--browser/components/extensions/parent/ext-url-overrides.js2
-rw-r--r--browser/components/extensions/parent/ext-windows.js2
-rw-r--r--browser/components/extensions/test/AppUiTestDelegate.sys.mjs4
-rw-r--r--browser/components/extensions/test/browser/browser.toml51
-rw-r--r--browser/components/extensions/test/browser/browser_AMBrowserExtensionsImport.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ExtensionControlledPopup.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_browserAction_click_types.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_browserAction_context.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_browserAction_contextMenu.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_browserAction_experiment.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_browserAction_pageAction_icon_permissions.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_browserAction_popup_preload.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_contextMenus.js6
-rw-r--r--browser/components/extensions/test/browser/browser_ext_contextMenus_bookmarks.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_contextMenus_commands.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_contextMenus_targetUrlPatterns.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_eval_bindings.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_reload.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_devtools_page.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_menus_accesskey.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_menus_targetElement.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_mousewheel_zoom.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_openPanel.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_optionsPage_modals.js86
-rw-r--r--browser/components/extensions/test/browser/browser_ext_pageAction_click_types.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_popup_focus.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_search_favicon.js14
-rw-r--r--browser/components/extensions/test/browser/browser_ext_sessions_getRecentlyClosed_tabs.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_sessions_restore.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_sessions_restoreTab.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_sessions_window_tab_value.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_settings_overrides_default_search.js20
-rw-r--r--browser/components/extensions/test/browser/browser_ext_sidebarAction.js61
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_autoDiscardable.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_discard_reversed.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_duplicate.js10
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_events.js14
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js12
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_executeScript_good.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_hide.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_hide_update.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_insertCSS.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_move_discarded.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_newtab_private.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_onCreated.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_onUpdated.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_onUpdated_filter.js4
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_query.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_saveAsPDF.js6
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_sendMessage.js6
-rw-r--r--browser/components/extensions/test/browser/browser_ext_tabs_sharingState.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_webRequest_error_after_stopped_or_closed.js2
-rw-r--r--browser/components/extensions/test/browser/browser_ext_windows_create_tabId.js3
-rw-r--r--browser/components/extensions/test/browser/browser_ext_windows_update.js4
-rw-r--r--browser/components/extensions/test/browser/browser_unified_extensions_overflowable_toolbar.js16
-rw-r--r--browser/components/extensions/test/browser/head.js8
-rw-r--r--browser/components/extensions/test/browser/search-engines/search-config-v2.json97
-rw-r--r--browser/components/extensions/test/xpcshell/test_ext_browsingData_settings.js4
-rw-r--r--browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_update.js8
-rw-r--r--browser/components/extensions/test/xpcshell/test_ext_history.js4
-rw-r--r--browser/components/extensions/test/xpcshell/test_ext_homepage_overrides_private.js2
-rw-r--r--browser/components/extensions/test/xpcshell/test_ext_settings_overrides_defaults.js182
-rw-r--r--browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search.js6
-rw-r--r--browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js132
-rw-r--r--browser/components/firefoxview/OpenTabs.sys.mjs18
-rw-r--r--browser/components/firefoxview/content/view-history.svg (renamed from browser/components/firefoxview/content/category-history.svg)0
-rw-r--r--browser/components/firefoxview/content/view-opentabs.svg (renamed from browser/components/firefoxview/content/category-opentabs.svg)0
-rw-r--r--browser/components/firefoxview/content/view-recentbrowsing.svg (renamed from browser/components/firefoxview/content/category-recentbrowsing.svg)0
-rw-r--r--browser/components/firefoxview/content/view-recentlyclosed.svg (renamed from browser/components/firefoxview/content/category-recentlyclosed.svg)0
-rw-r--r--browser/components/firefoxview/content/view-syncedtabs.svg (renamed from browser/components/firefoxview/content/category-syncedtabs.svg)0
-rw-r--r--browser/components/firefoxview/firefoxview.css46
-rw-r--r--browser/components/firefoxview/firefoxview.html59
-rw-r--r--browser/components/firefoxview/firefoxview.mjs56
-rw-r--r--browser/components/firefoxview/fxview-category-button.css125
-rw-r--r--browser/components/firefoxview/fxview-category-navigation.css60
-rw-r--r--browser/components/firefoxview/fxview-category-navigation.mjs150
-rw-r--r--browser/components/firefoxview/fxview-tab-list.css29
-rw-r--r--browser/components/firefoxview/fxview-tab-list.mjs496
-rw-r--r--browser/components/firefoxview/fxview-tab-row.css91
-rw-r--r--browser/components/firefoxview/history.mjs6
-rw-r--r--browser/components/firefoxview/jar.mn13
-rw-r--r--browser/components/firefoxview/opentabs.mjs252
-rw-r--r--browser/components/firefoxview/recentlyclosed.mjs1
-rw-r--r--browser/components/firefoxview/syncedtabs.mjs3
-rw-r--r--browser/components/firefoxview/tests/browser/FirefoxViewTestUtils.sys.mjs17
-rw-r--r--browser/components/firefoxview/tests/browser/browser.toml45
-rw-r--r--browser/components/firefoxview/tests/browser/browser_dragDrop_after_opening_fxViewTab.js1
-rw-r--r--browser/components/firefoxview/tests/browser/browser_firefoxview.js5
-rw-r--r--browser/components/firefoxview/tests/browser/browser_firefoxview_general_telemetry.js42
-rw-r--r--browser/components/firefoxview/tests/browser/browser_firefoxview_navigation.js54
-rw-r--r--browser/components/firefoxview/tests/browser/browser_firefoxview_paused.js106
-rw-r--r--browser/components/firefoxview/tests/browser/browser_firefoxview_search_telemetry.js18
-rw-r--r--browser/components/firefoxview/tests/browser/browser_firefoxview_tab.js6
-rw-r--r--browser/components/firefoxview/tests/browser/browser_firefoxview_virtual_list.js2
-rw-r--r--browser/components/firefoxview/tests/browser/browser_history_firefoxview.js75
-rw-r--r--browser/components/firefoxview/tests/browser/browser_opentabs_cards.js431
-rw-r--r--browser/components/firefoxview/tests/browser/browser_opentabs_changes.js7
-rw-r--r--browser/components/firefoxview/tests/browser/browser_opentabs_firefoxview.js159
-rw-r--r--browser/components/firefoxview/tests/browser/browser_opentabs_more.js151
-rw-r--r--browser/components/firefoxview/tests/browser/browser_opentabs_pinned_tabs.js481
-rw-r--r--browser/components/firefoxview/tests/browser/browser_opentabs_recency.js31
-rw-r--r--browser/components/firefoxview/tests/browser/browser_opentabs_search.js161
-rw-r--r--browser/components/firefoxview/tests/browser/browser_opentabs_tab_indicators.js128
-rw-r--r--browser/components/firefoxview/tests/browser/browser_recentlyclosed_firefoxview.js18
-rw-r--r--browser/components/firefoxview/tests/browser/browser_syncedtabs_errors_firefoxview.js4
-rw-r--r--browser/components/firefoxview/tests/browser/browser_syncedtabs_firefoxview.js20
-rw-r--r--browser/components/firefoxview/tests/browser/browser_tab_list_keyboard_navigation.js334
-rw-r--r--browser/components/firefoxview/tests/browser/head.js83
-rw-r--r--browser/components/firefoxview/tests/chrome/chrome.toml2
-rw-r--r--browser/components/firefoxview/tests/chrome/test_fxview_category_navigation.html322
-rw-r--r--browser/components/firefoxview/tests/chrome/test_fxview_tab_list.html4
-rw-r--r--browser/components/firefoxview/viewpage.mjs28
-rw-r--r--browser/components/migration/ChromeProfileMigrator.sys.mjs2
-rw-r--r--browser/components/migration/EdgeProfileMigrator.sys.mjs4
-rw-r--r--browser/components/migration/MigrationUtils.sys.mjs3
-rw-r--r--browser/components/migration/MigrationWizardParent.sys.mjs12
-rw-r--r--browser/components/migration/SafariProfileMigrator.sys.mjs2
-rw-r--r--browser/components/migration/content/migration-wizard.mjs155
-rw-r--r--browser/components/migration/docs/migration-wizard.rst17
-rw-r--r--browser/components/migration/tests/browser/browser_file_migration.js2
-rw-r--r--browser/components/migration/tests/browser/browser_safari_passwords.js2
-rw-r--r--browser/components/migration/tests/chrome/test_migration_wizard.html254
-rw-r--r--browser/components/migration/tests/marionette/test_refresh_firefox.py16
-rw-r--r--browser/components/migration/tests/unit/test_Chrome_permissions.js2
-rw-r--r--browser/components/migration/tests/unit/test_Safari_permissions.js2
-rw-r--r--browser/components/moz.build3
-rw-r--r--browser/components/newtab/.eslintrc.js5
-rw-r--r--browser/components/newtab/AboutNewTabService.sys.mjs4
-rw-r--r--browser/components/newtab/components/CustomElements/paragraph.js2
-rw-r--r--browser/components/newtab/content-src/components/Base/Base.jsx15
-rw-r--r--browser/components/newtab/content-src/components/CollapsibleSection/CollapsibleSection.jsx17
-rw-r--r--browser/components/newtab/content-src/components/ContextMenu/ContextMenuButton.jsx2
-rw-r--r--browser/components/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx19
-rw-r--r--browser/components/newtab/content-src/components/CustomizeMenu/CustomizeMenu.jsx1
-rw-r--r--browser/components/newtab/content-src/components/CustomizeMenu/_CustomizeMenu.scss35
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamAdmin/DiscoveryStreamAdmin.jsx2
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx7
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid.jsx8
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/DSCard.jsx76
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/_DSCard.scss32
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSContextFooter/DSContextFooter.jsx9
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSContextFooter/_DSContextFooter.scss3
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSPrivacyModal/DSPrivacyModal.jsx6
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/FeatureHighlight.jsx74
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/SponsoredContentHighlight.jsx34
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/_FeatureHighlight.scss98
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/_SponsoredContentHighlight.scss33
-rw-r--r--browser/components/newtab/content-src/components/DiscoveryStreamComponents/SafeAnchor/SafeAnchor.jsx9
-rw-r--r--browser/components/newtab/content-src/components/ErrorBoundary/ErrorBoundary.jsx2
-rw-r--r--browser/components/newtab/content-src/components/TopSites/TopSite.jsx79
-rw-r--r--browser/components/newtab/content-src/components/TopSites/TopSites.jsx2
-rw-r--r--browser/components/newtab/content-src/components/TopSites/_TopSites.scss19
-rw-r--r--browser/components/newtab/content-src/lib/init-store.js2
-rw-r--r--browser/components/newtab/content-src/lib/link-menu-options.js2
-rw-r--r--browser/components/newtab/content-src/lib/selectLayoutRender.js2
-rw-r--r--browser/components/newtab/content-src/styles/_activity-stream.scss2
-rw-r--r--browser/components/newtab/content-src/styles/_icons.scss4
-rw-r--r--browser/components/newtab/css/activity-stream-linux.css176
-rw-r--r--browser/components/newtab/css/activity-stream-mac.css176
-rw-r--r--browser/components/newtab/css/activity-stream-windows.css176
-rw-r--r--browser/components/newtab/data/content/activity-stream.bundle.js290
-rw-r--r--browser/components/newtab/data/content/assets/sponsor-message-icon.svg6
-rw-r--r--browser/components/newtab/docs/index.rst2
-rw-r--r--browser/components/newtab/docs/v2-system-addon/preferences.md2
-rw-r--r--browser/components/newtab/docs/v2-system-addon/unit_testing_guide.md8
-rw-r--r--browser/components/newtab/karma.mc.config.js8
-rw-r--r--browser/components/newtab/lib/ActivityStream.sys.mjs4
-rw-r--r--browser/components/newtab/lib/ActivityStreamMessageChannel.sys.mjs2
-rw-r--r--browser/components/newtab/lib/DiscoveryStreamFeed.sys.mjs19
-rw-r--r--browser/components/newtab/lib/DownloadsManager.sys.mjs2
-rw-r--r--browser/components/newtab/lib/PersonalityProvider/RecipeExecutor.mjs4
-rw-r--r--browser/components/newtab/lib/PrefsFeed.sys.mjs4
-rw-r--r--browser/components/newtab/lib/RecommendationProvider.sys.mjs2
-rw-r--r--browser/components/newtab/lib/SectionsManager.sys.mjs4
-rw-r--r--browser/components/newtab/lib/Store.sys.mjs2
-rw-r--r--browser/components/newtab/lib/TelemetryFeed.sys.mjs10
-rw-r--r--browser/components/newtab/lib/TopSitesFeed.sys.mjs6
-rw-r--r--browser/components/newtab/loaders/inject-loader.js59
-rw-r--r--browser/components/newtab/metrics.yaml21
-rw-r--r--browser/components/newtab/package-lock.json230
-rw-r--r--browser/components/newtab/package.json6
-rw-r--r--browser/components/newtab/test/browser/browser_newtab_ping.js2
-rw-r--r--browser/components/newtab/test/schemas/pings.js2
-rw-r--r--browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSCard.test.jsx8
-rw-r--r--browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/FeatureHighlight.test.jsx60
-rw-r--r--browser/components/newtab/test/unit/content-src/components/ModalOverlay.test.jsx (renamed from browser/components/asrouter/tests/unit/ModalOverlay.test.jsx)0
-rw-r--r--browser/components/newtab/test/unit/content-src/components/TopSites.test.jsx52
-rw-r--r--browser/components/newtab/test/unit/lib/AboutPreferences.test.js2
-rw-r--r--browser/components/newtab/test/unit/lib/ActivityStream.test.js10
-rw-r--r--browser/components/newtab/test/unit/lib/PersonalityProvider/PersonalityProvider.test.js4
-rw-r--r--browser/components/newtab/test/unit/lib/PersonalityProvider/RecipeExecutor.test.js2
-rw-r--r--browser/components/newtab/test/unit/unit-entry.js14
-rw-r--r--browser/components/newtab/test/unit/utils.js10
-rw-r--r--browser/components/newtab/test/xpcshell/test_HighlightsFeed.js4
-rw-r--r--browser/components/newtab/test/xpcshell/test_PlacesFeed.js10
-rw-r--r--browser/components/newtab/test/xpcshell/test_Store.js2
-rw-r--r--browser/components/newtab/test/xpcshell/test_TelemetryFeed.js32
-rw-r--r--browser/components/newtab/test/xpcshell/xpcshell.toml6
-rw-r--r--browser/components/newtab/tools/resourceUriPlugin.js9
-rw-r--r--browser/components/newtab/webpack.system-addon.config.js3
-rw-r--r--browser/components/originattributes/test/browser/browser_firstPartyIsolation_saveAs.js3
-rw-r--r--browser/components/originattributes/test/browser/browser_httpauth.js19
-rw-r--r--browser/components/places/Interactions.sys.mjs15
-rw-r--r--browser/components/places/PlacesUIUtils.sys.mjs8
-rw-r--r--browser/components/places/content/browserPlacesViews.js12
-rw-r--r--browser/components/places/content/controller.js10
-rw-r--r--browser/components/places/content/places-menupopup.js2
-rw-r--r--browser/components/places/content/places-tree.js8
-rw-r--r--browser/components/places/content/places.js8
-rw-r--r--browser/components/places/content/treeView.js26
-rw-r--r--browser/components/places/docs/Bookmarks.rst6
-rw-r--r--browser/components/places/docs/History.rst6
-rw-r--r--browser/components/places/docs/architecture-overview.rst2
-rw-r--r--browser/components/places/tests/browser/browser.toml9
-rw-r--r--browser/components/places/tests/browser/browser_autoshow_bookmarks_toolbar.js6
-rw-r--r--browser/components/places/tests/browser/browser_bookmarkProperties_no_user_actions.js4
-rw-r--r--browser/components/places/tests/browser/browser_bookmark_all_tabs.js46
-rw-r--r--browser/components/places/tests/browser/browser_bookmark_backup_export_import.js2
-rw-r--r--browser/components/places/tests/browser/browser_bookmark_context_menu_contents.js14
-rw-r--r--browser/components/places/tests/browser/browser_bookmark_current_tabs.js71
-rw-r--r--browser/components/places/tests/browser/browser_bookmark_popup.js14
-rw-r--r--browser/components/places/tests/browser/browser_bookmarksProperties.js6
-rw-r--r--browser/components/places/tests/browser/browser_click_bookmarks_on_toolbar.js4
-rw-r--r--browser/components/places/tests/browser/browser_controller_onDrop.js4
-rw-r--r--browser/components/places/tests/browser/browser_controller_onDrop_query.js4
-rw-r--r--browser/components/places/tests/browser/browser_controller_onDrop_sidebar.js8
-rw-r--r--browser/components/places/tests/browser/browser_controller_onDrop_tagFolder.js4
-rw-r--r--browser/components/places/tests/browser/browser_library_delete.js42
-rw-r--r--browser/components/places/tests/browser/browser_library_delete_bookmarks_in_tags.js2
-rw-r--r--browser/components/places/tests/browser/browser_panelview_bookmarks_delete.js2
-rw-r--r--browser/components/places/tests/browser/browser_sidebar_open_bookmarks.js2
-rw-r--r--browser/components/places/tests/browser/browser_sidebarpanels_click.js4
-rw-r--r--browser/components/places/tests/browser/browser_toolbar_overflow.js2
-rw-r--r--browser/components/places/tests/browser/head.js4
-rw-r--r--browser/components/places/tests/browser/interactions/browser_interactions_typing.js2
-rw-r--r--browser/components/places/tests/browser/interactions/browser_interactions_view_time.js4
-rw-r--r--browser/components/places/tests/unit/test_clearHistory_shutdown.js2
-rw-r--r--browser/components/preferences/containers.js2
-rw-r--r--browser/components/preferences/dialogs/addEngine.js2
-rw-r--r--browser/components/preferences/dialogs/blocklists.js14
-rw-r--r--browser/components/preferences/dialogs/clearSiteData.js2
-rw-r--r--browser/components/preferences/dialogs/colors.xhtml10
-rw-r--r--browser/components/preferences/dialogs/connection.js10
-rw-r--r--browser/components/preferences/dialogs/connection.xhtml14
-rw-r--r--browser/components/preferences/dialogs/containers.js4
-rw-r--r--browser/components/preferences/dialogs/dohExceptions.js1
-rw-r--r--browser/components/preferences/dialogs/fonts.xhtml4
-rw-r--r--browser/components/preferences/dialogs/translationExceptions.js20
-rw-r--r--browser/components/preferences/dialogs/translations.js20
-rw-r--r--browser/components/preferences/findInPage.js43
-rw-r--r--browser/components/preferences/home.js18
-rw-r--r--browser/components/preferences/main.inc.xhtml13
-rw-r--r--browser/components/preferences/main.js26
-rw-r--r--browser/components/preferences/preferences.js9
-rw-r--r--browser/components/preferences/preferences.xhtml3
-rw-r--r--browser/components/preferences/privacy.inc.xhtml9
-rw-r--r--browser/components/preferences/privacy.js13
-rw-r--r--browser/components/preferences/search.js1113
-rw-r--r--browser/components/preferences/sync.js2
-rw-r--r--browser/components/preferences/tests/browser.toml4
-rw-r--r--browser/components/preferences/tests/browser_about_settings.js29
-rw-r--r--browser/components/preferences/tests/browser_basic_rebuild_fonts_test.js2
-rw-r--r--browser/components/preferences/tests/browser_browser_languages_subdialog.js20
-rw-r--r--browser/components/preferences/tests/browser_cert_export.js2
-rw-r--r--browser/components/preferences/tests/browser_connection.js2
-rw-r--r--browser/components/preferences/tests/browser_connection_bug388287.js2
-rw-r--r--browser/components/preferences/tests/browser_cookies_exceptions.js26
-rw-r--r--browser/components/preferences/tests/browser_dns_over_https_exceptions_subdialog.js185
-rw-r--r--browser/components/preferences/tests/browser_fluent.js4
-rw-r--r--browser/components/preferences/tests/browser_localSearchShortcuts.js4
-rw-r--r--browser/components/preferences/tests/browser_permissions_urlFieldHidden.js2
-rw-r--r--browser/components/preferences/tests/browser_proxy_backup.js2
-rw-r--r--browser/components/preferences/tests/browser_searchChangedEngine.js11
-rw-r--r--browser/components/preferences/tests/browser_search_within_preferences_2.js84
-rw-r--r--browser/components/preferences/tests/browser_sync_chooseWhatToSync.js2
-rw-r--r--browser/components/preferences/tests/browser_sync_pairing.js2
-rw-r--r--browser/components/preferences/tests/browser_trendingsuggestions.js17
-rw-r--r--browser/components/preferences/tests/head.js2
-rw-r--r--browser/components/preferences/tests/siteData/browser_clearSiteData.js2
-rw-r--r--browser/components/preferences/tests/siteData/head.js2
-rw-r--r--browser/components/preferences/tests/siteData/service_worker_test.html2
-rw-r--r--browser/components/preferences/translations.inc.xhtml7
-rw-r--r--browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about.js27
-rw-r--r--browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir.js2
-rw-r--r--browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir_c.js2
-rw-r--r--browser/components/profiles/ProfilesChild.sys.mjs5
-rw-r--r--browser/components/profiles/ProfilesParent.sys.mjs5
-rw-r--r--browser/components/profiles/content/profiles.ftl16
-rw-r--r--browser/components/profiles/content/profiles.html20
-rw-r--r--browser/components/profiles/jar.mn6
-rw-r--r--browser/components/profiles/moz.build15
-rw-r--r--browser/components/protocolhandler/WebProtocolHandlerRegistrar.sys.mjs403
-rw-r--r--browser/components/protocolhandler/metrics.yaml2
-rw-r--r--browser/components/reportbrokensite/ReportBrokenSite.sys.mjs12
-rw-r--r--browser/components/reportbrokensite/test/browser/browser.toml2
-rw-r--r--browser/components/reportbrokensite/test/browser/browser_site_not_working_fallback.js35
-rw-r--r--browser/components/reportbrokensite/test/browser/browser_tab_key_order.js2
-rw-r--r--browser/components/reportbrokensite/test/browser/head.js21
-rw-r--r--browser/components/reportbrokensite/test/browser/send.js24
-rw-r--r--browser/components/reportbrokensite/test/browser/send_more_info.js52
-rw-r--r--browser/components/resistfingerprinting/test/mochitest/test_keyboard_event.html13
-rw-r--r--browser/components/screenshots/ScreenshotsOverlayChild.sys.mjs3
-rw-r--r--browser/components/screenshots/ScreenshotsUtils.sys.mjs168
-rw-r--r--browser/components/screenshots/fileHelpers.mjs2
-rw-r--r--browser/components/screenshots/tests/browser/browser.toml10
-rw-r--r--browser/components/screenshots/tests/browser/browser_screenshots_drag_scroll_test.js17
-rw-r--r--browser/components/screenshots/tests/browser/browser_screenshots_test_downloads.js2
-rw-r--r--browser/components/screenshots/tests/browser/browser_screenshots_test_full_page.js105
-rw-r--r--browser/components/screenshots/tests/browser/browser_screenshots_test_toggle_pref.js97
-rw-r--r--browser/components/screenshots/tests/browser/browser_screenshots_test_visible.js206
-rw-r--r--browser/components/screenshots/tests/browser/browser_test_moving_tab_to_new_window.js123
-rw-r--r--browser/components/screenshots/tests/browser/head.js39
-rw-r--r--browser/components/search/DomainToCategoriesMap.worker.mjs101
-rw-r--r--browser/components/search/SearchOneOffs.sys.mjs12
-rw-r--r--browser/components/search/SearchSERPTelemetry.sys.mjs305
-rw-r--r--browser/components/search/content/autocomplete-popup.js6
-rw-r--r--browser/components/search/content/contentSearchUI.js4
-rw-r--r--browser/components/search/content/searchbar.js18
-rw-r--r--browser/components/search/metrics.yaml14
-rw-r--r--browser/components/search/moz.build1
-rw-r--r--browser/components/search/pings.yaml24
-rw-r--r--browser/components/search/schema/search-telemetry-schema.json39
-rw-r--r--browser/components/search/test/browser/browser_426329.js2
-rw-r--r--browser/components/search/test/browser/browser_contentSearch.js14
-rw-r--r--browser/components/search/test/browser/browser_contentSearchUI.js44
-rw-r--r--browser/components/search/test/browser/browser_contentSearchUI_default.js25
-rw-r--r--browser/components/search/test/browser/browser_defaultPrivate_nimbus.js45
-rw-r--r--browser/components/search/test/browser/browser_google_behavior.js4
-rw-r--r--browser/components/search/test/browser/browser_oneOffContextMenu_setDefault.js4
-rw-r--r--browser/components/search/test/browser/browser_rich_suggestions.js56
-rw-r--r--browser/components/search/test/browser/browser_searchEngine_behaviors.js12
-rw-r--r--browser/components/search/test/browser/browser_searchbar_keyboard_navigation.js16
-rw-r--r--browser/components/search/test/browser/browser_searchbar_openpopup.js9
-rw-r--r--browser/components/search/test/browser/browser_trending_suggestions.js63
-rw-r--r--browser/components/search/test/browser/contentSearchUI.html3
-rw-r--r--browser/components/search/test/browser/head.js2
-rw-r--r--browser/components/search/test/browser/telemetry/browser.toml30
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_glean_serp_event_telemetry_categorization_enabled_by_nimbus_variable.js2
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component.js41
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component_skipCount_children.js149
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component_skipCount_parent.js134
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_ad_values.js2
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_download_timer.js6
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_extraction.js191
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_region.js2
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting.js2
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting_timer.js2
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting_timer_wakeup.js2
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_content.js8
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_eventListeners_children.js480
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_eventListeners_parent.js434
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_ignoreLinkRegexps.js223
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_nonAdsLinkQueryParamNames.js252
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_target.js174
-rw-r--r--browser/components/search/test/browser/telemetry/browser_search_telemetry_sources_webextension.js4
-rw-r--r--browser/components/search/test/browser/telemetry/domain_category_mappings.json8
-rw-r--r--browser/components/search/test/browser/telemetry/head.js83
-rw-r--r--browser/components/search/test/browser/telemetry/searchTelemetryAd_components_cookie_banner.html16
-rw-r--r--browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_content.html9
-rw-r--r--browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_redirecting_links.html40
-rw-r--r--browser/components/search/test/browser/telemetry/searchTelemetryDomainExtraction.html179
-rw-r--r--browser/components/search/test/browser/telemetry/searchTelemetrySinglePageApp.html4
-rw-r--r--browser/components/search/test/browser/telemetry/searchTelemetry_redirect_with_js.html25
-rw-r--r--browser/components/search/test/unit/domain_category_mappings_1a.json3
-rw-r--r--browser/components/search/test/unit/domain_category_mappings_1b.json3
-rw-r--r--browser/components/search/test/unit/domain_category_mappings_2a.json3
-rw-r--r--browser/components/search/test/unit/domain_category_mappings_2b.json3
-rw-r--r--browser/components/search/test/unit/test_search_telemetry_categorization_logic.js225
-rw-r--r--browser/components/search/test/unit/test_search_telemetry_categorization_process_domains.js89
-rw-r--r--browser/components/search/test/unit/test_search_telemetry_categorization_sync.js66
-rw-r--r--browser/components/search/test/unit/xpcshell.toml8
-rw-r--r--browser/components/shell/WindowsUserChoice.cpp13
-rw-r--r--browser/components/shell/WindowsUserChoice.h9
-rw-r--r--browser/components/shopping/content/letter-grade.css2
-rw-r--r--browser/components/shopping/content/shopping-container.css2
-rw-r--r--browser/components/shopping/content/shopping-sidebar.js2
-rw-r--r--browser/components/sidebar/jar.mn5
-rw-r--r--browser/components/sidebar/moz.build7
-rw-r--r--browser/components/storybook/.babelrc.json5
-rw-r--r--browser/components/storybook/.storybook/addon-component-status/StatusIndicator.jsx (renamed from browser/components/storybook/.storybook/addon-component-status/StatusIndicator.mjs)4
-rw-r--r--browser/components/storybook/.storybook/addon-component-status/preset/manager.mjs6
-rw-r--r--browser/components/storybook/.storybook/addon-fluent/FluentPanel.jsx110
-rw-r--r--browser/components/storybook/.storybook/addon-fluent/FluentPanel.mjs121
-rw-r--r--browser/components/storybook/.storybook/addon-fluent/PseudoLocalizationButton.jsx (renamed from browser/components/storybook/.storybook/addon-fluent/PseudoLocalizationButton.mjs)2
-rw-r--r--browser/components/storybook/.storybook/addon-fluent/fluent-panel.css64
-rw-r--r--browser/components/storybook/.storybook/addon-fluent/preset/manager.mjs13
-rw-r--r--browser/components/storybook/.storybook/addon-fluent/withPseudoLocalization.mjs11
-rw-r--r--browser/components/storybook/.storybook/main.js49
-rw-r--r--browser/components/storybook/.storybook/markdown-story-indexer.js50
-rw-r--r--browser/components/storybook/.storybook/markdown-story-loader.js123
-rw-r--r--browser/components/storybook/.storybook/markdown-story-utils.js197
-rw-r--r--browser/components/storybook/.storybook/preview-head.html9
-rw-r--r--browser/components/storybook/.storybook/preview.mjs30
-rw-r--r--browser/components/storybook/docs/README.typography.stories.md10
-rw-r--r--browser/components/storybook/package-lock.json34313
-rw-r--r--browser/components/storybook/package.json24
-rw-r--r--browser/components/storybook/stories/button.stories.mjs3
-rw-r--r--browser/components/storybook/stories/fxview-category-navigation.stories.mjs113
-rw-r--r--browser/components/storybook/stories/fxview-tab-list.stories.md14
-rw-r--r--browser/components/storybook/stories/migration-wizard.stories.mjs66
-rw-r--r--browser/components/syncedtabs/TabListView.sys.mjs18
-rw-r--r--browser/components/tabpreview/tabpreview.css42
-rw-r--r--browser/components/tabpreview/tabpreview.mjs32
-rw-r--r--browser/components/tests/browser/browser.toml6
-rw-r--r--browser/components/tests/browser/browser_default_webprotocol_handler_mailto.js117
-rw-r--r--browser/components/tests/browser/browser_system_notification_telemetry.js54
-rw-r--r--browser/components/tests/browser/whats_new_page/browser.toml2
-rw-r--r--browser/components/tests/browser/whats_new_page/browser_whats_new_page_nimbus.js109
-rw-r--r--browser/components/tests/browser/whats_new_page/browser_whats_new_page_nimbus.toml6
-rw-r--r--browser/components/translations/content/TranslationsPanelShared.sys.mjs122
-rw-r--r--browser/components/translations/content/fullPageTranslationsPanel.inc.xhtml (renamed from browser/components/translations/content/translationsPanel.inc.xhtml)85
-rw-r--r--browser/components/translations/content/fullPageTranslationsPanel.js (renamed from browser/components/translations/content/translationsPanel.js)194
-rw-r--r--browser/components/translations/content/selectTranslationsPanel.inc.xhtml102
-rw-r--r--browser/components/translations/content/selectTranslationsPanel.js220
-rw-r--r--browser/components/translations/jar.mn4
-rw-r--r--browser/components/translations/tests/browser/browser.toml96
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_a11y_focus.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_a11y_focus.js)2
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_bad_data.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_bad_data.js)5
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_basic.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_basic.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_manual.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_manual.js)6
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_restore.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_restore.js)6
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_app_menu_never_translate_language.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_app_menu_never_translate_language.js)2
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_app_menu_never_translate_site.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_app_menu_never_translate_site.js)8
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_auto_translate_error_view.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_auto_translate_error_view.js)6
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_auto_translate_revisit_view.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_auto_translate_revisit_view.js)6
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_basics.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_basics.js)8
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_button.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_button.js)0
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_cancel.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_cancel.js)2
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_close_panel_never_translate_language_with_translations_active.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_close_panel_never_translate_language_with_translations_active.js)14
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_close_panel_never_translate_language_with_translations_inactive.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_close_panel_never_translate_language_with_translations_inactive.js)10
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_close_panel_never_translate_site.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_close_panel_never_translate_site.js)16
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_destroy.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_engine_destroy.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_destroy_pending.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_engine_destroy_pending.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_unsupported.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_engine_unsupported.js)0
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_unsupported_lang.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_engine_unsupported_lang.js)2
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_firstrun.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_firstrun.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_firstrun_revisit.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_firstrun_revisit.js)8
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_fuzzing.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_fuzzing.js)6
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_gear.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_gear.js)2
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_language.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_never_translate_language.js)10
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_never_translate_site.js)10
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site_auto.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_never_translate_site_auto.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site_basic.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_never_translate_site_basic.js)2
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site_manual.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_never_translate_site_manual.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_retry.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_retry.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_settings_unsupported_lang.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_settings_unsupported_lang.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_panel_switch_languages.js (renamed from browser/components/translations/tests/browser/browser_translations_panel_switch_languages.js)8
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_reader_mode.js (renamed from browser/components/translations/tests/browser/browser_translations_reader_mode.js)2
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_auto_translate.js (renamed from browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_auto_translate.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_basics.js (renamed from browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_basics.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_translation_failure.js (renamed from browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_translation_failure.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_unsupported_lang.js (renamed from browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_unsupported_lang.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_telemetry_open_panel.js (renamed from browser/components/translations/tests/browser/browser_translations_telemetry_open_panel.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_telemetry_panel_auto_offer.js (renamed from browser/components/translations/tests/browser/browser_translations_telemetry_panel_auto_offer.js)0
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_telemetry_panel_auto_offer_settings.js (renamed from browser/components/translations/tests/browser/browser_translations_telemetry_panel_auto_offer_settings.js)4
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_telemetry_switch_languages.js (renamed from browser/components/translations/tests/browser/browser_translations_telemetry_switch_languages.js)8
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_telemetry_translation_failure.js (renamed from browser/components/translations/tests/browser/browser_translations_telemetry_translation_failure.js)2
-rw-r--r--browser/components/translations/tests/browser/browser_translations_full_page_telemetry_translation_request.js (renamed from browser/components/translations/tests/browser/browser_translations_telemetry_translation_request.js)2
-rw-r--r--browser/components/translations/tests/browser/browser_translations_select_context_menu_with_full_page_translations_active.js8
-rw-r--r--browser/components/translations/tests/browser/browser_translations_select_panel_language_selectors.js54
-rw-r--r--browser/components/translations/tests/browser/browser_translations_select_panel_mainview_ui.js36
-rw-r--r--browser/components/translations/tests/browser/head.js604
-rw-r--r--browser/components/uitour/test/browser.toml20
-rw-r--r--browser/components/urlbar/QuickActionsLoaderDefault.sys.mjs9
-rw-r--r--browser/components/urlbar/UrlbarController.sys.mjs132
-rw-r--r--browser/components/urlbar/UrlbarEventBufferer.sys.mjs4
-rw-r--r--browser/components/urlbar/UrlbarInput.sys.mjs153
-rw-r--r--browser/components/urlbar/UrlbarPrefs.sys.mjs8
-rw-r--r--browser/components/urlbar/UrlbarProviderAboutPages.sys.mjs2
-rw-r--r--browser/components/urlbar/UrlbarProviderAliasEngines.sys.mjs3
-rw-r--r--browser/components/urlbar/UrlbarProviderAutofill.sys.mjs44
-rw-r--r--browser/components/urlbar/UrlbarProviderCalculator.sys.mjs4
-rw-r--r--browser/components/urlbar/UrlbarProviderClipboard.sys.mjs5
-rw-r--r--browser/components/urlbar/UrlbarProviderContextualSearch.sys.mjs14
-rw-r--r--browser/components/urlbar/UrlbarProviderHeuristicFallback.sys.mjs23
-rw-r--r--browser/components/urlbar/UrlbarProviderInputHistory.sys.mjs55
-rw-r--r--browser/components/urlbar/UrlbarProviderInterventions.sys.mjs7
-rw-r--r--browser/components/urlbar/UrlbarProviderOmnibox.sys.mjs4
-rw-r--r--browser/components/urlbar/UrlbarProviderOpenTabs.sys.mjs94
-rw-r--r--browser/components/urlbar/UrlbarProviderPlaces.sys.mjs4
-rw-r--r--browser/components/urlbar/UrlbarProviderPrivateSearch.sys.mjs3
-rw-r--r--browser/components/urlbar/UrlbarProviderQuickActions.sys.mjs4
-rw-r--r--browser/components/urlbar/UrlbarProviderQuickSuggest.sys.mjs17
-rw-r--r--browser/components/urlbar/UrlbarProviderQuickSuggestContextualOptIn.sys.mjs8
-rw-r--r--browser/components/urlbar/UrlbarProviderRemoteTabs.sys.mjs2
-rw-r--r--browser/components/urlbar/UrlbarProviderSearchSuggestions.sys.mjs6
-rw-r--r--browser/components/urlbar/UrlbarProviderSearchTips.sys.mjs9
-rw-r--r--browser/components/urlbar/UrlbarProviderTabToSearch.sys.mjs15
-rw-r--r--browser/components/urlbar/UrlbarProviderTokenAliasEngines.sys.mjs21
-rw-r--r--browser/components/urlbar/UrlbarProviderTopSites.sys.mjs100
-rw-r--r--browser/components/urlbar/UrlbarProviderUnitConversion.sys.mjs2
-rw-r--r--browser/components/urlbar/UrlbarProviderWeather.sys.mjs6
-rw-r--r--browser/components/urlbar/UrlbarSearchOneOffs.sys.mjs6
-rw-r--r--browser/components/urlbar/UrlbarSearchUtils.sys.mjs8
-rw-r--r--browser/components/urlbar/UrlbarUtils.sys.mjs116
-rw-r--r--browser/components/urlbar/UrlbarView.sys.mjs115
-rw-r--r--browser/components/urlbar/content/enUS-searchFeatures.ftl5
-rw-r--r--browser/components/urlbar/content/quicksuggestOnboarding.css2
-rw-r--r--browser/components/urlbar/docs/overview.rst18
-rw-r--r--browser/components/urlbar/docs/ranking.rst2
-rw-r--r--browser/components/urlbar/docs/telemetry.rst13
-rw-r--r--browser/components/urlbar/docs/testing.rst16
-rw-r--r--browser/components/urlbar/docs/utilities.rst8
-rw-r--r--browser/components/urlbar/metrics.yaml152
-rw-r--r--browser/components/urlbar/private/AddonSuggestions.sys.mjs2
-rw-r--r--browser/components/urlbar/private/AdmWikipedia.sys.mjs2
-rw-r--r--browser/components/urlbar/private/BaseFeature.sys.mjs28
-rw-r--r--browser/components/urlbar/private/MDNSuggestions.sys.mjs4
-rw-r--r--browser/components/urlbar/private/SuggestBackendJs.sys.mjs1
-rw-r--r--browser/components/urlbar/private/SuggestBackendRust.sys.mjs43
-rw-r--r--browser/components/urlbar/private/Weather.sys.mjs151
-rw-r--r--browser/components/urlbar/private/YelpSuggestions.sys.mjs4
-rw-r--r--browser/components/urlbar/tests/UrlbarTestUtils.sys.mjs7
-rw-r--r--browser/components/urlbar/tests/browser-tips/browser_searchTips_interaction.js2
-rw-r--r--browser/components/urlbar/tests/browser-updateResults/browser_appendSpanCount.js2
-rw-r--r--browser/components/urlbar/tests/browser-updateResults/head.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser.toml3
-rw-r--r--browser/components/urlbar/tests/browser/browser_acknowledgeFeedbackAndDismissal.js162
-rw-r--r--browser/components/urlbar/tests/browser/browser_add_search_engine.js5
-rw-r--r--browser/components/urlbar/tests/browser/browser_autoOpen.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_bestMatch.js6
-rw-r--r--browser/components/urlbar/tests/browser/browser_blanking.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_clipboard.js43
-rw-r--r--browser/components/urlbar/tests/browser/browser_copy_during_load.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_copying.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_dragdropURL.js4
-rw-r--r--browser/components/urlbar/tests/browser/browser_dynamicResults.js6
-rw-r--r--browser/components/urlbar/tests/browser/browser_groupLabels.js4
-rw-r--r--browser/components/urlbar/tests/browser/browser_locationBarCommand.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_locationBarExternalLoad.js4
-rw-r--r--browser/components/urlbar/tests/browser/browser_locationchange_urlbar_edit_dos.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_oneOffs_heuristicRestyle.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_oneOffs_settings.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_recentsearches.js94
-rw-r--r--browser/components/urlbar/tests/browser/browser_redirect_error.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_remove_match.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_result_onSelection.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_results_format_displayValue.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_retainedResultsOnFocus.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_revert.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_searchMode_indicator.js4
-rw-r--r--browser/components/urlbar/tests/browser/browser_searchMode_indicator_clickthrough.js4
-rw-r--r--browser/components/urlbar/tests/browser/browser_searchMode_localOneOffs_actionText.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_searchMode_suggestions.js20
-rw-r--r--browser/components/urlbar/tests/browser/browser_searchSingleWordNotification.js10
-rw-r--r--browser/components/urlbar/tests/browser/browser_search_continuation.js64
-rw-r--r--browser/components/urlbar/tests/browser/browser_selectStaleResults.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_shortcuts_add_search_engine.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_speculative_connect_not_with_client_cert.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_stop.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_strip_on_share.js4
-rw-r--r--browser/components/urlbar/tests/browser/browser_strip_on_share_telemetry.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_switchTab_inputHistory.js69
-rw-r--r--browser/components/urlbar/tests/browser/browser_switchTab_override.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_tabMatchesInAwesomebar.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_tabToSearch.js6
-rw-r--r--browser/components/urlbar/tests/browser/browser_top_sites_switchtab.js209
-rw-r--r--browser/components/urlbar/tests/browser/browser_urlbar_telemetry_dynamic.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_urlbar_telemetry_tip.js4
-rw-r--r--browser/components/urlbar/tests/browser/browser_valueOnTabSwitch.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_view_removedSelectedElement.js2
-rw-r--r--browser/components/urlbar/tests/browser/browser_view_selectionByMouse.js7
-rw-r--r--browser/components/urlbar/tests/browser/head.js2
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser.toml22
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_abandonment_tips.js2
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_abandonment_type.js109
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_edge_cases.js8
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_groups.js8
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_interaction.js8
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_selected_result.js269
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_tips.js4
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_type.js16
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_exposure_edge_cases.js626
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_groups.js258
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction.js68
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction_persisted_search_terms_disabled.js57
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction_persisted_search_terms_enabled.js61
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_n_chars_n_words.js40
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_preferences.js41
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_sap.js38
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_search_engine_default_id.js28
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_search_mode.js72
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_timing.js91
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/head-groups.js32
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/head-interaction.js23
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/head-n_chars_n_words.js8
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/head-sap.js5
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/head-search_engine_default_id.js4
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/head-search_mode.js12
-rw-r--r--browser/components/urlbar/tests/engagementTelemetry/browser/head.js28
-rw-r--r--browser/components/urlbar/tests/quicksuggest/MerinoTestUtils.sys.mjs18
-rw-r--r--browser/components/urlbar/tests/quicksuggest/RemoteSettingsServer.sys.mjs30
-rw-r--r--browser/components/urlbar/tests/quicksuggest/browser/browser_quicksuggest_onboardingDialog.js3
-rw-r--r--browser/components/urlbar/tests/quicksuggest/browser/browser_telemetry_impressionEdgeCases.js2
-rw-r--r--browser/components/urlbar/tests/quicksuggest/browser/browser_weather.js107
-rw-r--r--browser/components/urlbar/tests/quicksuggest/browser/head.js82
-rw-r--r--browser/components/urlbar/tests/quicksuggest/unit/head.js113
-rw-r--r--browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest.js58
-rw-r--r--browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_addons.js12
-rw-r--r--browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_pocket.js4
-rw-r--r--browser/components/urlbar/tests/quicksuggest/unit/test_rust_ingest.js33
-rw-r--r--browser/components/urlbar/tests/quicksuggest/unit/test_weather.js200
-rw-r--r--browser/components/urlbar/tests/quicksuggest/unit/test_weather_keywords.js139
-rw-r--r--browser/components/urlbar/tests/quicksuggest/unit/xpcshell.toml1
-rw-r--r--browser/components/urlbar/tests/unit/head.js33
-rw-r--r--browser/components/urlbar/tests/unit/test_UrlbarPrefs.js8
-rw-r--r--browser/components/urlbar/tests/unit/test_UrlbarSearchUtils.js24
-rw-r--r--browser/components/urlbar/tests/unit/test_about_urls.js6
-rw-r--r--browser/components/urlbar/tests/unit/test_autofill_originsAndQueries.js12
-rw-r--r--browser/components/urlbar/tests/unit/test_heuristic_cancel.js2
-rw-r--r--browser/components/urlbar/tests/unit/test_hideSponsoredHistory.js2
-rw-r--r--browser/components/urlbar/tests/unit/test_match_javascript.js5
-rw-r--r--browser/components/urlbar/tests/unit/test_providerHistoryUrlHeuristic.js2
-rw-r--r--browser/components/urlbar/tests/unit/test_providerOpenTabs.js99
-rw-r--r--browser/components/urlbar/tests/unit/test_providerTabToSearch.js4
-rw-r--r--browser/components/urlbar/tests/unit/test_providersManager_filtering.js6
-rw-r--r--browser/components/urlbar/tests/unit/test_remote_tabs.js4
-rw-r--r--browser/components/urlbar/tests/unit/test_search_suggestions.js4
-rw-r--r--browser/components/urlbar/tests/unit/xpcshell.toml4
766 files changed, 30445 insertions, 45278 deletions
diff --git a/browser/components/BrowserContentHandler.sys.mjs b/browser/components/BrowserContentHandler.sys.mjs
index 88f4b745db..ca7cf4d2c4 100644
--- a/browser/components/BrowserContentHandler.sys.mjs
+++ b/browser/components/BrowserContentHandler.sys.mjs
@@ -90,7 +90,7 @@ function resolveURIInternal(
if (aArgument.startsWith(protocolWithColon)) {
if (!validateFirefoxProtocol(aCmdLine, launchedWithArg_osint)) {
throw new Error(
- "Invalid use of Firefox and Firefox-private protocols."
+ "Invalid use of Firefox-bridge and Firefox-private-bridge protocols."
);
}
aArgument = aArgument.substring(protocolWithColon.length);
@@ -100,7 +100,7 @@ function resolveURIInternal(
!aArgument.startsWith("https://")
) {
throw new Error(
- "Firefox and Firefox-private protocols can only be used in conjunction with http and https urls."
+ "Firefox-bridge and Firefox-private-bridge protocols can only be used in conjunction with http and https urls."
);
}
@@ -113,8 +113,8 @@ function resolveURIInternal(
}
};
- handleFirefoxProtocol("firefox");
- handleFirefoxProtocol("firefox-private");
+ handleFirefoxProtocol("firefox-bridge");
+ handleFirefoxProtocol("firefox-private-bridge");
var uri = aCmdLine.resolveURI(aArgument);
var uriFixup = Services.uriFixup;
@@ -240,10 +240,16 @@ function needHomepageOverride(updateMilestones = true) {
* @param update
* The nsIUpdate for the update that has been applied.
* @param defaultOverridePage
- * The default override page.
+ * The default override page
+ * @param nimbusOverridePage
+ * Nimbus provided URL
* @return The override page.
*/
-function getPostUpdateOverridePage(update, defaultOverridePage) {
+function getPostUpdateOverridePage(
+ update,
+ defaultOverridePage,
+ nimbusOverridePage
+) {
update = update.QueryInterface(Ci.nsIWritablePropertyBag);
let actions = update.getProperty("actions");
// When the update doesn't specify actions fallback to the original behavior
@@ -258,13 +264,16 @@ function getPostUpdateOverridePage(update, defaultOverridePage) {
return "";
}
- // If a policy was set to not allow the update.xml-provided
- // URL to be used, use the default fallback (which will also
- // be provided by the policy).
+ // If a policy was set to not allow the update.xml-provided URL to be used,
+ // use the default fallback (which will also be provided by the policy).
if (!Services.policies.isAllowed("postUpdateCustomPage")) {
return defaultOverridePage;
}
+ if (nimbusOverridePage) {
+ return nimbusOverridePage;
+ }
+
return update.getProperty("openURL") || defaultOverridePage;
}
@@ -599,7 +608,7 @@ nsBrowserContentHandler.prototype = {
if (urlFlagIdx > -1 && cmdLine.length > 1) {
url = cmdLine.getArgument(urlFlagIdx + 1);
}
- if (privateWindowParam || url?.startsWith("firefox-private:")) {
+ if (privateWindowParam || url?.startsWith("firefox-private-bridge:")) {
// Check if the osint flag is present on Windows
let launchedWithArg_osint =
AppConstants.platform == "win" &&
@@ -614,7 +623,7 @@ nsBrowserContentHandler.prototype = {
uri: Services.io.newURI("about:privatebrowsing"),
principal: lazy.gSystemPrincipal,
};
- } else if (url?.startsWith("firefox-private:")) {
+ } else if (url?.startsWith("firefox-private-bridge:")) {
cmdLine.removeArguments(urlFlagIdx, urlFlagIdx + 1);
resolvedInfo = resolveURIInternal(
cmdLine,
@@ -692,9 +701,7 @@ nsBrowserContentHandler.prototype = {
// tell needHomepageOverride to leave the milestone prefs alone when doing
// this check.
let override = needHomepageOverride(false /* updateMilestones */);
- if (override == OVERRIDE_NEW_PROFILE) {
- lazy.FirstStartup.init();
- }
+ lazy.FirstStartup.init(override == OVERRIDE_NEW_PROFILE /* newProfile */);
}
var fileParam = cmdLine.handleFlagWithParam("file", false);
@@ -800,7 +807,7 @@ nsBrowserContentHandler.prototype = {
// Turn on 'later run' pages for new profiles.
lazy.LaterRun.enable(lazy.LaterRun.ENABLE_REASON_NEW_PROFILE);
break;
- case OVERRIDE_NEW_MSTONE:
+ case OVERRIDE_NEW_MSTONE: {
// Check whether we will restore a session. If we will, we assume
// that this is an "update" session. This does not take crashes
// into account because that requires waiting for the session file
@@ -813,11 +820,70 @@ nsBrowserContentHandler.prototype = {
"startup.homepage_override_url"
);
let update = lazy.UpdateManager.readyUpdate;
+
+ /** If the override URL is provided by an experiment, is a valid
+ * Firefox What's New Page URL, and the update version is less than
+ * or equal to the maxVersion set by the experiment, we'll try to use
+ * the experiment override URL instead of the default or the
+ * update-provided URL. Additional policy checks are done in
+ * @see getPostUpdateOverridePage */
+ const nimbusOverrideUrl = Services.urlFormatter.formatURLPref(
+ "startup.homepage_override_url_nimbus"
+ );
+ const maxVersion = Services.prefs.getCharPref(
+ "startup.homepage_override_nimbus_maxVersion",
+ ""
+ );
+ let nimbusWNP;
+
+ // Update version should be less than or equal to maxVersion set by
+ // the experiment
+ if (
+ nimbusOverrideUrl &&
+ Services.vc.compare(update.appVersion, maxVersion) <= 0
+ ) {
+ try {
+ let uri = Services.io.newURI(nimbusOverrideUrl);
+ // Only allow https://www.mozilla.org and https://www.mozilla.com
+ if (
+ uri.scheme === "https" &&
+ ["www.mozilla.org", "www.mozilla.com"].includes(uri.host)
+ ) {
+ nimbusWNP = uri.spec;
+ } else {
+ throw new Error("Bad URL");
+ }
+ } catch {
+ console.error("Invalid WNP URL: ", nimbusOverrideUrl);
+ }
+ }
+
if (
update &&
Services.vc.compare(update.appVersion, old_mstone) > 0
) {
- overridePage = getPostUpdateOverridePage(update, overridePage);
+ overridePage = getPostUpdateOverridePage(
+ update,
+ overridePage,
+ nimbusWNP
+ );
+ // Record a Nimbus exposure event for the whatsNewPage feature.
+ // The override page could be set in 3 ways: 1. set by Nimbus 2.
+ // set by the update file(openURL) 3. The default evergreen page(Set by the
+ // startup.homepage_override_url pref, could be different
+ // depending on the Fx channel). This is done to record that the
+ // control cohort could have seen the experimental What's New Page
+ // (and will instead see the default What's New Page).
+ // recordExposureEvent only records an event if the user is
+ // enrolled in an experiment or rollout on the whatsNewPage
+ // feature, so it's safe to call it unconditionally.
+ if (overridePage) {
+ let nimbusWNPFeature = lazy.NimbusFeatures.whatsNewPage;
+ nimbusWNPFeature
+ .ready()
+ .then(() => nimbusWNPFeature.recordExposureEvent());
+ }
+
// Send the update ping to signal that the update was successful.
lazy.UpdatePing.handleUpdateSuccess(old_mstone, old_buildId);
lazy.LaterRun.enable(lazy.LaterRun.ENABLE_REASON_UPDATE_APPLIED);
@@ -825,6 +891,7 @@ nsBrowserContentHandler.prototype = {
overridePage = overridePage.replace("%OLD_VERSION%", old_mstone);
break;
+ }
case OVERRIDE_NEW_BUILD_ID:
if (lazy.UpdateManager.readyUpdate) {
// Send the update ping to signal that the update was successful.
@@ -1390,29 +1457,6 @@ nsDefaultCommandLineHandler.prototype = {
console.error(e);
}
- if (
- AppConstants.platform == "win" &&
- cmdLine.handleFlag("to-handle-default-browser-agent", false)
- ) {
- // The Default Browser Agent launches Firefox in response to a Windows
- // native notification, but it does so in a non-standard manner.
- Services.telemetry.setEventRecordingEnabled(
- "browser.launched_to_handle",
- true
- );
- Glean.browserLaunchedToHandle.systemNotification.record({
- name: "default-browser-agent",
- });
-
- let thanksURI = Services.io.newURI(
- Services.urlFormatter.formatURLPref(
- "browser.shell.defaultBrowserAgent.thanksURL"
- )
- );
- urilist.push(thanksURI);
- principalList.push(lazy.gSystemPrincipal);
- }
-
if (cmdLine.findFlag("screenshot", true) != -1) {
// Shouldn't have to push principal here with the screenshot flag
lazy.HeadlessShell.handleCmdLineArgs(
@@ -1463,7 +1507,7 @@ nsDefaultCommandLineHandler.prototype = {
}
// Can't open multiple URLs without using system principal.
- // The firefox and firefox-private protocols should only
+ // The firefox-bridge and firefox-private-bridge protocols should only
// accept a single URL due to using the -osint option
// so this isn't very relevant.
var URLlist = urilist.filter(shouldLoadURI).map(u => u.spec);
diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs
index 4ad6c5212b..f4ea0c87a3 100644
--- a/browser/components/BrowserGlue.sys.mjs
+++ b/browser/components/BrowserGlue.sys.mjs
@@ -9,6 +9,7 @@ const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs",
+ AWToolbarButton: "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs",
ASRouter: "resource:///modules/asrouter/ASRouter.sys.mjs",
ASRouterDefaultConfig:
"resource:///modules/asrouter/ASRouterDefaultConfig.sys.mjs",
@@ -17,6 +18,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
AddonManager: "resource://gre/modules/AddonManager.sys.mjs",
AppMenuNotifications: "resource://gre/modules/AppMenuNotifications.sys.mjs",
AsyncShutdown: "resource://gre/modules/AsyncShutdown.sys.mjs",
+ BackupService: "resource:///modules/backup/BackupService.sys.mjs",
Blocklist: "resource://gre/modules/Blocklist.sys.mjs",
BookmarkHTMLUtils: "resource://gre/modules/BookmarkHTMLUtils.sys.mjs",
BookmarkJSONUtils: "resource://gre/modules/BookmarkJSONUtils.sys.mjs",
@@ -37,6 +39,8 @@ ChromeUtils.defineESModuleGetters(lazy, {
E10SUtils: "resource://gre/modules/E10SUtils.sys.mjs",
ExtensionsUI: "resource:///modules/ExtensionsUI.sys.mjs",
FeatureGate: "resource://featuregates/FeatureGate.sys.mjs",
+ FirefoxBridgeExtensionUtils:
+ "resource:///modules/FirefoxBridgeExtensionUtils.sys.mjs",
FxAccounts: "resource://gre/modules/FxAccounts.sys.mjs",
HomePage: "resource:///modules/HomePage.sys.mjs",
Integration: "resource://gre/modules/Integration.sys.mjs",
@@ -671,6 +675,17 @@ let JSWINDOWACTORS = {
allFrames: true,
},
+ Profiles: {
+ parent: {
+ esModuleURI: "resource:///actors/ProfilesParent.sys.mjs",
+ },
+ child: {
+ esModuleURI: "resource:///actors/ProfilesChild.sys.mjs",
+ },
+ matches: ["about:profilemanager"],
+ enablePreference: "browser.profiles.enabled",
+ },
+
Prompt: {
parent: {
esModuleURI: "resource:///actors/PromptParent.sys.mjs",
@@ -698,13 +713,13 @@ let JSWINDOWACTORS = {
child: {
esModuleURI: "resource:///actors/ScreenshotsComponentChild.sys.mjs",
events: {
- "Screenshots:Close": { wantUntrusted: true },
- "Screenshots:Copy": { wantUntrusted: true },
- "Screenshots:Download": { wantUntrusted: true },
- "Screenshots:HidePanel": { wantUntrusted: true },
- "Screenshots:OverlaySelection": { wantUntrusted: true },
- "Screenshots:RecordEvent": { wantUntrusted: true },
- "Screenshots:ShowPanel": { wantUntrusted: true },
+ "Screenshots:Close": {},
+ "Screenshots:Copy": {},
+ "Screenshots:Download": {},
+ "Screenshots:HidePanel": {},
+ "Screenshots:OverlaySelection": {},
+ "Screenshots:RecordEvent": {},
+ "Screenshots:ShowPanel": {},
},
},
enablePreference: "screenshots.browser.component.enabled",
@@ -2096,6 +2111,7 @@ BrowserGlue.prototype = {
() => lazy.BrowserUsageTelemetry.uninit(),
() => lazy.SearchSERPTelemetry.uninit(),
+ () => lazy.SearchSERPDomainToCategoriesMap.uninit(),
() => lazy.Interactions.uninit(),
() => lazy.PageDataService.uninit(),
() => lazy.PageThumbs.uninit(),
@@ -2140,26 +2156,31 @@ BrowserGlue.prototype = {
const COMPONENT_PREF = "screenshots.browser.component.enabled";
const ID = "screenshots@mozilla.org";
const _checkScreenshotsPref = async () => {
- let addon = await lazy.AddonManager.getAddonByID(ID);
- if (!addon) {
- return;
- }
let screenshotsDisabled = Services.prefs.getBoolPref(
SCREENSHOTS_PREF,
false
);
- let componentEnabled = Services.prefs.getBoolPref(COMPONENT_PREF, false);
+ let componentEnabled = Services.prefs.getBoolPref(COMPONENT_PREF, true);
+
+ let screenshotsAddon = await lazy.AddonManager.getAddonByID(ID);
+
if (screenshotsDisabled) {
if (componentEnabled) {
lazy.ScreenshotsUtils.uninitialize();
- } else {
- await addon.disable({ allowSystemAddons: true });
+ } else if (screenshotsAddon?.isActive) {
+ await screenshotsAddon.disable({ allowSystemAddons: true });
}
} else if (componentEnabled) {
lazy.ScreenshotsUtils.initialize();
- await addon.disable({ allowSystemAddons: true });
+ if (screenshotsAddon?.isActive) {
+ await screenshotsAddon.disable({ allowSystemAddons: true });
+ }
} else {
- await addon.enable({ allowSystemAddons: true });
+ try {
+ await screenshotsAddon.enable({ allowSystemAddons: true });
+ } catch (ex) {
+ console.error(`Error trying to enable screenshots extension: ${ex}`);
+ }
lazy.ScreenshotsUtils.uninitialize();
}
};
@@ -2430,7 +2451,6 @@ BrowserGlue.prototype = {
LATE_TASKS_IDLE_TIME_SEC
);
- this._monitorScreenshotsPref();
this._monitorWebcompatReporterPref();
this._monitorHTTPSOnlyPref();
this._monitorIonPref();
@@ -2545,6 +2565,10 @@ BrowserGlue.prototype = {
"security.ui.certerror",
enableCertErrorUITelemetry
);
+ Services.telemetry.setEventRecordingEnabled(
+ "security.ui.tlserror",
+ enableCertErrorUITelemetry
+ );
},
},
@@ -2632,123 +2656,14 @@ BrowserGlue.prototype = {
},
{
- name: "dualBrowserProtocolHandler",
+ name: "firefoxBridgeNativeMessaging",
condition:
- AppConstants.platform == "win" &&
- !Services.prefs.getBoolPref(
- "browser.shell.customProtocolsRegistered"
- ),
+ (AppConstants.platform == "macosx" ||
+ AppConstants.platform == "win") &&
+ Services.prefs.getBoolPref("browser.firefoxbridge.enabled", false),
task: async () => {
- Services.prefs.setBoolPref(
- "browser.shell.customProtocolsRegistered",
- true
- );
- const FIREFOX_HANDLER_NAME = "firefox";
- const FIREFOX_PRIVATE_HANDLER_NAME = "firefox-private";
- const path = Services.dirsvc.get("XREExeF", Ci.nsIFile).path;
- let wrk = Cc["@mozilla.org/windows-registry-key;1"].createInstance(
- Ci.nsIWindowsRegKey
- );
- try {
- wrk.open(wrk.ROOT_KEY_CLASSES_ROOT, "", wrk.ACCESS_READ);
- let FxSet = wrk.hasChild(FIREFOX_HANDLER_NAME);
- let FxPrivateSet = wrk.hasChild(FIREFOX_PRIVATE_HANDLER_NAME);
- wrk.close();
- if (FxSet && FxPrivateSet) {
- return;
- }
- wrk.open(
- wrk.ROOT_KEY_CURRENT_USER,
- "Software\\Classes",
- wrk.ACCESS_ALL
- );
- const maybeUpdateRegistry = (
- isSetAlready,
- handler,
- protocolName
- ) => {
- if (isSetAlready) {
- return;
- }
- let FxKey = wrk.createChild(handler, wrk.ACCESS_ALL);
- try {
- // Write URL protocol key
- FxKey.writeStringValue("", protocolName);
- FxKey.writeStringValue("URL Protocol", "");
- FxKey.close();
- // Write defaultIcon key
- FxKey.create(
- FxKey.ROOT_KEY_CURRENT_USER,
- "Software\\Classes\\" + handler + "\\DefaultIcon",
- FxKey.ACCESS_ALL
- );
- FxKey.open(
- FxKey.ROOT_KEY_CURRENT_USER,
- "Software\\Classes\\" + handler + "\\DefaultIcon",
- FxKey.ACCESS_ALL
- );
- FxKey.writeStringValue("", `\"${path}\",1`);
- FxKey.close();
- // Write shell\\open\\command key
- FxKey.create(
- FxKey.ROOT_KEY_CURRENT_USER,
- "Software\\Classes\\" + handler + "\\shell",
- FxKey.ACCESS_ALL
- );
- FxKey.create(
- FxKey.ROOT_KEY_CURRENT_USER,
- "Software\\Classes\\" + handler + "\\shell\\open",
- FxKey.ACCESS_ALL
- );
- FxKey.create(
- FxKey.ROOT_KEY_CURRENT_USER,
- "Software\\Classes\\" + handler + "\\shell\\open\\command",
- FxKey.ACCESS_ALL
- );
- FxKey.open(
- FxKey.ROOT_KEY_CURRENT_USER,
- "Software\\Classes\\" + handler + "\\shell\\open\\command",
- FxKey.ACCESS_ALL
- );
- if (handler == FIREFOX_PRIVATE_HANDLER_NAME) {
- FxKey.writeStringValue(
- "",
- `\"${path}\" -osint -private-window \"%1\"`
- );
- } else {
- FxKey.writeStringValue("", `\"${path}\" -osint -url \"%1\"`);
- }
- } catch (ex) {
- console.log(ex);
- } finally {
- FxKey.close();
- }
- };
- try {
- maybeUpdateRegistry(
- FxSet,
- FIREFOX_HANDLER_NAME,
- "URL:Firefox Protocol"
- );
- } catch (ex) {
- console.log(ex);
- }
- try {
- maybeUpdateRegistry(
- FxPrivateSet,
- FIREFOX_PRIVATE_HANDLER_NAME,
- "URL:Firefox Private Browsing Protocol"
- );
- } catch (ex) {
- console.log(ex);
- }
- } catch (ex) {
- console.log(ex);
- } finally {
- wrk.close();
- }
+ await lazy.FirefoxBridgeExtensionUtils.ensureRegistered();
},
- timeout: 5000,
},
// Ensure a Private Browsing Shortcut exists. This is needed in case
@@ -2899,13 +2814,9 @@ BrowserGlue.prototype = {
},
{
- name: "ScreenshotsUtils.initialize",
+ name: "BrowserGlue._monitorScreenshotsPref",
task: () => {
- if (
- Services.prefs.getBoolPref("screenshots.browser.component.enabled")
- ) {
- lazy.ScreenshotsUtils.initialize();
- }
+ this._monitorScreenshotsPref();
},
},
@@ -3041,6 +2952,22 @@ BrowserGlue.prototype = {
},
},
+ // Add the setup button if this is the first startup
+ {
+ name: "AWToolbarButton.SetupButton",
+ task: async () => {
+ if (
+ // Not in automation: the button changes CUI state,
+ // breaking tests. Check this first, so that the module
+ // doesn't load if it doesn't have to.
+ !Cu.isInAutomation &&
+ lazy.AWToolbarButton.hasToolbarButtonEnabled
+ ) {
+ await lazy.AWToolbarButton.maybeAddSetupButton();
+ }
+ },
+ },
+
{
name: "ASRouterNewTabHook.createInstance",
task: () => {
@@ -3162,6 +3089,14 @@ BrowserGlue.prototype = {
},
{
+ name: "BackupService initialization",
+ condition: Services.prefs.getBoolPref("browser.backup.enabled", false),
+ task: () => {
+ lazy.BackupService.init();
+ },
+ },
+
+ {
name: "browser-startup-idle-tasks-finished",
task: () => {
// Use idleDispatch a second time to run this after the per-window
@@ -3279,8 +3214,6 @@ BrowserGlue.prototype = {
function reportInstallationTelemetry() {
lazy.BrowserUsageTelemetry.reportInstallationTelemetry();
},
-
- RunOSKeyStoreSelfTest,
];
for (let task of idleTasks) {
@@ -3807,13 +3740,20 @@ BrowserGlue.prototype = {
_migrateUI() {
// Use an increasing number to keep track of the current migration state.
// Completely unrelated to the current Firefox release number.
- const UI_VERSION = 142;
+ const UI_VERSION = 143;
const BROWSER_DOCURL = AppConstants.BROWSER_CHROME_URL;
if (!Services.prefs.prefHasUserValue("browser.migration.version")) {
// This is a new profile, nothing to migrate.
Services.prefs.setIntPref("browser.migration.version", UI_VERSION);
this._isNewProfile = true;
+
+ if (AppConstants.platform == "win") {
+ // Ensure that the Firefox Bridge protocols are registered for the new profile.
+ // No-op if they are registered for the user or the local machine already.
+ lazy.FirefoxBridgeExtensionUtils.maybeRegisterFirefoxBridgeProtocols();
+ }
+
return;
}
@@ -4413,6 +4353,27 @@ BrowserGlue.prototype = {
}
}
+ if (currentUIVersion < 143) {
+ if (AppConstants.platform == "win") {
+ // In Firefox 122, we enabled the firefox and firefox-private protocols.
+ // We switched over to using firefox-bridge and firefox-private-bridge,
+ // but we want to clean up the use of the other protocols.
+ lazy.FirefoxBridgeExtensionUtils.maybeDeleteBridgeProtocolRegistryEntries();
+
+ // Register the new firefox bridge related protocols now
+ lazy.FirefoxBridgeExtensionUtils.maybeRegisterFirefoxBridgeProtocols();
+
+ // Clean up the old user prefs from FX 122
+ Services.prefs.clearUserPref(
+ "network.protocol-handler.external.firefox"
+ );
+ Services.prefs.clearUserPref(
+ "network.protocol-handler.external.firefox-private"
+ );
+ Services.prefs.clearUserPref("browser.shell.customProtocolsRegistered");
+ }
+ }
+
// Update the migration version.
Services.prefs.setIntPref("browser.migration.version", UI_VERSION);
},
@@ -6526,70 +6487,3 @@ export var AboutHomeStartupCache = {
this._cacheEntryResolver(this._cacheEntry);
},
};
-
-async function RunOSKeyStoreSelfTest() {
- // The linux implementation always causes an OS dialog, in contrast to
- // Windows and macOS (the latter of which causes an OS dialog to appear on
- // local developer builds), so only run on Windows and macOS and only if this
- // has been built and signed by Mozilla's infrastructure. Similarly, don't
- // run this code in automation.
- if (
- (AppConstants.platform != "win" && AppConstants.platform != "macosx") ||
- !AppConstants.MOZILLA_OFFICIAL ||
- Services.env.get("MOZ_AUTOMATION")
- ) {
- return;
- }
- let osKeyStore = Cc["@mozilla.org/security/oskeystore;1"].getService(
- Ci.nsIOSKeyStore
- );
- let label = Services.prefs.getCharPref("security.oskeystore.test.label", "");
- if (!label) {
- label = Services.uuid.generateUUID().toString().slice(1, -1);
- Services.prefs.setCharPref("security.oskeystore.test.label", label);
- try {
- await osKeyStore.asyncGenerateSecret(label);
- Glean.oskeystore.selfTest.generate.set(true);
- } catch (_) {
- Glean.oskeystore.selfTest.generate.set(false);
- return;
- }
- }
- let secretAvailable = await osKeyStore.asyncSecretAvailable(label);
- Glean.oskeystore.selfTest.available.set(secretAvailable);
- if (!secretAvailable) {
- return;
- }
- let encrypted = Services.prefs.getCharPref(
- "security.oskeystore.test.encrypted",
- ""
- );
- if (!encrypted) {
- try {
- encrypted = await osKeyStore.asyncEncryptBytes(label, [1, 1, 3, 8]);
- Services.prefs.setCharPref(
- "security.oskeystore.test.encrypted",
- encrypted
- );
- Glean.oskeystore.selfTest.encrypt.set(true);
- } catch (_) {
- Glean.oskeystore.selfTest.encrypt.set(false);
- return;
- }
- }
- try {
- let decrypted = await osKeyStore.asyncDecryptBytes(label, encrypted);
- if (
- decrypted.length != 4 ||
- decrypted[0] != 1 ||
- decrypted[1] != 1 ||
- decrypted[2] != 3 ||
- decrypted[3] != 8
- ) {
- throw new Error("decrypted value not as expected?");
- }
- Glean.oskeystore.selfTest.decrypt.set(true);
- } catch (_) {
- Glean.oskeystore.selfTest.decrypt.set(false);
- }
-}
diff --git a/browser/components/about/AboutRedirector.cpp b/browser/components/about/AboutRedirector.cpp
index 6f01344014..81336795fc 100644
--- a/browser/components/about/AboutRedirector.cpp
+++ b/browser/components/about/AboutRedirector.cpp
@@ -141,6 +141,9 @@ static const RedirEntry kRedirMap[] = {
nsIAboutModule::URI_MUST_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT |
nsIAboutModule::URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS |
nsIAboutModule::HIDE_FROM_ABOUTABOUT},
+ {"settings", "chrome://browser/content/preferences/preferences.xhtml",
+ nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::IS_SECURE_CHROME_UI |
+ nsIAboutModule::HIDE_FROM_ABOUTABOUT},
{"preferences", "chrome://browser/content/preferences/preferences.xhtml",
nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::IS_SECURE_CHROME_UI},
{"downloads",
@@ -160,6 +163,11 @@ static const RedirEntry kRedirMap[] = {
{"ion", "chrome://browser/content/ion.html",
nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::HIDE_FROM_ABOUTABOUT |
nsIAboutModule::IS_SECURE_CHROME_UI},
+ {"profilemanager", "chrome://browser/content/profiles/profiles.html",
+ nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT |
+ nsIAboutModule::URI_MUST_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT |
+ nsIAboutModule::URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS |
+ nsIAboutModule::HIDE_FROM_ABOUTABOUT},
};
static nsAutoCString GetAboutModuleName(nsIURI* aURI) {
diff --git a/browser/components/about/components.conf b/browser/components/about/components.conf
index c03994b11c..2d08084592 100644
--- a/browser/components/about/components.conf
+++ b/browser/components/about/components.conf
@@ -25,12 +25,14 @@ pages = [
'preferences',
'privatebrowsing',
'protections',
+ 'profilemanager',
'profiling',
'reader',
'restartrequired',
'rights',
'robots',
'sessionrestore',
+ 'settings',
'shoppingsidebar',
'tabcrashed',
'unloads',
diff --git a/browser/components/aboutlogins/AboutLoginsParent.sys.mjs b/browser/components/aboutlogins/AboutLoginsParent.sys.mjs
index 75b695cdd2..28f56c2172 100644
--- a/browser/components/aboutlogins/AboutLoginsParent.sys.mjs
+++ b/browser/components/aboutlogins/AboutLoginsParent.sys.mjs
@@ -442,7 +442,7 @@ export class AboutLoginsParent extends JSWindowActorParent {
},
]);
- fp.init(this.#ownerGlobal, title, Ci.nsIFilePicker.modeSave);
+ fp.init(this.browsingContext, title, Ci.nsIFilePicker.modeSave);
fp.appendFilter(csvFilterTitle, "*.csv");
fp.appendFilters(Ci.nsIFilePicker.filterAll);
fp.defaultString = defaultFilename;
@@ -479,8 +479,7 @@ export class AboutLoginsParent extends JSWindowActorParent {
title: tsvFilterTitle,
extensionPattern: "*.tsv",
},
- ],
- this.#ownerGlobal
+ ]
);
if (result != Ci.nsIFilePicker.returnCancel) {
@@ -526,10 +525,10 @@ export class AboutLoginsParent extends JSWindowActorParent {
this.sendAsyncMessage("AboutLogins:ShowLoginItemError", messageObject);
}
- async openFilePickerDialog(title, okButtonLabel, appendFilters, ownerGlobal) {
+ async openFilePickerDialog(title, okButtonLabel, appendFilters) {
return new Promise(resolve => {
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
- fp.init(ownerGlobal, title, Ci.nsIFilePicker.modeOpen);
+ fp.init(this.browsingContext, title, Ci.nsIFilePicker.modeOpen);
for (const appendFilter of appendFilters) {
fp.appendFilter(appendFilter.title, appendFilter.extensionPattern);
}
@@ -843,7 +842,7 @@ class AboutLoginsInternal {
};
}
- onPasswordSyncEnabledPreferenceChange(data, previous, latest) {
+ onPasswordSyncEnabledPreferenceChange(_data, _previous, _latest) {
this.#messageSubscribers("AboutLogins:SyncState", this.getSyncState());
}
diff --git a/browser/components/aboutlogins/content/components/login-item.css b/browser/components/aboutlogins/content/components/login-item.css
index 07471c35ef..4a3d85d859 100644
--- a/browser/components/aboutlogins/content/components/login-item.css
+++ b/browser/components/aboutlogins/content/components/login-item.css
@@ -246,7 +246,7 @@ login-command-button {
.alert-title {
font-size: var(--font-size-xlarge);
- font-weight: var(--font-weight-default);
+ font-weight: var(--font-weight);
line-height: 1em;
margin-block: 0 12px;
}
diff --git a/browser/components/aboutlogins/content/components/login-item.mjs b/browser/components/aboutlogins/content/components/login-item.mjs
index fc7dffff8b..1c5358c714 100644
--- a/browser/components/aboutlogins/content/components/login-item.mjs
+++ b/browser/components/aboutlogins/content/components/login-item.mjs
@@ -437,7 +437,7 @@ export default class LoginItem extends HTMLElement {
this._recordTelemetryEvent({ object: "password", method });
}
- async handleCancelEvent(e) {
+ async handleCancelEvent(_e) {
let wasExistingLogin = !!this._login.guid;
if (wasExistingLogin) {
if (this.hasPendingChanges()) {
diff --git a/browser/components/aboutlogins/content/components/login-list.css b/browser/components/aboutlogins/content/components/login-list.css
index bc8e72a3cd..d16f621a9e 100644
--- a/browser/components/aboutlogins/content/components/login-list.css
+++ b/browser/components/aboutlogins/content/components/login-list.css
@@ -34,7 +34,7 @@
}
#login-sort > option {
- font-weight: var(--font-weight-default);
+ font-weight: var(--font-weight);
}
.count {
diff --git a/browser/components/aboutlogins/tests/browser/browser_alertDismissedAfterChangingPassword.js b/browser/components/aboutlogins/tests/browser/browser_alertDismissedAfterChangingPassword.js
index 944f852c18..b2b036121a 100644
--- a/browser/components/aboutlogins/tests/browser/browser_alertDismissedAfterChangingPassword.js
+++ b/browser/components/aboutlogins/tests/browser/browser_alertDismissedAfterChangingPassword.js
@@ -117,8 +117,8 @@ add_task(async function test_added_login_shows_breach_warning() {
await reauthObserved;
await SpecialPowers.spawn(
browser,
- [[TEST_LOGIN1.guid, VULNERABLE_TEST_LOGIN2.guid, TEST_LOGIN3.guid]],
- async ([regularLoginGuid, vulnerableLoginGuid, breachedLoginGuid]) => {
+ [[VULNERABLE_TEST_LOGIN2.guid, TEST_LOGIN3.guid]],
+ async ([vulnerableLoginGuid, breachedLoginGuid]) => {
let loginList = Cu.waiveXrays(
content.document.querySelector("login-list")
);
diff --git a/browser/components/aboutlogins/tests/browser/browser_createLogin.js b/browser/components/aboutlogins/tests/browser/browser_createLogin.js
index 2de24de952..4aac8cece1 100644
--- a/browser/components/aboutlogins/tests/browser/browser_createLogin.js
+++ b/browser/components/aboutlogins/tests/browser/browser_createLogin.js
@@ -54,100 +54,96 @@ add_task(async function test_create_login() {
(_, data) => data == "addLogin"
);
- await SpecialPowers.spawn(
- browser,
- [[originTuple, i]],
- async ([aOriginTuple, index]) => {
- let loginList = Cu.waiveXrays(
- content.document.querySelector("login-list")
- );
- let createButton = loginList._createLoginButton;
- Assert.ok(
- ContentTaskUtils.isHidden(loginList._blankLoginListItem),
- "the blank login list item should be hidden initially"
- );
- Assert.ok(
- !createButton.disabled,
- "Create button should not be disabled initially"
- );
+ await SpecialPowers.spawn(browser, [originTuple], async aOriginTuple => {
+ let loginList = Cu.waiveXrays(
+ content.document.querySelector("login-list")
+ );
+ let createButton = loginList._createLoginButton;
+ Assert.ok(
+ ContentTaskUtils.isHidden(loginList._blankLoginListItem),
+ "the blank login list item should be hidden initially"
+ );
+ Assert.ok(
+ !createButton.disabled,
+ "Create button should not be disabled initially"
+ );
- let loginItem = Cu.waiveXrays(
- content.document.querySelector("login-item")
- );
- let usernameInput = loginItem.shadowRoot.querySelector(
- "input[name='username']"
- );
- usernameInput.placeholder = "dummy placeholder";
+ let loginItem = Cu.waiveXrays(
+ content.document.querySelector("login-item")
+ );
+ let usernameInput = loginItem.shadowRoot.querySelector(
+ "input[name='username']"
+ );
+ usernameInput.placeholder = "dummy placeholder";
- createButton.click();
+ createButton.click();
- Assert.ok(
- ContentTaskUtils.isVisible(loginList._blankLoginListItem),
- "the blank login list item should be visible after clicking on the create button"
- );
- Assert.ok(
- createButton.disabled,
- "Create button should be disabled after being clicked"
- );
+ Assert.ok(
+ ContentTaskUtils.isVisible(loginList._blankLoginListItem),
+ "the blank login list item should be visible after clicking on the create button"
+ );
+ Assert.ok(
+ createButton.disabled,
+ "Create button should be disabled after being clicked"
+ );
- let cancelButton = loginItem.shadowRoot.querySelector(".cancel-button");
- Assert.ok(
- ContentTaskUtils.isVisible(cancelButton),
- "cancel button should be visible in create mode with no logins saved"
- );
+ let cancelButton = loginItem.shadowRoot.querySelector(".cancel-button");
+ Assert.ok(
+ ContentTaskUtils.isVisible(cancelButton),
+ "cancel button should be visible in create mode with no logins saved"
+ );
- let originInput = loginItem.shadowRoot.querySelector(
- "input[name='origin']"
- );
- let passwordInput = loginItem.shadowRoot.querySelector(
- "input[name='password']"
- );
+ let originInput = loginItem.shadowRoot.querySelector(
+ "input[name='origin']"
+ );
+ let passwordInput = loginItem.shadowRoot.querySelector(
+ "input[name='password']"
+ );
- // Upon clicking create-login-button, the origin input field is automatically focused.
- Assert.ok(
- ContentTaskUtils.isVisible(loginItem._originWarning),
- "The origin warning should be visible"
- );
+ // Upon clicking create-login-button, the origin input field is automatically focused.
+ Assert.ok(
+ ContentTaskUtils.isVisible(loginItem._originWarning),
+ "The origin warning should be visible"
+ );
- // At this moment, the password input field is not focused so no warning should be displayed.
- Assert.ok(
- ContentTaskUtils.isHidden(loginItem._passwordWarning),
- "The password warning should not be visible if the password input field is not focused"
- );
+ // At this moment, the password input field is not focused so no warning should be displayed.
+ Assert.ok(
+ ContentTaskUtils.isHidden(loginItem._passwordWarning),
+ "The password warning should not be visible if the password input field is not focused"
+ );
- Assert.equal(
- content.document.l10n.getAttributes(usernameInput).id,
- null,
- "there should be no placeholder id on the username input in edit mode"
- );
- Assert.equal(
- usernameInput.placeholder,
- "",
- "there should be no placeholder on the username input in edit mode"
- );
+ Assert.equal(
+ content.document.l10n.getAttributes(usernameInput).id,
+ null,
+ "there should be no placeholder id on the username input in edit mode"
+ );
+ Assert.equal(
+ usernameInput.placeholder,
+ "",
+ "there should be no placeholder on the username input in edit mode"
+ );
- originInput.value = aOriginTuple[0];
- usernameInput.value = "testuser1";
+ originInput.value = aOriginTuple[0];
+ usernameInput.value = "testuser1";
- passwordInput.focus();
- Assert.ok(
- ContentTaskUtils.isVisible(loginItem._passwordWarning),
- "The password warning should not visible"
- );
- passwordInput.value = "testpass1";
+ passwordInput.focus();
+ Assert.ok(
+ ContentTaskUtils.isVisible(loginItem._passwordWarning),
+ "The password warning should not visible"
+ );
+ passwordInput.value = "testpass1";
- // Since the password field is focused, the origin warning should not be displayed.
- Assert.ok(
- ContentTaskUtils.isHidden(loginItem._originWarning),
- "The origin warning should not be visible if the origin input field is not focused"
- );
+ // Since the password field is focused, the origin warning should not be displayed.
+ Assert.ok(
+ ContentTaskUtils.isHidden(loginItem._originWarning),
+ "The origin warning should not be visible if the origin input field is not focused"
+ );
- let saveChangesButton = loginItem.shadowRoot.querySelector(
- ".save-changes-button"
- );
- saveChangesButton.click();
- }
- );
+ let saveChangesButton = loginItem.shadowRoot.querySelector(
+ ".save-changes-button"
+ );
+ saveChangesButton.click();
+ });
info("waiting for login to get added to storage");
await storageChangedPromised;
@@ -239,7 +235,7 @@ add_task(async function test_create_login() {
let reauthObserved = forceAuthTimeoutAndWaitForOSKeyStoreLogin({
loginResult: true,
});
- await SpecialPowers.spawn(browser, [originTuple], async aOriginTuple => {
+ await SpecialPowers.spawn(browser, [], async () => {
let loginItem = Cu.waiveXrays(
content.document.querySelector("login-item")
);
@@ -250,7 +246,7 @@ add_task(async function test_create_login() {
info("waiting for oskeystore auth");
await reauthObserved;
- await SpecialPowers.spawn(browser, [originTuple], async aOriginTuple => {
+ await SpecialPowers.spawn(browser, [], async () => {
let loginItem = Cu.waiveXrays(
content.document.querySelector("login-item")
);
@@ -318,20 +314,14 @@ add_task(async function test_create_login() {
});
}
- await SpecialPowers.spawn(
- browser,
- [testCases.length],
- async testCasesLength => {
- let loginList = Cu.waiveXrays(
- content.document.querySelector("login-list")
- );
- Assert.equal(
- loginList._loginGuidsSortedOrder.length,
- 5,
- "login list should have a login per testcase"
- );
- }
- );
+ await SpecialPowers.spawn(browser, [], async () => {
+ let loginList = Cu.waiveXrays(content.document.querySelector("login-list"));
+ Assert.equal(
+ loginList._loginGuidsSortedOrder.length,
+ 5,
+ "login list should have a login per testcase"
+ );
+ });
});
add_task(async function test_cancel_create_login() {
diff --git a/browser/components/aboutlogins/tests/browser/browser_loginListChanges.js b/browser/components/aboutlogins/tests/browser/browser_loginListChanges.js
index 13df6c1ef6..94cf1c24bb 100644
--- a/browser/components/aboutlogins/tests/browser/browser_loginListChanges.js
+++ b/browser/components/aboutlogins/tests/browser/browser_loginListChanges.js
@@ -73,7 +73,7 @@ add_task(async function test_login_removed() {
.getActor("AboutLogins")
.sendAsyncMessage("AboutLogins:LoginRemoved", login);
- await SpecialPowers.spawn(browser, [login], async removedLogin => {
+ await SpecialPowers.spawn(browser, [], async () => {
let loginList = Cu.waiveXrays(content.document.querySelector("login-list"));
let loginRemoved = await ContentTaskUtils.waitForCondition(() => {
return !loginList._loginGuidsSortedOrder.length;
diff --git a/browser/components/aboutlogins/tests/browser/browser_openExport.js b/browser/components/aboutlogins/tests/browser/browser_openExport.js
index c5df84c447..1a61510862 100644
--- a/browser/components/aboutlogins/tests/browser/browser_openExport.js
+++ b/browser/components/aboutlogins/tests/browser/browser_openExport.js
@@ -27,7 +27,7 @@ add_setup(async function () {
return !events || !events.length;
}, "Waiting for content telemetry events to get cleared");
- MockFilePicker.init(window);
+ MockFilePicker.init(window.browsingContext);
MockFilePicker.useAnyFile();
MockFilePicker.returnValue = MockFilePicker.returnOK;
diff --git a/browser/components/aboutlogins/tests/browser/browser_openImportCSV.js b/browser/components/aboutlogins/tests/browser/browser_openImportCSV.js
index 4800b8a309..0f8aa062e1 100644
--- a/browser/components/aboutlogins/tests/browser/browser_openImportCSV.js
+++ b/browser/components/aboutlogins/tests/browser/browser_openImportCSV.js
@@ -25,7 +25,7 @@ class CsvImportHelper {
*/
static waitForOpenFilePicker(destFile) {
return new Promise(resolve => {
- MockFilePicker.showCallback = fp => {
+ MockFilePicker.showCallback = _fp => {
info("showCallback");
info("fileName: " + destFile.path);
MockFilePicker.setFiles([destFile]);
@@ -48,7 +48,7 @@ class CsvImportHelper {
* @returns {Promise} A promise that is resolved when the picker selects the file.
*/
static async clickImportFromCsvMenu(browser, linesInFile) {
- MockFilePicker.init(window);
+ MockFilePicker.init(window.browsingContext);
MockFilePicker.returnValue = MockFilePicker.returnOK;
let csvFile = await LoginTestUtils.file.setupCsvFileWithLines(linesInFile);
@@ -217,11 +217,9 @@ class CsvImportHelper {
/**
* An utility method to fetch data from the about:loginsimportreport page.
*
- * @param {browser} browser
- * The browser object.
* @returns {Promise<Object>} A promise that contains the detailed report data like added, modified, noChange, errors and rows.
*/
- static async getDetailedReportData(browser) {
+ static async getDetailedReportData() {
const data = await SpecialPowers.spawn(
gBrowser.selectedBrowser,
[],
@@ -357,7 +355,7 @@ add_task(async function test_open_import_all_four_detailed_report() {
await CsvImportHelper.clickImportFromCsvMenu(browser, updatedCsvData);
await CsvImportHelper.waitForImportToComplete();
const reportTab = await CsvImportHelper.clickDetailedReport(browser);
- const report = await CsvImportHelper.getDetailedReportData(browser);
+ const report = await CsvImportHelper.getDetailedReportData();
BrowserTestUtils.removeTab(reportTab);
const { added, modified, noChange, errors, rows } = report;
Assert.equal(added, 1, "It should have one item as added");
diff --git a/browser/components/aboutlogins/tests/browser/browser_updateLogin.js b/browser/components/aboutlogins/tests/browser/browser_updateLogin.js
index c7ed2816ff..686b3951a1 100644
--- a/browser/components/aboutlogins/tests/browser/browser_updateLogin.js
+++ b/browser/components/aboutlogins/tests/browser/browser_updateLogin.js
@@ -301,74 +301,65 @@ add_task(async function test_login_item() {
});
info("waiting for oskeystore auth #4");
await reauthObserved;
- await SpecialPowers.spawn(
- browser,
- [LoginHelper.loginToVanillaObject(TEST_LOGIN1)],
- async login => {
- let loginItem = Cu.waiveXrays(
- content.document.querySelector("login-item")
- );
- await ContentTaskUtils.waitForCondition(
- () => loginItem.dataset.editing,
- "Entering edit mode"
- );
- await Promise.resolve();
-
- let revealCheckbox = loginItem.shadowRoot.querySelector(
- ".reveal-password-checkbox"
- );
- revealCheckbox.click();
- Assert.ok(
- revealCheckbox.checked,
- "reveal-checkbox should be checked after clicking"
- );
+ await SpecialPowers.spawn(browser, [], async () => {
+ let loginItem = Cu.waiveXrays(content.document.querySelector("login-item"));
+ await ContentTaskUtils.waitForCondition(
+ () => loginItem.dataset.editing,
+ "Entering edit mode"
+ );
+ await Promise.resolve();
- let usernameInput = loginItem.shadowRoot.querySelector(
- "input[name='username']"
- );
- let passwordInput = loginItem._passwordInput;
+ let revealCheckbox = loginItem.shadowRoot.querySelector(
+ ".reveal-password-checkbox"
+ );
+ revealCheckbox.click();
+ Assert.ok(
+ revealCheckbox.checked,
+ "reveal-checkbox should be checked after clicking"
+ );
- usernameInput.value += "-saveme";
- passwordInput.value += "-saveme";
+ let usernameInput = loginItem.shadowRoot.querySelector(
+ "input[name='username']"
+ );
+ let passwordInput = loginItem._passwordInput;
- Assert.ok(
- loginItem.dataset.editing,
- "LoginItem should be in 'edit' mode"
- );
+ usernameInput.value += "-saveme";
+ passwordInput.value += "-saveme";
- let saveChangesButton = loginItem.shadowRoot.querySelector(
- ".save-changes-button"
- );
- saveChangesButton.click();
+ Assert.ok(loginItem.dataset.editing, "LoginItem should be in 'edit' mode");
- await ContentTaskUtils.waitForCondition(() => {
- let loginList = Cu.waiveXrays(
- content.document.querySelector("login-list")
- );
- let guid = loginList._loginGuidsSortedOrder[0];
- let updatedLogin = loginList._logins[guid].login;
- return (
- updatedLogin &&
- updatedLogin.username == usernameInput.value &&
- updatedLogin.password == passwordInput.value
- );
- }, "Waiting for corresponding login in login list to update");
+ let saveChangesButton = loginItem.shadowRoot.querySelector(
+ ".save-changes-button"
+ );
+ saveChangesButton.click();
- Assert.ok(
- !revealCheckbox.checked,
- "reveal-checkbox should be unchecked after saving changes"
- );
- Assert.ok(
- !loginItem.dataset.editing,
- "LoginItem should not be in 'edit' mode after saving"
+ await ContentTaskUtils.waitForCondition(() => {
+ let loginList = Cu.waiveXrays(
+ content.document.querySelector("login-list")
);
- Assert.equal(
- passwordInput.style.width,
- passwordInput.value.length + "ch",
- "Password field width should be correctly updated"
+ let guid = loginList._loginGuidsSortedOrder[0];
+ let updatedLogin = loginList._logins[guid].login;
+ return (
+ updatedLogin &&
+ updatedLogin.username == usernameInput.value &&
+ updatedLogin.password == passwordInput.value
);
- }
- );
+ }, "Waiting for corresponding login in login list to update");
+
+ Assert.ok(
+ !revealCheckbox.checked,
+ "reveal-checkbox should be unchecked after saving changes"
+ );
+ Assert.ok(
+ !loginItem.dataset.editing,
+ "LoginItem should not be in 'edit' mode after saving"
+ );
+ Assert.equal(
+ passwordInput.style.width,
+ passwordInput.value.length + "ch",
+ "Password field width should be correctly updated"
+ );
+ });
reauthObserved = forceAuthTimeoutAndWaitForOSKeyStoreLogin({
loginResult: true,
});
@@ -381,51 +372,40 @@ add_task(async function test_login_item() {
});
info("waiting for oskeystore auth #5");
await reauthObserved;
- await SpecialPowers.spawn(
- browser,
- [LoginHelper.loginToVanillaObject(TEST_LOGIN1)],
- async login => {
- let loginItem = Cu.waiveXrays(
- content.document.querySelector("login-item")
- );
- await ContentTaskUtils.waitForCondition(
- () => loginItem.dataset.editing,
- "Entering edit mode"
- );
- await Promise.resolve();
+ await SpecialPowers.spawn(browser, [], async () => {
+ let loginItem = Cu.waiveXrays(content.document.querySelector("login-item"));
+ await ContentTaskUtils.waitForCondition(
+ () => loginItem.dataset.editing,
+ "Entering edit mode"
+ );
+ await Promise.resolve();
- Assert.ok(
- loginItem.dataset.editing,
- "LoginItem should be in 'edit' mode"
- );
- let deleteButton = loginItem.shadowRoot
- .querySelector("delete-button")
- .shadowRoot.querySelector("button");
- deleteButton.click();
- let confirmDeleteDialog = Cu.waiveXrays(
- content.document.querySelector("confirmation-dialog")
- );
- let confirmDeleteButton =
- confirmDeleteDialog.shadowRoot.querySelector(".confirm-button");
- confirmDeleteButton.click();
+ Assert.ok(loginItem.dataset.editing, "LoginItem should be in 'edit' mode");
+ let deleteButton = loginItem.shadowRoot
+ .querySelector("delete-button")
+ .shadowRoot.querySelector("button");
+ deleteButton.click();
+ let confirmDeleteDialog = Cu.waiveXrays(
+ content.document.querySelector("confirmation-dialog")
+ );
+ let confirmDeleteButton =
+ confirmDeleteDialog.shadowRoot.querySelector(".confirm-button");
+ confirmDeleteButton.click();
- let loginList = Cu.waiveXrays(
- content.document.querySelector("login-list")
- );
- let loginListItem = Cu.waiveXrays(
- loginList.shadowRoot.querySelector("login-list-item[data-guid]")
+ let loginList = Cu.waiveXrays(content.document.querySelector("login-list"));
+ let loginListItem = Cu.waiveXrays(
+ loginList.shadowRoot.querySelector("login-list-item[data-guid]")
+ );
+ await ContentTaskUtils.waitForCondition(() => {
+ loginListItem = loginList.shadowRoot.querySelector(
+ "login-list-item[data-guid]"
);
- await ContentTaskUtils.waitForCondition(() => {
- loginListItem = loginList.shadowRoot.querySelector(
- "login-list-item[data-guid]"
- );
- return !loginListItem;
- }, "Waiting for login to be removed from list");
+ return !loginListItem;
+ }, "Waiting for login to be removed from list");
- Assert.ok(
- !loginItem.dataset.editing,
- "LoginItem should not be in 'edit' mode after deleting"
- );
- }
- );
+ Assert.ok(
+ !loginItem.dataset.editing,
+ "LoginItem should not be in 'edit' mode after deleting"
+ );
+ });
});
diff --git a/browser/components/aboutlogins/tests/browser/browser_vulnerableLoginAddedInSecondaryWindow.js b/browser/components/aboutlogins/tests/browser/browser_vulnerableLoginAddedInSecondaryWindow.js
index 6e7dbbea14..d650b01b83 100644
--- a/browser/components/aboutlogins/tests/browser/browser_vulnerableLoginAddedInSecondaryWindow.js
+++ b/browser/components/aboutlogins/tests/browser/browser_vulnerableLoginAddedInSecondaryWindow.js
@@ -180,8 +180,7 @@ add_task(async function test_new_login_marked_vulnerable_in_both_windows() {
let vulnerableListItem;
await ContentTaskUtils.waitForCondition(() => {
let entry = Object.entries(loginList._logins).find(
- ([guid, { login, listItem }]) =>
- login.origin == originForNewVulnerableLogin
+ ([, { login }]) => login.origin == originForNewVulnerableLogin
);
vulnerableListItem = entry[1].listItem;
return !!entry;
diff --git a/browser/components/aboutlogins/tests/chrome/aboutlogins_common.js b/browser/components/aboutlogins/tests/chrome/aboutlogins_common.js
index e881b6ca22..c460df2ef7 100644
--- a/browser/components/aboutlogins/tests/chrome/aboutlogins_common.js
+++ b/browser/components/aboutlogins/tests/chrome/aboutlogins_common.js
@@ -80,7 +80,7 @@ Object.defineProperty(window, "AboutLoginsUtils", {
setFocus(element) {
return element.focus();
},
- async promptForPrimaryPassword(resolve, messageId) {
+ async promptForPrimaryPassword(resolve, _messageId) {
resolve(true);
},
doLoginsMatch(login1, login2) {
diff --git a/browser/components/aboutlogins/tests/chrome/test_login_item.html b/browser/components/aboutlogins/tests/chrome/test_login_item.html
index 5403487599..0c3c331c21 100644
--- a/browser/components/aboutlogins/tests/chrome/test_login_item.html
+++ b/browser/components/aboutlogins/tests/chrome/test_login_item.html
@@ -412,7 +412,7 @@ add_task(async function test_set_login_empty() {
ok(copyButtons.every(button => isHidden(button)), "The copy buttons should be hidden when creating a login");
let createEventDispatched = false;
- document.addEventListener("AboutLoginsCreateLogin", event => {
+ document.addEventListener("AboutLoginsCreateLogin", (_e) => {
createEventDispatched = true;
}, {once: true});
gLoginItem.shadowRoot.querySelector(".save-changes-button").click();
diff --git a/browser/components/aboutwelcome/.eslintrc.js b/browser/components/aboutwelcome/.eslintrc.js
index d5f33683e5..1168a8e840 100644
--- a/browser/components/aboutwelcome/.eslintrc.js
+++ b/browser/components/aboutwelcome/.eslintrc.js
@@ -46,7 +46,7 @@ module.exports = {
{
// Use a configuration that's appropriate for modules, workers and
// non-production files.
- files: ["modules/*.jsm", "tests/**"],
+ files: ["tests/**"],
rules: {
"no-implicit-globals": "off",
},
@@ -113,6 +113,8 @@ module.exports = {
"layout",
"pos",
"hide-secondary-section",
+ "reverse-split",
+ "no-rdm",
],
},
],
@@ -124,15 +126,12 @@ module.exports = {
"consistent-this": ["error", "use-bind"],
eqeqeq: "error",
"func-name-matching": "error",
- "getter-return": "error",
"guard-for-in": "error",
- "max-depth": ["error", 4],
"max-nested-callbacks": ["error", 4],
"max-params": ["error", 6],
"max-statements": ["error", 50],
"new-cap": ["error", { newIsCap: true, capIsNew: false }],
"no-alert": "error",
- "no-console": ["error", { allow: ["error"] }],
"no-div-regex": "error",
"no-duplicate-imports": "error",
"no-eq-null": "error",
diff --git a/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs b/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs
index 24bf73c80a..7c61c13a92 100644
--- a/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs
+++ b/browser/components/aboutwelcome/actors/AboutWelcomeChild.sys.mjs
@@ -20,6 +20,15 @@ ChromeUtils.defineLazyGetter(lazy, "log", () => {
return new Logger("AboutWelcomeChild");
});
+const DID_SEE_FINAL_SCREEN_PREF = "browser.aboutwelcome.didSeeFinalScreen";
+
+XPCOMUtils.defineLazyPreferenceGetter(
+ lazy,
+ "toolbarEntrypoint",
+ "browser.aboutwelcome.entrypoint",
+ ""
+);
+
export class AboutWelcomeChild extends JSWindowActorChild {
// Can be used to avoid accesses to the document/contentWindow after it's
// destroyed, which may throw unhandled exceptions.
@@ -233,6 +242,9 @@ export class AboutWelcomeChild extends JSWindowActorChild {
* @param {object} eventData
*/
AWSendEventTelemetry(eventData) {
+ if (lazy.toolbarEntrypoint) {
+ eventData.event_context.entrypoint = lazy.toolbarEntrypoint;
+ }
this.AWSendToParent("TELEMETRY_EVENT", {
...eventData,
event_context: {
@@ -242,7 +254,7 @@ export class AboutWelcomeChild extends JSWindowActorChild {
}
/**
- * Send message that can be handled by AboutWelcomeParent.jsm
+ * Send message that can be handled by AboutWelcomeParent.sys.mjs
*
* @param {string} type
* @param {any=} data
@@ -256,10 +268,24 @@ export class AboutWelcomeChild extends JSWindowActorChild {
return this.wrapPromise(this.sendQuery("AWPage:WAIT_FOR_MIGRATION_CLOSE"));
}
+ setDidSeeFinalScreen() {
+ this.AWSendToParent("SPECIAL_ACTION", {
+ type: "SET_PREF",
+ data: {
+ pref: {
+ name: DID_SEE_FINAL_SCREEN_PREF,
+ value: true,
+ },
+ },
+ });
+ }
+
AWFinish() {
const shouldFocusNewtabUrlBar =
lazy.NimbusFeatures.aboutwelcome.getVariable("newtabUrlBarFocus");
+ this.setDidSeeFinalScreen();
+
this.contentWindow.location.href = "about:home";
if (shouldFocusNewtabUrlBar) {
this.AWSendToParent("SPECIAL_ACTION", {
diff --git a/browser/components/aboutwelcome/actors/AboutWelcomeParent.sys.mjs b/browser/components/aboutwelcome/actors/AboutWelcomeParent.sys.mjs
index 1eb77da0d8..7b32161e3b 100644
--- a/browser/components/aboutwelcome/actors/AboutWelcomeParent.sys.mjs
+++ b/browser/components/aboutwelcome/actors/AboutWelcomeParent.sys.mjs
@@ -85,6 +85,8 @@ class AboutWelcomeObserver {
stop() {
lazy.log.debug(`Terminate reason is ${this.terminateReason}`);
+ // Clear the entrypoint pref
+ Services.prefs.clearUserPref("browser.aboutwelcome.entrypoint");
Services.obs.removeObserver(this, "quit-application");
if (!this.win) {
return;
@@ -132,7 +134,7 @@ export class AboutWelcomeParent extends JSWindowActorParent {
}
/**
- * Handle messages from AboutWelcomeChild.jsm
+ * Handle messages from AboutWelcomeChild.sys.mjs
*
* @param {string} type
* @param {any=} data
@@ -273,7 +275,7 @@ export class AboutWelcomeParent extends JSWindowActorParent {
export class AboutWelcomeShoppingParent extends AboutWelcomeParent {
/**
- * Handle messages from AboutWelcomeChild.jsm
+ * Handle messages from AboutWelcomeChild.sys.mjs
*
* @param {string} type
* @param {any=} data
diff --git a/browser/components/aboutwelcome/content-src/aboutwelcome.scss b/browser/components/aboutwelcome/content-src/aboutwelcome.scss
index aa49a04799..9174fe2439 100644
--- a/browser/components/aboutwelcome/content-src/aboutwelcome.scss
+++ b/browser/components/aboutwelcome/content-src/aboutwelcome.scss
@@ -570,10 +570,12 @@ html {
.section-main {
flex-direction: row;
display: block;
- margin: auto auto auto 0;
+ margin: auto;
+ margin-inline-start: 0;
&:dir(rtl) {
- margin: auto 0 auto auto;
+ margin: auto;
+ margin-inline-start: 0;
}
&.embedded-migration {
@@ -597,6 +599,21 @@ html {
border-radius: 8px 0 0 8px;
}
+ .legal-paragraph {
+ text-align: start;
+ font-size: 11px;
+ line-height: 16.5px;
+ color: #5B5B66;
+
+ @media only screen and (width <= 800px) {
+ padding-inline: 30px;
+ }
+
+ @media (prefers-color-scheme: dark) {
+ color: #CFCFD8;
+ }
+ }
+
.main-content-inner {
min-height: 330px;
@@ -764,7 +781,8 @@ html {
&:dir(rtl) {
border-radius: 0 8px 8px 0;
- margin: auto auto auto 0;
+ margin: auto;
+ margin-inline-end: 0;
}
h1 {
@@ -843,168 +861,285 @@ html {
.tiles-theme-section {
margin-inline-start: -10px;
}
- }
- @media only screen and (width <= 800px) {
- flex-direction: column;
- min-height: $small-main-section-height + $small-secondary-section-height;
+ &[reverse-split] {
+ flex-direction: row-reverse;
- &::before {
- width: $split-section-width;
- }
+ .section-main {
+ .main-content {
+ border-radius: inherit;
+ }
- .section-secondary,
- .section-main {
- width: $split-section-width;
- }
+ margin: auto;
+ margin-inline-end: 0;
+ border-radius: 8px 0 0 8px;
- .section-secondary {
- --mr-secondary-background-position-y: top;
- --mr-secondary-position: center var(--mr-secondary-background-position-y) / 75%;
+ &:dir(rtl) {
+ border-radius: 0 8px 8px 0;
+ margin: auto;
+ margin-inline-end: 0;
+ }
+ }
- border-radius: 8px 8px 0 0;
- margin: auto auto 0;
- height: $small-secondary-section-height;
+ .section-secondary {
+ margin: auto;
+ margin-inline-start: 0;
+ border-radius: 0 8px 8px 0;
- .hero-image img {
- margin: 6px 0;
+ &:dir(rtl) {
+ border-radius: 8px 0 0 8px;
+ margin: auto;
+ margin-inline-start: 0;
+ }
}
+ }
+ }
- .message-text {
- margin-inline: auto;
- }
+ // duplicate the above styles for no-rdm. unfortunately SASS won't allow
+ // us to combine these selectors.
+ &:where([no-rdm='true']) {
+ .tiles-theme-section {
+ margin-inline-start: -10px;
+ }
- h1 {
- font-size: 35px;
- text-align: center;
- white-space: normal;
- margin-inline: auto;
- margin-block: 14px 6px;
- }
+ &[reverse-split] {
+ flex-direction: row-reverse;
- &:dir(rtl) {
- margin: auto auto 0;
- border-radius: 8px 8px 0 0;
- }
+ .section-main {
+ .main-content {
+ border-radius: inherit;
+ }
- &.with-secondary-section-hidden {
- display: none;
+ margin: auto;
+ margin-inline-end: 0;
+ border-radius: 8px 0 0 8px;
+
+ &:dir(rtl) {
+ border-radius: 0 8px 8px 0;
+ margin: auto;
+ margin-inline-end: 0;
+ }
}
- }
- migration-wizard {
- &::part(deck){
- min-width: 330px;
- margin-inline: 36px;
+ .section-secondary {
+ margin: auto;
+ margin-inline-start: 0;
+ border-radius: 0 8px 8px 0;
+
+ &:dir(rtl) {
+ border-radius: 8px 0 0 8px;
+ margin: auto;
+ margin-inline-start: 0;
+ }
}
}
+ }
- .section-main {
- margin: 0 auto auto;
- height: $small-main-section-height;
+ @media only screen and (width <= 800px) {
+ &:where(:not([no-rdm])) {
+ flex-direction: column;
+ min-height: $small-main-section-height + $small-secondary-section-height;
+
+ &::before {
+ width: $split-section-width;
+ }
- migration-wizard::part(buttons) {
+ &[reverse-split] {
flex-direction: column;
- margin-inline: 46px;
+
+ .section-secondary {
+ border-radius: 8px 8px 0 0;
+ margin: auto;
+ margin-bottom: 0;
+
+ &:dir(rtl) {
+ margin: auto;
+ margin-bottom: 0;
+ border-radius: 8px 8px 0 0;
+ }
+ }
+
+ .section-main {
+ margin: auto;
+ margin-top: 0;
+ border-radius: 0 0 8px 8px;
+
+ &:dir(rtl) {
+ margin: auto;
+ margin-top: 0;
+ border-radius: 0 0 8px 8px;
+ }
+ }
+ }
+
+ .section-secondary,
+ .section-main {
+ width: $split-section-width;
}
- &[hide-secondary-section='responsive'] {
- height: $split-screen-height;
+ .section-secondary {
+ --mr-secondary-background-position-y: top;
+ --mr-secondary-position: center var(--mr-secondary-background-position-y) / 75%;
+
+ border-radius: 8px 8px 0 0;
margin: auto;
+ margin-bottom: 0;
+ height: $small-secondary-section-height;
- .main-content {
- padding: 50px 0 0;
- border-radius: 8px;
+ .hero-image img {
+ margin: 6px 0;
+ }
+
+ .message-text {
+ margin-inline: auto;
+ }
+
+ h1 {
+ font-size: 35px;
+ text-align: center;
+ white-space: normal;
+ margin-inline: auto;
+ margin-block: 14px 6px;
+ }
+
+ &:dir(rtl) {
+ margin: auto;
+ margin-bottom: 0;
+ border-radius: 8px 8px 0 0;
+ }
+
+ &.with-secondary-section-hidden {
+ display: none;
}
}
- .main-content {
- border-radius: 0 0 8px 8px;
- padding: 30px 0 0;
+ migration-wizard {
+ &::part(deck){
+ min-width: 330px;
+ margin-inline: 36px;
+ }
+ }
+
+ .section-main {
+ margin: auto;
+ margin-top: 0;
+ height: $small-main-section-height;
- .main-content-inner {
- align-items: center;
+ migration-wizard::part(buttons) {
+ flex-direction: column;
+ margin-inline: 46px;
}
- .logo-container {
- text-align: center;
+ &[hide-secondary-section='responsive'] {
+ height: $split-screen-height;
+ margin: auto;
+
+ &:dir(rtl) {
+ margin: auto;
+ }
- .brand-logo {
- min-height: 25px;
+ .main-content {
+ padding: 50px 0 0;
+ border-radius: 8px;
- &,
&:dir(rtl) {
- background-position: center;
+ border-radius: 8px;
}
}
-
- .logo-alt {
- width: inherit;
- height: inherit;
- }
}
- .welcome-text {
- align-items: center;
- text-align: center;
- margin-inline: 0;
- padding-inline: 30px;
+ .main-content {
+ border-radius: 0 0 8px 8px;
+ padding: 30px 0 0;
- .spacer-bottom,
- .spacer-top {
- display: none;
+ .main-content-inner {
+ align-items: center;
}
- }
- .action-buttons {
- text-align: center;
+ .logo-container {
+ text-align: center;
+
+ .brand-logo {
+ min-height: 25px;
- .checkbox-container {
- display: none;
+ &,
+ &:dir(rtl) {
+ background-position: center;
+ }
+ }
+
+ .logo-alt {
+ width: inherit;
+ height: inherit;
+ }
}
- .secondary-cta {
- position: relative;
- margin-block: 10px 0;
- bottom: 0;
+ .welcome-text {
+ align-items: center;
+ text-align: center;
+ margin-inline: 0;
+ padding-inline: 30px;
+
+ .spacer-bottom,
+ .spacer-top {
+ display: none;
+ }
}
- }
- .primary,
- .secondary {
- min-width: 240px;
- margin-inline: 0;
- }
+ .action-buttons {
+ text-align: center;
- .steps {
- padding-block: 0;
- margin: 0;
+ .checkbox-container {
+ display: none;
+ }
- &.progress-bar {
+ .secondary-cta {
+ position: relative;
+ margin-block: 10px 0;
+ bottom: 0;
+ }
+ }
+
+ .primary,
+ .secondary {
+ min-width: 240px;
margin-inline: 0;
}
+
+ .steps {
+ padding-block: 0;
+ margin: 0;
+
+ &.progress-bar {
+ margin-inline: 0;
+ }
+ }
}
- }
- .additional-cta {
- &.cta-link {
- align-self: center;
+ .additional-cta {
+ &.cta-link {
+ align-self: center;
+ }
}
- }
- .dismiss-button {
- top: -$small-secondary-section-height;
- }
+ .dismiss-button {
+ top: -$small-secondary-section-height;
+ }
- &:dir(rtl) {
- margin: 0 auto auto;
+ &:dir(rtl) {
+ margin: auto;
+ margin-top: 0;
- .main-content {
- border-radius: 0 0 8px 8px;
+ .main-content {
+ border-radius: 0 0 8px 8px;
+ }
}
}
}
+ &[no-rdm] {
+ width: 800px;
+ }
}
@media only screen and (height <= 650px) {
@@ -1610,6 +1745,10 @@ html {
}
}
+ .legal-paragraph {
+ transition: var(--transition)
+ }
+
.primary,
.secondary,
.additional-cta,
@@ -1763,7 +1902,8 @@ html {
.secondary,
.secondary-cta,
.steps,
- .cta-link {
+ .cta-link,
+ .legal-paragraph {
transition-delay: 1s;
}
}
@@ -1772,14 +1912,15 @@ html {
.screen:not(.dialog-initial) {
.tiles-theme-section,
.multi-select-container
- {
+ {
transition-delay: 0.2s;
}
.primary,
.secondary,
.secondary-cta,
- .cta-link {
+ .cta-link,
+ .legal-paragraph {
transition-delay: 0.4s;
}
}
@@ -1852,6 +1993,7 @@ html {
.secondary,
.secondary-cta:not(.top),
.cta-link,
+ .legal-paragraph,
migration-wizard {
opacity: 0;
translate: 0 calc(-1 * var(--translate));
@@ -1898,7 +2040,8 @@ html {
.checkbox-container:not(.multi-select-item),
.secondary,
.secondary-cta:not(.top),
- .cta-link {
+ .cta-link,
+ .legal-paragraph {
opacity: 0;
translate: 0 var(--translate);
transition-delay: 0.3s;
diff --git a/browser/components/aboutwelcome/content-src/components/AddonsPicker.jsx b/browser/components/aboutwelcome/content-src/components/AddonsPicker.jsx
index 10c88008de..1182c785b9 100644
--- a/browser/components/aboutwelcome/content-src/components/AddonsPicker.jsx
+++ b/browser/components/aboutwelcome/content-src/components/AddonsPicker.jsx
@@ -20,7 +20,9 @@ export const InstallButton = props => {
const [installing, setInstalling] = useState(false);
const [installComplete, setInstallComplete] = useState(false);
- let buttonLabel = installComplete ? "Installed" : "Add to Firefox";
+ let buttonLabel = installComplete
+ ? { string_id: "amo-picker-install-complete-label" }
+ : { string_id: "amo-picker-install-button-label" };
function onClick(event) {
props.handleAction(event);
diff --git a/browser/components/aboutwelcome/content-src/components/EmbeddedMigrationWizard.jsx b/browser/components/aboutwelcome/content-src/components/EmbeddedMigrationWizard.jsx
index 2fff85abd9..60186e2694 100644
--- a/browser/components/aboutwelcome/content-src/components/EmbeddedMigrationWizard.jsx
+++ b/browser/components/aboutwelcome/content-src/components/EmbeddedMigrationWizard.jsx
@@ -4,8 +4,9 @@
import React, { useEffect, useRef } from "react";
-export const EmbeddedMigrationWizard = ({ handleAction }) => {
+export const EmbeddedMigrationWizard = ({ handleAction, content }) => {
const ref = useRef();
+ const options = content.migration_wizard_options;
useEffect(() => {
const handleBeginMigration = () => {
handleAction({
@@ -32,9 +33,29 @@ export const EmbeddedMigrationWizard = ({ handleAction }) => {
}, []); // eslint-disable-line react-hooks/exhaustive-deps
return (
<migration-wizard
- force-show-import-all="false"
+ force-show-import-all={options?.force_show_import_all || "false"}
auto-request-state=""
ref={ref}
+ option-expander-title-string={options?.option_expander_title_string || ""}
+ hide-option-expander-subtitle={
+ options?.hide_option_expander_subtitle || false
+ }
+ data-import-complete-success-string={
+ options?.data_import_complete_success_string || ""
+ }
+ selection-header-string={options?.selection_header_string}
+ selection-subheader-string={options?.selection_subheader_string || ""}
+ hide-select-all={options?.hide_select_all || false}
+ checkbox-margin-inline={options?.checkbox_margin_inline || ""}
+ checkbox-margin-block={options?.checkbox_margin_block || ""}
+ import-button-string={options?.import_button_string || ""}
+ import-button-class={options?.import_button_class || ""}
+ header-font-size={options?.header_font_size || ""}
+ header-font-weight={options?.header_font_weight || ""}
+ header-margin-block={options?.header_margin_block || ""}
+ subheader-font-size={options?.subheader_font_size || ""}
+ subheader-font-weight={options?.subheader_font_weight || ""}
+ subheader-margin-block={options?.subheader_margin_block || ""}
></migration-wizard>
);
};
diff --git a/browser/components/aboutwelcome/content-src/components/MSLocalized.jsx b/browser/components/aboutwelcome/content-src/components/MSLocalized.jsx
index 42fb071475..61867a75a2 100644
--- a/browser/components/aboutwelcome/content-src/components/MSLocalized.jsx
+++ b/browser/components/aboutwelcome/content-src/components/MSLocalized.jsx
@@ -13,6 +13,7 @@ export const CONFIGURABLE_STYLES = [
"marginInline",
"paddingBlock",
"paddingInline",
+ "textAlign",
"whiteSpace",
];
const ZAP_SIZE_THRESHOLD = 160;
diff --git a/browser/components/aboutwelcome/content-src/components/MultiStageProtonScreen.jsx b/browser/components/aboutwelcome/content-src/components/MultiStageProtonScreen.jsx
index ffe64f05f1..59771e4e48 100644
--- a/browser/components/aboutwelcome/content-src/components/MultiStageProtonScreen.jsx
+++ b/browser/components/aboutwelcome/content-src/components/MultiStageProtonScreen.jsx
@@ -311,7 +311,10 @@ export class ProtonScreen extends React.PureComponent {
/>
) : null}
{content.tiles && content.tiles.type === "migration-wizard" ? (
- <EmbeddedMigrationWizard handleAction={this.props.handleAction} />
+ <EmbeddedMigrationWizard
+ handleAction={this.props.handleAction}
+ content={content}
+ />
) : null}
</React.Fragment>
);
@@ -500,6 +503,7 @@ export class ProtonScreen extends React.PureComponent {
<main
className={`screen ${this.props.id || ""}
${screenClassName} ${textColorClass}`}
+ reverse-split={content.reverse_split ? "" : null}
role={ariaRole ?? "alertdialog"}
layout={content.layout}
pos={content.position || "center"}
@@ -508,6 +512,7 @@ export class ProtonScreen extends React.PureComponent {
ref={input => {
this.mainContentHeader = input;
}}
+ no-rdm={content.no_rdm ? "" : null}
>
{isCenterPosition ? null : this.renderSecondarySection(content)}
<div
@@ -541,6 +546,12 @@ export class ProtonScreen extends React.PureComponent {
content.width && content.position !== "split"
? content.width
: null,
+ paddingBlock: content.split_content_padding_block
+ ? content.split_content_padding_block
+ : null,
+ paddingInline: content.split_content_padding_inline
+ ? content.split_content_padding_inline
+ : null,
}}
>
{content.logo ? this.renderPicture(content.logo) : null}
@@ -591,11 +602,11 @@ export class ProtonScreen extends React.PureComponent {
handleAction={this.props.handleAction}
/>
) : null}
+ {this.renderContentTiles()}
+ {this.renderLanguageSwitcher()}
{content.above_button_content
? this.renderOrderedContent(content.above_button_content)
: null}
- {this.renderContentTiles()}
- {this.renderLanguageSwitcher()}
{!hideStepsIndicator && aboveButtonStepsIndicator
? this.renderStepsIndicator()
: null}
diff --git a/browser/components/aboutwelcome/content/aboutwelcome.bundle.js b/browser/components/aboutwelcome/content/aboutwelcome.bundle.js
index cb4e9004f8..0d96257677 100644
--- a/browser/components/aboutwelcome/content/aboutwelcome.bundle.js
+++ b/browser/components/aboutwelcome/content/aboutwelcome.bundle.js
@@ -25,8 +25,8 @@ module.exports = ReactDOM;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "AboutWelcomeUtils": () => (/* binding */ AboutWelcomeUtils),
-/* harmony export */ "DEFAULT_RTAMO_CONTENT": () => (/* binding */ DEFAULT_RTAMO_CONTENT)
+/* harmony export */ AboutWelcomeUtils: () => (/* binding */ AboutWelcomeUtils),
+/* harmony export */ DEFAULT_RTAMO_CONTENT: () => (/* binding */ DEFAULT_RTAMO_CONTENT)
/* harmony export */ });
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
@@ -158,11 +158,11 @@ const DEFAULT_RTAMO_CONTENT = {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "MultiStageAboutWelcome": () => (/* binding */ MultiStageAboutWelcome),
-/* harmony export */ "SecondaryCTA": () => (/* binding */ SecondaryCTA),
-/* harmony export */ "StepsIndicator": () => (/* binding */ StepsIndicator),
-/* harmony export */ "ProgressBar": () => (/* binding */ ProgressBar),
-/* harmony export */ "WelcomeScreen": () => (/* binding */ WelcomeScreen)
+/* harmony export */ MultiStageAboutWelcome: () => (/* binding */ MultiStageAboutWelcome),
+/* harmony export */ ProgressBar: () => (/* binding */ ProgressBar),
+/* harmony export */ SecondaryCTA: () => (/* binding */ SecondaryCTA),
+/* harmony export */ StepsIndicator: () => (/* binding */ StepsIndicator),
+/* harmony export */ WelcomeScreen: () => (/* binding */ WelcomeScreen)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -656,8 +656,8 @@ class WelcomeScreen extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCo
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "CONFIGURABLE_STYLES": () => (/* binding */ CONFIGURABLE_STYLES),
-/* harmony export */ "Localized": () => (/* binding */ Localized)
+/* harmony export */ CONFIGURABLE_STYLES: () => (/* binding */ CONFIGURABLE_STYLES),
+/* harmony export */ Localized: () => (/* binding */ Localized)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -666,7 +666,7 @@ __webpack_require__.r(__webpack_exports__);
* You can obtain one at http://mozilla.org/MPL/2.0/. */
-const CONFIGURABLE_STYLES = ["color", "fontSize", "fontWeight", "letterSpacing", "lineHeight", "marginBlock", "marginInline", "paddingBlock", "paddingInline", "whiteSpace"];
+const CONFIGURABLE_STYLES = ["color", "fontSize", "fontWeight", "letterSpacing", "lineHeight", "marginBlock", "marginInline", "paddingBlock", "paddingInline", "textAlign", "whiteSpace"];
const ZAP_SIZE_THRESHOLD = 160;
/**
@@ -768,9 +768,9 @@ const Localized = ({
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "MultiStageProtonScreen": () => (/* binding */ MultiStageProtonScreen),
-/* harmony export */ "ProtonScreenActionButtons": () => (/* binding */ ProtonScreenActionButtons),
-/* harmony export */ "ProtonScreen": () => (/* binding */ ProtonScreen)
+/* harmony export */ MultiStageProtonScreen: () => (/* binding */ MultiStageProtonScreen),
+/* harmony export */ ProtonScreen: () => (/* binding */ ProtonScreen),
+/* harmony export */ ProtonScreenActionButtons: () => (/* binding */ ProtonScreenActionButtons)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -1032,7 +1032,8 @@ class ProtonScreen extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCom
activeMultiSelect: this.props.activeMultiSelect,
setActiveMultiSelect: this.props.setActiveMultiSelect
}) : null, content.tiles && content.tiles.type === "migration-wizard" ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_EmbeddedMigrationWizard__WEBPACK_IMPORTED_MODULE_12__.EmbeddedMigrationWizard, {
- handleAction: this.props.handleAction
+ handleAction: this.props.handleAction,
+ content: content
}) : null);
}
renderNoodles() {
@@ -1178,6 +1179,7 @@ class ProtonScreen extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCom
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("main", {
className: `screen ${this.props.id || ""}
${screenClassName} ${textColorClass}`,
+ "reverse-split": content.reverse_split ? "" : null,
role: ariaRole ?? "alertdialog",
layout: content.layout,
pos: content.position || "center",
@@ -1185,7 +1187,8 @@ class ProtonScreen extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCom
"aria-labelledby": "mainContentHeader",
ref: input => {
this.mainContentHeader = input;
- }
+ },
+ "no-rdm": content.no_rdm ? "" : null
}, isCenterPosition ? null : this.renderSecondarySection(content), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
className: `section-main ${isEmbeddedMigration ? "embedded-migration" : ""}`,
"hide-secondary-section": content.hide_secondary_section ? String(content.hide_secondary_section) : null,
@@ -1198,7 +1201,9 @@ class ProtonScreen extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCom
className: `main-content ${hideStepsIndicator ? "no-steps" : ""}`,
style: {
background: content.background && isCenterPosition ? content.background : null,
- width: content.width && content.position !== "split" ? content.width : null
+ width: content.width && content.position !== "split" ? content.width : null,
+ paddingBlock: content.split_content_padding_block ? content.split_content_padding_block : null,
+ paddingInline: content.split_content_padding_inline ? content.split_content_padding_inline : null
}
}, content.logo ? this.renderPicture(content.logo) : null, isRtamo ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
className: "rtamo-icon"
@@ -1226,7 +1231,7 @@ class ProtonScreen extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCom
}) : null), content.video_container ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_OnboardingVideo__WEBPACK_IMPORTED_MODULE_10__.OnboardingVideo, {
content: content.video_container,
handleAction: this.props.handleAction
- }) : null, content.above_button_content ? this.renderOrderedContent(content.above_button_content) : null, this.renderContentTiles(), this.renderLanguageSwitcher(), !hideStepsIndicator && aboveButtonStepsIndicator ? this.renderStepsIndicator() : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProtonScreenActionButtons, {
+ }) : null, this.renderContentTiles(), this.renderLanguageSwitcher(), content.above_button_content ? this.renderOrderedContent(content.above_button_content) : null, !hideStepsIndicator && aboveButtonStepsIndicator ? this.renderStepsIndicator() : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(ProtonScreenActionButtons, {
content: content,
addonName: this.props.addonName,
handleAction: this.props.handleAction,
@@ -1245,8 +1250,8 @@ class ProtonScreen extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCom
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "MarketplaceButtons": () => (/* binding */ MarketplaceButtons),
-/* harmony export */ "MobileDownloads": () => (/* binding */ MobileDownloads)
+/* harmony export */ MarketplaceButtons: () => (/* binding */ MarketplaceButtons),
+/* harmony export */ MobileDownloads: () => (/* binding */ MobileDownloads)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -1307,7 +1312,7 @@ const MobileDownloads = props => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "MultiSelect": () => (/* binding */ MultiSelect)
+/* harmony export */ MultiSelect: () => (/* binding */ MultiSelect)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -1431,7 +1436,7 @@ const MultiSelect = ({
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "Themes": () => (/* binding */ Themes)
+/* harmony export */ Themes: () => (/* binding */ Themes)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -1486,8 +1491,8 @@ const Themes = props => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "useLanguageSwitcher": () => (/* binding */ useLanguageSwitcher),
-/* harmony export */ "LanguageSwitcher": () => (/* binding */ LanguageSwitcher)
+/* harmony export */ LanguageSwitcher: () => (/* binding */ LanguageSwitcher),
+/* harmony export */ useLanguageSwitcher: () => (/* binding */ useLanguageSwitcher)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -1744,7 +1749,7 @@ function LanguageSwitcher(props) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "CTAParagraph": () => (/* binding */ CTAParagraph)
+/* harmony export */ CTAParagraph: () => (/* binding */ CTAParagraph)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -1787,7 +1792,7 @@ const CTAParagraph = props => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "HeroImage": () => (/* binding */ HeroImage)
+/* harmony export */ HeroImage: () => (/* binding */ HeroImage)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -1826,7 +1831,7 @@ const HeroImage = props => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "OnboardingVideo": () => (/* binding */ OnboardingVideo)
+/* harmony export */ OnboardingVideo: () => (/* binding */ OnboardingVideo)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -1865,7 +1870,7 @@ const OnboardingVideo = props => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "AdditionalCTA": () => (/* binding */ AdditionalCTA)
+/* harmony export */ AdditionalCTA: () => (/* binding */ AdditionalCTA)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -1914,7 +1919,7 @@ const AdditionalCTA = ({
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "SubmenuButton": () => (/* binding */ SubmenuButton)
+/* harmony export */ SubmenuButton: () => (/* binding */ SubmenuButton)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -2071,7 +2076,7 @@ const SubmenuButtonInner = ({
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "EmbeddedMigrationWizard": () => (/* binding */ EmbeddedMigrationWizard)
+/* harmony export */ EmbeddedMigrationWizard: () => (/* binding */ EmbeddedMigrationWizard)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -2081,9 +2086,11 @@ __webpack_require__.r(__webpack_exports__);
const EmbeddedMigrationWizard = ({
- handleAction
+ handleAction,
+ content
}) => {
const ref = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
+ const options = content.migration_wizard_options;
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
const handleBeginMigration = () => {
handleAction({
@@ -2111,9 +2118,25 @@ const EmbeddedMigrationWizard = ({
};
}, []); // eslint-disable-line react-hooks/exhaustive-deps
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("migration-wizard", {
- "force-show-import-all": "false",
+ "force-show-import-all": options?.force_show_import_all || "false",
"auto-request-state": "",
- ref: ref
+ ref: ref,
+ "option-expander-title-string": options?.option_expander_title_string || "",
+ "hide-option-expander-subtitle": options?.hide_option_expander_subtitle || false,
+ "data-import-complete-success-string": options?.data_import_complete_success_string || "",
+ "selection-header-string": options?.selection_header_string,
+ "selection-subheader-string": options?.selection_subheader_string || "",
+ "hide-select-all": options?.hide_select_all || false,
+ "checkbox-margin-inline": options?.checkbox_margin_inline || "",
+ "checkbox-margin-block": options?.checkbox_margin_block || "",
+ "import-button-string": options?.import_button_string || "",
+ "import-button-class": options?.import_button_class || "",
+ "header-font-size": options?.header_font_size || "",
+ "header-font-weight": options?.header_font_weight || "",
+ "header-margin-block": options?.header_margin_block || "",
+ "subheader-font-size": options?.subheader_font_size || "",
+ "subheader-font-weight": options?.subheader_font_weight || "",
+ "subheader-margin-block": options?.subheader_margin_block || ""
});
};
@@ -2123,9 +2146,9 @@ const EmbeddedMigrationWizard = ({
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "Loader": () => (/* binding */ Loader),
-/* harmony export */ "InstallButton": () => (/* binding */ InstallButton),
-/* harmony export */ "AddonsPicker": () => (/* binding */ AddonsPicker)
+/* harmony export */ AddonsPicker: () => (/* binding */ AddonsPicker),
+/* harmony export */ InstallButton: () => (/* binding */ InstallButton),
+/* harmony export */ Loader: () => (/* binding */ Loader)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -2150,7 +2173,11 @@ const Loader = () => {
const InstallButton = props => {
const [installing, setInstalling] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
const [installComplete, setInstallComplete] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);
- let buttonLabel = installComplete ? "Installed" : "Add to Firefox";
+ let buttonLabel = installComplete ? {
+ string_id: "amo-picker-install-complete-label"
+ } : {
+ string_id: "amo-picker-install-button-label"
+ };
function onClick(event) {
props.handleAction(event);
// Replace the label with the spinner
@@ -2249,7 +2276,7 @@ const AddonsPicker = props => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "LinkParagraph": () => (/* binding */ LinkParagraph)
+/* harmony export */ LinkParagraph: () => (/* binding */ LinkParagraph)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -2303,8 +2330,8 @@ const LinkParagraph = props => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "BASE_PARAMS": () => (/* binding */ BASE_PARAMS),
-/* harmony export */ "addUtmParams": () => (/* binding */ addUtmParams)
+/* harmony export */ BASE_PARAMS: () => (/* binding */ BASE_PARAMS),
+/* harmony export */ addUtmParams: () => (/* binding */ addUtmParams)
/* harmony export */ });
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
@@ -2346,7 +2373,7 @@ function addUtmParams(url, utmTerm) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "ReturnToAMO": () => (/* binding */ ReturnToAMO)
+/* harmony export */ ReturnToAMO: () => (/* binding */ ReturnToAMO)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
diff --git a/browser/components/aboutwelcome/content/aboutwelcome.css b/browser/components/aboutwelcome/content/aboutwelcome.css
index 63608bd48a..411f6d4f9b 100644
--- a/browser/components/aboutwelcome/content/aboutwelcome.css
+++ b/browser/components/aboutwelcome/content/aboutwelcome.css
@@ -758,7 +758,7 @@ panel#feature-callout[arrow-position=inline-start-bottom] {
}
@media (prefers-contrast: no-preference) and (prefers-color-scheme: dark) {
.onboardingContainer.shopping .screen[pos=split] {
- box-shadow: 0 2px 6px #15141a;
+ box-shadow: 0 2px 6px rgb(21, 20, 26);
}
}
.onboardingContainer.shopping .screen[pos=split]::before {
@@ -813,6 +813,7 @@ panel#feature-callout[arrow-position=inline-start-bottom] {
margin-block: 0 20px;
padding-inline: 30px;
text-align: start;
+ color: inherit;
}
.onboardingContainer.shopping .screen[pos=split] .section-main .main-content .legal-paragraph a {
text-decoration: underline;
@@ -1369,10 +1370,12 @@ html {
.onboardingContainer .screen[pos=split] .section-main {
flex-direction: row;
display: block;
- margin: auto auto auto 0;
+ margin: auto;
+ margin-inline-start: 0;
}
.onboardingContainer .screen[pos=split] .section-main:dir(rtl) {
- margin: auto 0 auto auto;
+ margin: auto;
+ margin-inline-start: 0;
}
.onboardingContainer .screen[pos=split] .section-main.embedded-migration .main-content {
padding-block: 100px 0;
@@ -1390,6 +1393,22 @@ html {
.onboardingContainer .screen[pos=split] .section-main .main-content:dir(rtl) {
border-radius: 8px 0 0 8px;
}
+.onboardingContainer .screen[pos=split] .section-main .main-content .legal-paragraph {
+ text-align: start;
+ font-size: 11px;
+ line-height: 16.5px;
+ color: #5B5B66;
+}
+@media only screen and (width <= 800px) {
+ .onboardingContainer .screen[pos=split] .section-main .main-content .legal-paragraph {
+ padding-inline: 30px;
+ }
+}
+@media (prefers-color-scheme: dark) {
+ .onboardingContainer .screen[pos=split] .section-main .main-content .legal-paragraph {
+ color: #CFCFD8;
+ }
+}
.onboardingContainer .screen[pos=split] .section-main .main-content .main-content-inner {
min-height: 330px;
}
@@ -1563,7 +1582,8 @@ html {
}
.onboardingContainer .screen[pos=split] .section-secondary:dir(rtl) {
border-radius: 0 8px 8px 0;
- margin: auto auto auto 0;
+ margin: auto;
+ margin-inline-end: 0;
}
.onboardingContainer .screen[pos=split] .section-secondary h1 {
color: var(--mr-screen-heading-color);
@@ -1631,131 +1651,222 @@ html {
.onboardingContainer .screen[pos=split] .tiles-theme-section {
margin-inline-start: -10px;
}
+ .onboardingContainer .screen[pos=split][reverse-split] {
+ flex-direction: row-reverse;
+ }
+ .onboardingContainer .screen[pos=split][reverse-split] .section-main {
+ margin: auto;
+ margin-inline-end: 0;
+ border-radius: 8px 0 0 8px;
+ }
+ .onboardingContainer .screen[pos=split][reverse-split] .section-main .main-content {
+ border-radius: inherit;
+ }
+ .onboardingContainer .screen[pos=split][reverse-split] .section-main:dir(rtl) {
+ border-radius: 0 8px 8px 0;
+ margin: auto;
+ margin-inline-end: 0;
+ }
+ .onboardingContainer .screen[pos=split][reverse-split] .section-secondary {
+ margin: auto;
+ margin-inline-start: 0;
+ border-radius: 0 8px 8px 0;
+ }
+ .onboardingContainer .screen[pos=split][reverse-split] .section-secondary:dir(rtl) {
+ border-radius: 8px 0 0 8px;
+ margin: auto;
+ margin-inline-start: 0;
+ }
+}
+.onboardingContainer .screen[pos=split]:where([no-rdm=true]) .tiles-theme-section {
+ margin-inline-start: -10px;
+}
+.onboardingContainer .screen[pos=split]:where([no-rdm=true])[reverse-split] {
+ flex-direction: row-reverse;
+}
+.onboardingContainer .screen[pos=split]:where([no-rdm=true])[reverse-split] .section-main {
+ margin: auto;
+ margin-inline-end: 0;
+ border-radius: 8px 0 0 8px;
+}
+.onboardingContainer .screen[pos=split]:where([no-rdm=true])[reverse-split] .section-main .main-content {
+ border-radius: inherit;
+}
+.onboardingContainer .screen[pos=split]:where([no-rdm=true])[reverse-split] .section-main:dir(rtl) {
+ border-radius: 0 8px 8px 0;
+ margin: auto;
+ margin-inline-end: 0;
+}
+.onboardingContainer .screen[pos=split]:where([no-rdm=true])[reverse-split] .section-secondary {
+ margin: auto;
+ margin-inline-start: 0;
+ border-radius: 0 8px 8px 0;
+}
+.onboardingContainer .screen[pos=split]:where([no-rdm=true])[reverse-split] .section-secondary:dir(rtl) {
+ border-radius: 8px 0 0 8px;
+ margin: auto;
+ margin-inline-start: 0;
}
@media only screen and (width <= 800px) {
- .onboardingContainer .screen[pos=split] {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) {
flex-direction: column;
min-height: 550px;
}
- .onboardingContainer .screen[pos=split]::before {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm]))::before {
width: 400px;
}
- .onboardingContainer .screen[pos=split] .section-secondary,
-.onboardingContainer .screen[pos=split] .section-main {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm]))[reverse-split] {
+ flex-direction: column;
+ }
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm]))[reverse-split] .section-secondary {
+ border-radius: 8px 8px 0 0;
+ margin: auto;
+ margin-bottom: 0;
+ }
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm]))[reverse-split] .section-secondary:dir(rtl) {
+ margin: auto;
+ margin-bottom: 0;
+ border-radius: 8px 8px 0 0;
+ }
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm]))[reverse-split] .section-main {
+ margin: auto;
+ margin-top: 0;
+ border-radius: 0 0 8px 8px;
+ }
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm]))[reverse-split] .section-main:dir(rtl) {
+ margin: auto;
+ margin-top: 0;
+ border-radius: 0 0 8px 8px;
+ }
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-secondary,
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main {
width: 400px;
}
- .onboardingContainer .screen[pos=split] .section-secondary {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-secondary {
--mr-secondary-background-position-y: top;
--mr-secondary-position: center var(--mr-secondary-background-position-y) / 75%;
border-radius: 8px 8px 0 0;
- margin: auto auto 0;
+ margin: auto;
+ margin-bottom: 0;
height: 100px;
}
- .onboardingContainer .screen[pos=split] .section-secondary .hero-image img {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-secondary .hero-image img {
margin: 6px 0;
}
- .onboardingContainer .screen[pos=split] .section-secondary .message-text {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-secondary .message-text {
margin-inline: auto;
}
- .onboardingContainer .screen[pos=split] .section-secondary h1 {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-secondary h1 {
font-size: 35px;
text-align: center;
white-space: normal;
margin-inline: auto;
margin-block: 14px 6px;
}
- .onboardingContainer .screen[pos=split] .section-secondary:dir(rtl) {
- margin: auto auto 0;
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-secondary:dir(rtl) {
+ margin: auto;
+ margin-bottom: 0;
border-radius: 8px 8px 0 0;
}
- .onboardingContainer .screen[pos=split] .section-secondary.with-secondary-section-hidden {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-secondary.with-secondary-section-hidden {
display: none;
}
- .onboardingContainer .screen[pos=split] migration-wizard::part(deck) {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) migration-wizard::part(deck) {
min-width: 330px;
margin-inline: 36px;
}
- .onboardingContainer .screen[pos=split] .section-main {
- margin: 0 auto auto;
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main {
+ margin: auto;
+ margin-top: 0;
height: 450px;
}
- .onboardingContainer .screen[pos=split] .section-main migration-wizard::part(buttons) {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main migration-wizard::part(buttons) {
flex-direction: column;
margin-inline: 46px;
}
- .onboardingContainer .screen[pos=split] .section-main[hide-secondary-section=responsive] {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main[hide-secondary-section=responsive] {
height: 550px;
margin: auto;
}
- .onboardingContainer .screen[pos=split] .section-main[hide-secondary-section=responsive] .main-content {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main[hide-secondary-section=responsive]:dir(rtl) {
+ margin: auto;
+ }
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main[hide-secondary-section=responsive] .main-content {
padding: 50px 0 0;
border-radius: 8px;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main[hide-secondary-section=responsive] .main-content:dir(rtl) {
+ border-radius: 8px;
+ }
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content {
border-radius: 0 0 8px 8px;
padding: 30px 0 0;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .main-content-inner {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .main-content-inner {
align-items: center;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .logo-container {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .logo-container {
text-align: center;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .logo-container .brand-logo {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .logo-container .brand-logo {
min-height: 25px;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .logo-container .brand-logo, .onboardingContainer .screen[pos=split] .section-main .main-content .logo-container .brand-logo:dir(rtl) {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .logo-container .brand-logo, .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .logo-container .brand-logo:dir(rtl) {
background-position: center;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .logo-container .logo-alt {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .logo-container .logo-alt {
width: inherit;
height: inherit;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .welcome-text {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .welcome-text {
align-items: center;
text-align: center;
margin-inline: 0;
padding-inline: 30px;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .welcome-text .spacer-bottom,
-.onboardingContainer .screen[pos=split] .section-main .main-content .welcome-text .spacer-top {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .welcome-text .spacer-bottom,
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .welcome-text .spacer-top {
display: none;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .action-buttons {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .action-buttons {
text-align: center;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .action-buttons .checkbox-container {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .action-buttons .checkbox-container {
display: none;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .action-buttons .secondary-cta {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .action-buttons .secondary-cta {
position: relative;
margin-block: 10px 0;
bottom: 0;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .primary,
-.onboardingContainer .screen[pos=split] .section-main .main-content .secondary {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .primary,
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .secondary {
min-width: 240px;
margin-inline: 0;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .steps {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .steps {
padding-block: 0;
margin: 0;
}
- .onboardingContainer .screen[pos=split] .section-main .main-content .steps.progress-bar {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .main-content .steps.progress-bar {
margin-inline: 0;
}
- .onboardingContainer .screen[pos=split] .section-main .additional-cta.cta-link {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .additional-cta.cta-link {
align-self: center;
}
- .onboardingContainer .screen[pos=split] .section-main .dismiss-button {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main .dismiss-button {
top: -100px;
}
- .onboardingContainer .screen[pos=split] .section-main:dir(rtl) {
- margin: 0 auto auto;
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main:dir(rtl) {
+ margin: auto;
+ margin-top: 0;
}
- .onboardingContainer .screen[pos=split] .section-main:dir(rtl) .main-content {
+ .onboardingContainer .screen[pos=split]:where(:not([no-rdm])) .section-main:dir(rtl) .main-content {
border-radius: 0 0 8px 8px;
}
+ .onboardingContainer .screen[pos=split][no-rdm] {
+ width: 800px;
+ }
}
@media only screen and (height <= 650px) and (800px <= width <= 990px) {
.onboardingContainer .screen[pos=split] .section-main .secondary-cta.top {
@@ -2273,6 +2384,9 @@ html {
.onboardingContainer .additional-cta-container[flow][flow=row] .secondary-cta {
flex-basis: 100%;
}
+.onboardingContainer .legal-paragraph {
+ transition: var(--transition);
+}
.onboardingContainer .primary,
.onboardingContainer .secondary,
.onboardingContainer .additional-cta,
@@ -2407,7 +2521,8 @@ html {
.onboardingContainer .dialog-initial .secondary,
.onboardingContainer .dialog-initial .secondary-cta,
.onboardingContainer .dialog-initial .steps,
-.onboardingContainer .dialog-initial .cta-link {
+.onboardingContainer .dialog-initial .cta-link,
+.onboardingContainer .dialog-initial .legal-paragraph {
transition-delay: 1s;
}
.onboardingContainer .screen:not(.dialog-initial) .tiles-theme-section,
@@ -2417,7 +2532,8 @@ html {
.onboardingContainer .screen:not(.dialog-initial) .primary,
.onboardingContainer .screen:not(.dialog-initial) .secondary,
.onboardingContainer .screen:not(.dialog-initial) .secondary-cta,
-.onboardingContainer .screen:not(.dialog-initial) .cta-link {
+.onboardingContainer .screen:not(.dialog-initial) .cta-link,
+.onboardingContainer .screen:not(.dialog-initial) .legal-paragraph {
transition-delay: 0.4s;
}
.onboardingContainer .screen-2 .section-main {
@@ -2473,6 +2589,7 @@ html {
.onboardingContainer.transition-in .screen .secondary,
.onboardingContainer.transition-in .screen .secondary-cta:not(.top),
.onboardingContainer.transition-in .screen .cta-link,
+.onboardingContainer.transition-in .screen .legal-paragraph,
.onboardingContainer.transition-in .screen migration-wizard {
opacity: 0;
translate: 0 calc(-1 * var(--translate));
@@ -2505,7 +2622,8 @@ html {
.onboardingContainer.transition-out .screen:not(.dialog-last) .checkbox-container:not(.multi-select-item),
.onboardingContainer.transition-out .screen:not(.dialog-last) .secondary,
.onboardingContainer.transition-out .screen:not(.dialog-last) .secondary-cta:not(.top),
-.onboardingContainer.transition-out .screen:not(.dialog-last) .cta-link {
+.onboardingContainer.transition-out .screen:not(.dialog-last) .cta-link,
+.onboardingContainer.transition-out .screen:not(.dialog-last) .legal-paragraph {
opacity: 0;
translate: 0 var(--translate);
transition-delay: 0.3s;
diff --git a/browser/components/aboutwelcome/content/onboarding.ftl b/browser/components/aboutwelcome/content/onboarding.ftl
index 9a894baf88..19690bb52f 100644
--- a/browser/components/aboutwelcome/content/onboarding.ftl
+++ b/browser/components/aboutwelcome/content/onboarding.ftl
@@ -11,3 +11,16 @@
amo-screen-title = Personalize your { -brand-short-name }
amo-screen-subtitle = Add-ons are tiny apps that run in { -brand-short-name } and level up the way you browse — from ultimate privacy and safety to changing how { -brand-short-name } looks and behaves.
amo-screen-primary-cta = Explore staff-recommended add-ons
+
+## Add-ons Picker screen strings
+
+amo-picker-title = Customize your { -brand-short-name }
+amo-picker-subtitle = Extensions are like apps for your browser, and they let you protect passwords, download videos, find deals, block annoying ads, change how your browser looks, and much more.
+amo-picker-install-button-label = Add to { -brand-short-name }
+amo-picker-install-complete-label = Installed
+amo-picker-collection-link = Explore more add-ons
+
+# Button label for the experimental return to about:welcome toolbar button
+browser-aboutwelcome-button =
+ .label = Finish setup
+ .tooltiptext = Finish setting up { -brand-short-name }.
diff --git a/browser/components/aboutwelcome/karma.mc.config.js b/browser/components/aboutwelcome/karma.mc.config.js
index b6ba043ad4..4587ed9883 100644
--- a/browser/components/aboutwelcome/karma.mc.config.js
+++ b/browser/components/aboutwelcome/karma.mc.config.js
@@ -75,19 +75,19 @@ module.exports = function (config) {
statements: 80,
lines: 80,
functions: 80,
- branches: 66,
+ branches: 80,
overrides: {
- "modules/*.sys.mjs": {
- statements: 0,
- lines: 0,
- functions: 0,
- branches: 0,
+ "modules/AboutWelcomeDefaults.sys.mjs": {
+ statements: 48.15,
+ lines: 48.75,
+ functions: 61.54,
+ branches: 37.04,
},
"content-src/lib/aboutwelcome-utils.mjs": {
- statements: 50,
- lines: 50,
- functions: 50,
- branches: 0,
+ statements: 73.68,
+ lines: 73.68,
+ functions: 71.43,
+ branches: 66.67,
},
"content-src/components/LanguageSwitcher.jsx": {
// This file is covered by the mochitest: browser_aboutwelcome_multistage_languageSwitcher.js
@@ -124,9 +124,11 @@ module.exports = function (config) {
statements: 77.42,
lines: 77.42,
functions: 75,
+ branches: 73.08,
},
"content-src/components/CTAParagraph.jsx": {
functions: 50,
+ branches: 75,
},
"content-src/components/HeroImage.jsx": {
branches: 62.5,
@@ -139,6 +141,7 @@ module.exports = function (config) {
statements: 76.09,
lines: 75,
functions: 76.92,
+ branches: 74.07,
},
"content-src/components/MobileDownloads.jsx": {
branches: 56.25,
@@ -152,6 +155,12 @@ module.exports = function (config) {
functions: 73.17,
branches: 61.74,
},
+ "content-src/components/AdditionalCTA.jsx": {
+ branches: 75,
+ },
+ "content-src/components/MultiStageProtonScreen.jsx": {
+ branches: 79.07,
+ },
},
},
},
@@ -161,12 +170,6 @@ module.exports = function (config) {
webpack: {
mode: "none",
devtool: "inline-source-map",
- // This loader allows us to override required files in tests
- resolveLoader: {
- alias: {
- inject: path.join(__dirname, "../newtab/loaders/inject-loader"),
- },
- },
// This resolve config allows us to import with paths relative to the root directory
resolve: {
extensions: [".js", ".jsx"],
@@ -175,10 +178,6 @@ module.exports = function (config) {
"node_modules",
PATHS.newtabResolveDirectory,
],
- fallback: {
- stream: require.resolve("stream-browserify"),
- buffer: require.resolve("buffer"),
- },
alias: {
newtab: path.join(__dirname, "../newtab"),
asrouter: path.join(__dirname, "../asrouter"),
diff --git a/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs b/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs
new file mode 100644
index 0000000000..b86bdf3ed2
--- /dev/null
+++ b/browser/components/aboutwelcome/modules/AWToolbarUtils.sys.mjs
@@ -0,0 +1,79 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
+
+const lazy = {};
+
+ChromeUtils.defineESModuleGetters(lazy, {
+ CustomizableUI: "resource:///modules/CustomizableUI.sys.mjs",
+});
+
+export const AWToolbarButton = {
+ async maybeAddSetupButton() {
+ // First check if we've already completed onboarding, in which
+ // case we should remove the button.
+ if (AWToolbarButton.didSeeFinalScreen) {
+ AWToolbarButton.removeSetupButtonIfOnboardingComplete();
+ return;
+ }
+ // Otherwise, check if this is a new profile where we need to add it.
+ if (AWToolbarButton.hasToolbarButtonEnabled) {
+ lazy.CustomizableUI.createWidget({
+ id: "aboutwelcome-button",
+ l10nId: "browser-aboutwelcome-button",
+ defaultArea: lazy.CustomizableUI.AREA_BOOKMARKS,
+ type: "button",
+ onCreated(aNode) {
+ aNode.className = "bookmark-item chromeclass-toolbar-additional";
+ },
+ onClick(aEvent) {
+ AWToolbarButton.openWelcome(aEvent.view);
+ },
+ });
+ }
+ },
+
+ removeSetupButtonIfOnboardingComplete() {
+ //Look for completion of Onboarding (we're using an AWFinish()
+ //call from about:welcome as a proxy here)
+ if (
+ AWToolbarButton.didSeeFinalScreen ||
+ !AWToolbarButton.hasToolbarButtonEnabled
+ ) {
+ lazy.CustomizableUI.destroyWidget("aboutwelcome-button");
+ }
+ },
+
+ openWelcome(win) {
+ Services.prefs.setStringPref(
+ "browser.aboutwelcome.entrypoint",
+ "toolbarButton"
+ );
+ let viewURL = "about:welcome";
+ win.gBrowser.addTrustedTab(viewURL, {
+ inBackground: false,
+ });
+ },
+};
+
+XPCOMUtils.defineLazyPreferenceGetter(
+ AWToolbarButton,
+ "didSeeFinalScreen",
+ "browser.aboutwelcome.didSeeFinalScreen",
+ false,
+ () => {
+ AWToolbarButton.removeSetupButtonIfOnboardingComplete();
+ }
+);
+
+XPCOMUtils.defineLazyPreferenceGetter(
+ AWToolbarButton,
+ "hasToolbarButtonEnabled",
+ "browser.aboutwelcome.toolbarButtonEnabled",
+ false,
+ () => {
+ AWToolbarButton.removeSetupButtonIfOnboardingComplete();
+ }
+);
diff --git a/browser/components/aboutwelcome/moz.build b/browser/components/aboutwelcome/moz.build
index c6e37dd2a7..97c5447749 100644
--- a/browser/components/aboutwelcome/moz.build
+++ b/browser/components/aboutwelcome/moz.build
@@ -22,4 +22,9 @@ EXTRA_JS_MODULES.aboutwelcome += [
"modules/AboutWelcomeDefaults.sys.mjs",
"modules/AboutWelcomeTelemetry.sys.mjs",
"modules/AWScreenUtils.sys.mjs",
+ "modules/AWToolbarUtils.sys.mjs",
+]
+
+XPCSHELL_TESTS_MANIFESTS += [
+ "tests/xpcshell/xpcshell.toml",
]
diff --git a/browser/components/aboutwelcome/package-lock.json b/browser/components/aboutwelcome/package-lock.json
index dcfdb4f2b7..50ec64f440 100644
--- a/browser/components/aboutwelcome/package-lock.json
+++ b/browser/components/aboutwelcome/package-lock.json
@@ -1,7 +1,7 @@
{
"name": "about-welcome",
"version": "1.0.0",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
@@ -9,8 +9,8 @@
"version": "1.0.0",
"license": "MPL-2.0",
"dependencies": {
- "@fluent/bundle": "0.17.1",
- "@fluent/react": "0.15.0",
+ "@fluent/bundle": "0.18.0",
+ "@fluent/react": "0.15.2",
"react": "16.13.1",
"react-dom": "16.13.1",
"react-redux": "7.2.6",
@@ -18,14 +18,13 @@
"redux": "4.1.2"
},
"devDependencies": {
- "@babel/preset-react": "7.16.0",
+ "@babel/preset-react": "7.23.3",
"@jsdevtools/coverage-istanbul-loader": "^3.0.5",
- "babel-loader": "8.2.3",
- "babel-plugin-jsm-to-esmodules": "0.6.0",
+ "babel-loader": "9.1.3",
"chai": "4.3.4",
"enzyme": "3.11.0",
- "enzyme-adapter-react-16": "1.15.6",
- "karma": "6.3.8",
+ "enzyme-adapter-react-16": "1.15.8",
+ "karma": "6.4.2",
"karma-chai": "0.1.0",
"karma-coverage-istanbul-reporter": "3.0.3",
"karma-firefox-launcher": "2.1.2",
@@ -33,21 +32,20 @@
"karma-mocha": "2.0.1",
"karma-mocha-reporter": "2.2.5",
"karma-sinon": "1.0.5",
- "karma-sourcemap-loader": "0.3.8",
- "karma-webpack": "5.0.0",
+ "karma-sourcemap-loader": "0.4.0",
+ "karma-webpack": "5.0.1",
"npm-run-all": "4.1.5",
- "sass": "1.43.4",
- "sinon": "12.0.1",
- "stream-browserify": "3.0.0",
- "webpack": "5.56.0",
- "webpack-cli": "4.9.1",
+ "sass": "1.71.1",
+ "sinon": "17.0.1",
+ "webpack": "5.90.3",
+ "webpack-cli": "5.1.4",
"yamscripts": "0.1.0"
},
"engines": {
"//": "when changing node versions, also edit .nvmrc",
- "firefox": ">=45.0 <=*",
- "node": "16.19.*",
- "npm": "8.19.3"
+ "firefox": ">=122.0 <=*",
+ "node": "18.19.*",
+ "npm": "10.2.*"
}
},
"node_modules/@ampproject/remapping": {
@@ -86,9 +84,9 @@
}
},
"node_modules/@babel/core": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz",
- "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz",
+ "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
@@ -96,11 +94,11 @@
"@babel/generator": "^7.23.6",
"@babel/helper-compilation-targets": "^7.23.6",
"@babel/helper-module-transforms": "^7.23.3",
- "@babel/helpers": "^7.23.7",
- "@babel/parser": "^7.23.6",
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.7",
- "@babel/types": "^7.23.6",
+ "@babel/helpers": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@babel/template": "^7.23.9",
+ "@babel/traverse": "^7.23.9",
+ "@babel/types": "^7.23.9",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -284,14 +282,14 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz",
- "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz",
+ "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.7",
- "@babel/types": "^7.23.6"
+ "@babel/template": "^7.23.9",
+ "@babel/traverse": "^7.23.9",
+ "@babel/types": "^7.23.9"
},
"engines": {
"node": ">=6.9.0"
@@ -312,9 +310,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
- "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz",
+ "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -404,17 +402,17 @@
}
},
"node_modules/@babel/preset-react": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz",
- "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz",
+ "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-react-display-name": "^7.16.0",
- "@babel/plugin-transform-react-jsx": "^7.16.0",
- "@babel/plugin-transform-react-jsx-development": "^7.16.0",
- "@babel/plugin-transform-react-pure-annotations": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
+ "@babel/plugin-transform-react-display-name": "^7.23.3",
+ "@babel/plugin-transform-react-jsx": "^7.22.15",
+ "@babel/plugin-transform-react-jsx-development": "^7.22.5",
+ "@babel/plugin-transform-react-pure-annotations": "^7.23.3"
},
"engines": {
"node": ">=6.9.0"
@@ -424,9 +422,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.7.tgz",
- "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz",
+ "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -435,23 +433,23 @@
}
},
"node_modules/@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz",
+ "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
+ "@babel/code-frame": "^7.23.5",
+ "@babel/parser": "^7.23.9",
+ "@babel/types": "^7.23.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
- "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz",
+ "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.23.5",
@@ -460,8 +458,8 @@
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.6",
- "@babel/types": "^7.23.6",
+ "@babel/parser": "^7.23.9",
+ "@babel/types": "^7.23.9",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -470,9 +468,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
- "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz",
+ "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==",
"dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.23.4",
@@ -483,6 +481,15 @@
"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",
@@ -493,18 +500,18 @@
}
},
"node_modules/@fluent/bundle": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/@fluent/bundle/-/bundle-0.17.1.tgz",
- "integrity": "sha512-CRFNT9QcSFAeFDneTF59eyv3JXFGhIIN4boUO2y22YmsuuKLyDk+N1I/NQUYz9Ab63e6V7T6vItoZIG/2oOOuw==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/@fluent/bundle/-/bundle-0.18.0.tgz",
+ "integrity": "sha512-8Wfwu9q8F9g2FNnv82g6Ch/E1AW1wwljsUOolH5NEtdJdv0sZTuWvfCM7c3teB9dzNaJA8rn4khpidpozHWYEA==",
"engines": {
- "node": ">=12.0.0",
+ "node": ">=14.0.0",
"npm": ">=7.0.0"
}
},
"node_modules/@fluent/react": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/@fluent/react/-/react-0.15.0.tgz",
- "integrity": "sha512-qUMfaHman+UciOELQc5hnFAv0VerUR6+9gEBCRk9RR66XS13syt91ZElNOTHWe2Ofv70cxAGaJ5Yff4MRPg5Ow==",
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/@fluent/react/-/react-0.15.2.tgz",
+ "integrity": "sha512-M2klqXTUJTD8o2VDm6vEXApE/pSc16YtB7DSZ/Q8cPYF63FgDkvquVLHjzzG1PvrK9JlKJKPzl3wJ7hTAqSK4w==",
"dependencies": {
"@fluent/sequence": "^0.8.0",
"cached-iterable": "^0.3.0"
@@ -514,7 +521,7 @@
"npm": ">=7.0.0"
},
"peerDependencies": {
- "@fluent/bundle": ">=0.16.0 <0.18.0",
+ "@fluent/bundle": ">=0.16.0",
"react": ">=16.8.0"
}
},
@@ -540,9 +547,9 @@
}
},
"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==",
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz",
+ "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
@@ -554,9 +561,9 @@
}
},
"node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
@@ -588,9 +595,9 @@
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.20",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
- "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+ "version": "0.3.23",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz",
+ "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
@@ -617,34 +624,43 @@
"dev": true
},
"node_modules/@sinonjs/commons": {
- "version": "1.8.6",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
- "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
"dependencies": {
"type-detect": "4.0.8"
}
},
"node_modules/@sinonjs/fake-timers": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
- "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
+ "version": "11.2.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz",
+ "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==",
"dev": true,
"dependencies": {
- "@sinonjs/commons": "^1.7.0"
+ "@sinonjs/commons": "^3.0.0"
}
},
"node_modules/@sinonjs/samsam": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.3.tgz",
- "integrity": "sha512-nhOb2dWPeb1sd3IQXL/dVPnKHDOAFfvichtBf4xV00/rU1QbPCQqKMbvIheIjqwVjh7qIgf2AHTHi391yMOMpQ==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz",
+ "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==",
"dev": true,
"dependencies": {
- "@sinonjs/commons": "^1.6.0",
+ "@sinonjs/commons": "^2.0.0",
"lodash.get": "^4.4.2",
"type-detect": "^4.0.8"
}
},
+ "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
+ "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
"node_modules/@sinonjs/text-encoding": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
@@ -673,9 +689,9 @@
}
},
"node_modules/@types/eslint": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.1.tgz",
- "integrity": "sha512-18PLWRzhy9glDQp3+wOgfLYRWlhgX0azxgJ63rdpoUHyrC9z0f5CkFburjQx4uD7ZCruw85ZtMt6K+L+R8fLJQ==",
+ "version": "8.56.3",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.3.tgz",
+ "integrity": "sha512-PvSf1wfv2wJpVIFUMSb+i4PvqNYkB9Rkp9ZDO3oaWzq4SKhsQk4mrMBr3ZH06I0hKrVGLBacmgl8JM4WVjb9dg==",
"dev": true,
"dependencies": {
"@types/estree": "*",
@@ -693,9 +709,9 @@
}
},
"node_modules/@types/estree": {
- "version": "0.0.50",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
- "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true
},
"node_modules/@types/hoist-non-react-statics": {
@@ -714,9 +730,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.10.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz",
- "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==",
+ "version": "20.11.20",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz",
+ "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -728,9 +744,9 @@
"integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng=="
},
"node_modules/@types/react": {
- "version": "18.2.46",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.46.tgz",
- "integrity": "sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==",
+ "version": "18.2.58",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.58.tgz",
+ "integrity": "sha512-TaGvMNhxvG2Q0K0aYxiKfNDS5m5ZsoIBBbtfUorxdH4NGSXIlYvZxLJI+9Dd3KjeB3780bciLyAb7ylO8pLhPw==",
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@@ -754,180 +770,188 @@
"integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A=="
},
"node_modules/@webassemblyjs/ast": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
- "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
+ "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.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+ "@webassemblyjs/helper-numbers": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
}
},
"node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
- "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
- "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
- "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
- "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
+ "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.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
- "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
- "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
+ "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.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1"
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
- "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
- "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
- "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
- "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
+ "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.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/helper-wasm-section": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-opt": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "@webassemblyjs/wast-printer": "1.11.1"
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
- "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
+ "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.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
- "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
+ "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.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1"
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
- "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
+ "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.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
- "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
+ "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.1",
+ "@webassemblyjs/ast": "1.11.6",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webpack-cli/configtest": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz",
- "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
+ "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
"dev": true,
+ "engines": {
+ "node": ">=14.15.0"
+ },
"peerDependencies": {
- "webpack": "4.x.x || 5.x.x",
- "webpack-cli": "4.x.x"
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
}
},
"node_modules/@webpack-cli/info": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz",
- "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
+ "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
"dev": true,
- "dependencies": {
- "envinfo": "^7.7.3"
+ "engines": {
+ "node": ">=14.15.0"
},
"peerDependencies": {
- "webpack-cli": "4.x.x"
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
}
},
"node_modules/@webpack-cli/serve": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz",
- "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
+ "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
"dev": true,
+ "engines": {
+ "node": ">=14.15.0"
+ },
"peerDependencies": {
- "webpack-cli": "4.x.x"
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
},
"peerDependenciesMeta": {
"webpack-dev-server": {
@@ -1020,6 +1044,45 @@
"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-formats/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/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/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
@@ -1073,13 +1136,16 @@
}
},
"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==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "is-array-buffer": "^3.0.1"
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1138,17 +1204,18 @@
}
},
"node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
- "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
"dev": true,
"dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
- "is-array-buffer": "^3.0.2",
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
"is-shared-array-buffer": "^1.0.2"
},
"engines": {
@@ -1168,10 +1235,13 @@
}
},
"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==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -1180,56 +1250,75 @@
}
},
"node_modules/babel-loader": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
- "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==",
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
+ "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
"dev": true,
"dependencies": {
- "find-cache-dir": "^3.3.1",
- "loader-utils": "^1.4.0",
- "make-dir": "^3.1.0",
- "schema-utils": "^2.6.5"
+ "find-cache-dir": "^4.0.0",
+ "schema-utils": "^4.0.0"
},
"engines": {
- "node": ">= 8.9"
+ "node": ">= 14.15.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0",
- "webpack": ">=2"
+ "@babel/core": "^7.12.0",
+ "webpack": ">=5"
}
},
- "node_modules/babel-loader/node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "node_modules/babel-loader/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": {
- "minimist": "^1.2.0"
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
},
- "bin": {
- "json5": "lib/cli.js"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/babel-loader/node_modules/loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+ "node_modules/babel-loader/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": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
+ "fast-deep-equal": "^3.1.3"
},
- "engines": {
- "node": ">=4.0.0"
+ "peerDependencies": {
+ "ajv": "^8.8.2"
}
},
- "node_modules/babel-plugin-jsm-to-esmodules": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jsm-to-esmodules/-/babel-plugin-jsm-to-esmodules-0.6.0.tgz",
- "integrity": "sha512-463Yuq2sLkjoGHl5vPYUQQONnDjxnmxZuhsR1swL5N76hDFGyYZAVd6HoS4E02jBF8bORpS4aFmdr1XjEZ0buQ==",
+ "node_modules/babel-loader/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/babel-loader/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/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -1331,9 +1420,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.22.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
- "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
+ "version": "4.23.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
+ "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
"dev": true,
"funding": [
{
@@ -1350,8 +1439,8 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001565",
- "electron-to-chromium": "^1.4.601",
+ "caniuse-lite": "^1.0.30001587",
+ "electron-to-chromium": "^1.4.668",
"node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
},
@@ -1386,23 +1475,28 @@
}
},
"node_modules/call-bind": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
- "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dev": true,
"dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.1",
- "set-function-length": "^1.1.1"
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001574",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz",
- "integrity": "sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg==",
+ "version": "1.0.30001589",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz",
+ "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==",
"dev": true,
"funding": [
{
@@ -1501,16 +1595,10 @@
}
},
"node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -1523,6 +1611,9 @@
"engines": {
"node": ">= 8.10.0"
},
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
"optionalDependencies": {
"fsevents": "~2.3.2"
}
@@ -1618,10 +1709,10 @@
"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==",
+ "node_modules/common-path-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
+ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
"dev": true
},
"node_modules/concat-map": {
@@ -1812,17 +1903,20 @@
}
},
"node_modules/define-data-property": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
- "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.1",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/define-properties": {
@@ -1868,9 +1962,9 @@
"dev": true
},
"node_modules/diff": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
- "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
"dev": true,
"engines": {
"node": ">=0.3.1"
@@ -1965,9 +2059,9 @@
"dev": true
},
"node_modules/electron-to-chromium": {
- "version": "1.4.620",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.620.tgz",
- "integrity": "sha512-a2fcSHOHrqBJsPNXtf6ZCEZpXrFCcbK1FBxfX3txoqWzNgtEDG1f3M59M98iwxhRW4iMKESnSjbJ310/rkrp0g==",
+ "version": "1.4.681",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz",
+ "integrity": "sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg==",
"dev": true
},
"node_modules/emoji-regex": {
@@ -2016,9 +2110,9 @@
}
},
"node_modules/engine.io-parser": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz",
- "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz",
+ "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==",
"dev": true,
"engines": {
"node": ">=10.0.0"
@@ -2056,9 +2150,9 @@
}
},
"node_modules/envinfo": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz",
- "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==",
+ "version": "7.11.1",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz",
+ "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==",
"dev": true,
"bin": {
"envinfo": "dist/cli.js"
@@ -2101,20 +2195,20 @@
}
},
"node_modules/enzyme-adapter-react-16": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz",
- "integrity": "sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==",
+ "version": "1.15.8",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.8.tgz",
+ "integrity": "sha512-uYGC31eGZBp5nGsr4nKhZKvxGQjyHGjS06BJsUlWgE29/hvnpgCsT1BJvnnyny7N3GIIVyxZ4O9GChr6hy2WQA==",
"dev": true,
"dependencies": {
- "enzyme-adapter-utils": "^1.14.0",
- "enzyme-shallow-equal": "^1.0.4",
- "has": "^1.0.3",
- "object.assign": "^4.1.2",
- "object.values": "^1.1.2",
- "prop-types": "^15.7.2",
+ "enzyme-adapter-utils": "^1.14.2",
+ "enzyme-shallow-equal": "^1.0.7",
+ "hasown": "^2.0.0",
+ "object.assign": "^4.1.5",
+ "object.values": "^1.1.7",
+ "prop-types": "^15.8.1",
"react-is": "^16.13.1",
"react-test-renderer": "^16.0.0-0",
- "semver": "^5.7.0"
+ "semver": "^5.7.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -2150,18 +2244,18 @@
}
},
"node_modules/enzyme-adapter-utils": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz",
- "integrity": "sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ==",
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.2.tgz",
+ "integrity": "sha512-1ZC++RlsYRaiOWE5NRaF5OgsMt7F5rn/VuaJIgc7eW/fmgg8eS1/Ut7EugSPPi7VMdWMLcymRnMF+mJUJ4B8KA==",
"dev": true,
"dependencies": {
"airbnb-prop-types": "^2.16.0",
- "function.prototype.name": "^1.1.5",
- "has": "^1.0.3",
- "object.assign": "^4.1.4",
- "object.fromentries": "^2.0.5",
+ "function.prototype.name": "^1.1.6",
+ "hasown": "^2.0.0",
+ "object.assign": "^4.1.5",
+ "object.fromentries": "^2.0.7",
"prop-types": "^15.8.1",
- "semver": "^5.7.1"
+ "semver": "^6.3.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -2170,22 +2264,13 @@
"react": "0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0"
}
},
- "node_modules/enzyme-adapter-utils/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
"node_modules/enzyme-shallow-equal": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz",
- "integrity": "sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz",
+ "integrity": "sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg==",
"dev": true,
"dependencies": {
- "has": "^1.0.3",
+ "hasown": "^2.0.0",
"object-is": "^1.1.5"
},
"funding": {
@@ -2202,50 +2287,52 @@
}
},
"node_modules/es-abstract": {
- "version": "1.22.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
- "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
- "dev": true,
- "dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.2",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.5",
- "es-set-tostringtag": "^2.0.1",
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz",
+ "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.6",
+ "call-bind": "^1.0.7",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.2",
"es-to-primitive": "^1.2.1",
"function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.2",
- "get-symbol-description": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
"globalthis": "^1.0.3",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
+ "has-property-descriptors": "^1.0.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
- "hasown": "^2.0.0",
- "internal-slot": "^1.0.5",
- "is-array-buffer": "^3.0.2",
+ "hasown": "^2.0.1",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
"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.12",
+ "is-typed-array": "^1.1.13",
"is-weakref": "^1.0.2",
"object-inspect": "^1.13.1",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.1",
- "safe-array-concat": "^1.0.1",
- "safe-regex-test": "^1.0.0",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.0",
+ "safe-regex-test": "^1.0.3",
"string.prototype.trim": "^1.2.8",
"string.prototype.trimend": "^1.0.7",
"string.prototype.trimstart": "^1.0.7",
- "typed-array-buffer": "^1.0.0",
+ "typed-array-buffer": "^1.0.1",
"typed-array-byte-length": "^1.0.0",
"typed-array-byte-offset": "^1.0.0",
"typed-array-length": "^1.0.4",
"unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.13"
+ "which-typed-array": "^1.1.14"
},
"engines": {
"node": ">= 0.4"
@@ -2260,21 +2347,42 @@
"integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
"dev": true
},
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es-module-lexer": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz",
+ "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==",
"dev": true
},
"node_modules/es-set-tostringtag": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
- "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2",
- "has-tostringtag": "^1.0.0",
- "hasown": "^2.0.0"
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -2307,9 +2415,9 @@
}
},
"node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
"dev": true,
"engines": {
"node": ">=6"
@@ -2388,73 +2496,6 @@
"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/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/execa/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/execa/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/execa/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/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -2540,33 +2581,35 @@
}
},
"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==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
+ "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
"dev": true,
"dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
+ "common-path-prefix": "^3.0.0",
+ "pkg-dir": "^7.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=14.16"
},
"funding": {
- "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"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==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+ "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
"dev": true,
"dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
+ "locate-path": "^7.1.0",
+ "path-exists": "^5.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/flat": {
@@ -2579,15 +2622,15 @@
}
},
"node_modules/flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
"dev": true
},
"node_modules/follow-redirects": {
- "version": "1.15.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
- "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
+ "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
"dev": true,
"funding": [
{
@@ -2711,40 +2754,33 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
- "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"dev": true,
"dependencies": {
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
"hasown": "^2.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "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"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
},
"engines": {
"node": ">= 0.4"
@@ -2861,21 +2897,21 @@
}
},
"node_modules/has-property-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
- "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2"
+ "es-define-property": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"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==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -2897,12 +2933,12 @@
}
},
"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==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"dev": true,
"dependencies": {
- "has-symbols": "^1.0.2"
+ "has-symbols": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
@@ -2912,9 +2948,9 @@
}
},
"node_modules/hasown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
- "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
+ "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.2"
@@ -3014,15 +3050,6 @@
"node": ">=8.0.0"
}
},
- "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/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -3035,6 +3062,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/immutable": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
+ "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
+ "dev": true
+ },
"node_modules/import-local": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
@@ -3054,6 +3087,79 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/import-local/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/import-local/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/import-local/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/import-local/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/import-local/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/import-local/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/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -3071,12 +3177,12 @@
"dev": true
},
"node_modules/internal-slot": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
- "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2",
+ "es-errors": "^1.3.0",
"hasown": "^2.0.0",
"side-channel": "^1.0.4"
},
@@ -3085,23 +3191,25 @@
}
},
"node_modules/interpret": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
- "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
+ "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
"dev": true,
"engines": {
- "node": ">= 0.10"
+ "node": ">=10.13.0"
}
},
"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==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "is-typed-array": "^1.1.10"
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -3238,9 +3346,9 @@
}
},
"node_modules/is-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -3302,27 +3410,18 @@
}
},
"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==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bind": "^1.0.7"
},
- "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"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-string": {
@@ -3362,12 +3461,12 @@
}
},
"node_modules/is-typed-array": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
- "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
"dev": true,
"dependencies": {
- "which-typed-array": "^1.1.11"
+ "which-typed-array": "^1.1.14"
},
"engines": {
"node": ">= 0.4"
@@ -3480,48 +3579,6 @@
"node": ">=8"
}
},
- "node_modules/istanbul-lib-report/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/istanbul-lib-report/node_modules/make-dir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
- "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
- "dev": true,
- "dependencies": {
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/istanbul-lib-report/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"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",
@@ -3534,12 +3591,6 @@
"node": ">=8"
}
},
- "node_modules/istanbul-lib-report/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/istanbul-lib-source-maps": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
@@ -3609,9 +3660,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
- "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+ "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
"dev": true,
"dependencies": {
"html-escaper": "^2.0.0",
@@ -3682,6 +3733,12 @@
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true
},
+ "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": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -3710,21 +3767,21 @@
}
},
"node_modules/just-extend": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz",
+ "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==",
"dev": true
},
"node_modules/karma": {
- "version": "6.3.8",
- "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.8.tgz",
- "integrity": "sha512-10wBBU9S0lBHhbCNfmmbWQaY5C1bXlKdnvzN2QKThujCI/+DKaezrI08l6bfTlpJ92VsEboq3zYKpXwK6DOi3A==",
+ "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",
- "colors": "^1.4.0",
"connect": "^3.7.0",
"di": "^0.0.1",
"dom-serialize": "^2.2.1",
@@ -3733,13 +3790,14 @@
"http-proxy": "^1.18.1",
"isbinaryfile": "^4.0.8",
"lodash": "^4.17.21",
- "log4js": "^6.3.0",
+ "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.2.0",
+ "socket.io": "^4.4.1",
"source-map": "^0.6.1",
"tmp": "^0.2.1",
"ua-parser-js": "^0.7.30",
@@ -3834,31 +3892,55 @@
}
},
"node_modules/karma-sourcemap-loader": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz",
- "integrity": "sha512-zorxyAakYZuBcHRJE+vbrK2o2JXLFWK8VVjiT/6P+ltLBUGUvqTEkUiQ119MGdOrK7mrmxXHZF1/pfT6GgIZ6g==",
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.4.0.tgz",
+ "integrity": "sha512-xCRL3/pmhAYF3I6qOrcn0uhbQevitc2DERMPH82FMnG+4WReoGcGFZb1pURf2a5apyrOHRdvD+O6K7NljqKHyA==",
"dev": true,
"dependencies": {
- "graceful-fs": "^4.1.2"
+ "graceful-fs": "^4.2.10"
}
},
"node_modules/karma-webpack": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-5.0.0.tgz",
- "integrity": "sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-5.0.1.tgz",
+ "integrity": "sha512-oo38O+P3W2mSPCSUrQdySSPv1LvPpXP+f+bBimNomS5sW+1V4SuhCuW8TfJzV+rDv921w2fDSDw0xJbPe6U+kQ==",
"dev": true,
"dependencies": {
"glob": "^7.1.3",
- "minimatch": "^3.0.4",
+ "minimatch": "^9.0.3",
"webpack-merge": "^4.1.5"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 18"
},
"peerDependencies": {
"webpack": "^5.0.0"
}
},
+ "node_modules/karma-webpack/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/karma-webpack/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -3907,15 +3989,18 @@
}
},
"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==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
"dev": true,
"dependencies": {
- "p-locate": "^4.1.0"
+ "p-locate": "^6.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/lodash": {
@@ -3997,20 +4082,53 @@
}
},
"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==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"dependencies": {
- "semver": "^6.0.0"
+ "semver": "^7.5.3"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/make-dir/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/make-dir/node_modules/semver": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-dir/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/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -4077,15 +4195,6 @@
"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/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -4107,6 +4216,18 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "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/moo": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz",
@@ -4163,43 +4284,16 @@
"dev": true
},
"node_modules/nise": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.5.tgz",
- "integrity": "sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^2.0.0",
- "@sinonjs/fake-timers": "^10.0.2",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "path-to-regexp": "^1.7.0"
- }
- },
- "node_modules/nise/node_modules/@sinonjs/commons": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
- "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
- "dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/nise/node_modules/@sinonjs/fake-timers": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
- "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^3.0.0"
- }
- },
- "node_modules/nise/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
- "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
+ "version": "5.1.9",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz",
+ "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==",
"dev": true,
"dependencies": {
- "type-detect": "4.0.8"
+ "@sinonjs/commons": "^3.0.0",
+ "@sinonjs/fake-timers": "^11.2.2",
+ "@sinonjs/text-encoding": "^0.7.2",
+ "just-extend": "^6.2.0",
+ "path-to-regexp": "^6.2.1"
}
},
"node_modules/node-releases": {
@@ -4263,27 +4357,6 @@
"node": ">= 4"
}
},
- "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/npm-run-path/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/nth-check": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -4425,48 +4498,36 @@
"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==",
+ "node_modules/p-limit": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+ "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
"dev": true,
"dependencies": {
- "mimic-fn": "^2.1.0"
+ "yocto-queue": "^1.0.0"
},
"engines": {
- "node": ">=6"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "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==",
+ "node_modules/p-locate": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+ "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
"dev": true,
"dependencies": {
- "p-try": "^2.0.0"
+ "p-limit": "^4.0.0"
},
"engines": {
- "node": ">=6"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"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-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -4524,12 +4585,12 @@
}
},
"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==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
"dev": true,
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
"node_modules/path-is-absolute": {
@@ -4557,18 +4618,9 @@
"dev": true
},
"node_modules/path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "dependencies": {
- "isarray": "0.0.1"
- }
- },
- "node_modules/path-to-regexp/node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
+ "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==",
"dev": true
},
"node_modules/path-type": {
@@ -4638,15 +4690,27 @@
}
},
"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==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+ "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
"dev": true,
"dependencies": {
- "find-up": "^4.0.0"
+ "find-up": "^6.3.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/prop-types": {
@@ -4854,20 +4918,6 @@
"node": ">=4"
}
},
- "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",
@@ -4881,15 +4931,15 @@
}
},
"node_modules/rechoir": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
- "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
+ "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
"dev": true,
"dependencies": {
- "resolve": "^1.9.0"
+ "resolve": "^1.20.0"
},
"engines": {
- "node": ">= 0.10"
+ "node": ">= 10.13.0"
}
},
"node_modules/redux": {
@@ -4912,14 +4962,15 @@
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
},
"node_modules/regexp.prototype.flags": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
- "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "set-function-name": "^2.0.0"
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -4937,6 +4988,15 @@
"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",
@@ -4991,9 +5051,9 @@
}
},
"node_modules/rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz",
+ "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==",
"dev": true
},
"node_modules/rimraf": {
@@ -5022,13 +5082,13 @@
}
},
"node_modules/safe-array-concat": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
- "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz",
+ "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
+ "call-bind": "^1.0.5",
+ "get-intrinsic": "^1.2.2",
"has-symbols": "^1.0.3",
"isarray": "^2.0.5"
},
@@ -5060,15 +5120,18 @@
]
},
"node_modules/safe-regex-test": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
- "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
"is-regex": "^1.1.4"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -5080,18 +5143,20 @@
"dev": true
},
"node_modules/sass": {
- "version": "1.43.4",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.4.tgz",
- "integrity": "sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==",
+ "version": "1.71.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz",
+ "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==",
"dev": true,
"dependencies": {
- "chokidar": ">=3.0.0 <4.0.0"
+ "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": ">=8.9.0"
+ "node": ">=14.0.0"
}
},
"node_modules/scheduler": {
@@ -5131,38 +5196,41 @@
}
},
"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==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"dependencies": {
"randombytes": "^2.1.0"
}
},
"node_modules/set-function-length": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
- "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
+ "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
"dev": true,
"dependencies": {
- "define-data-property": "^1.1.1",
- "get-intrinsic": "^1.2.1",
+ "define-data-property": "^1.1.2",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.3",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
+ "has-property-descriptors": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/set-function-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
- "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
"dev": true,
"dependencies": {
- "define-data-property": "^1.0.1",
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
"functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.0"
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -5217,37 +5285,34 @@
}
},
"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==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz",
+ "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"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/sinon": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz",
- "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==",
- "deprecated": "16.1.1",
+ "version": "17.0.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz",
+ "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==",
"dev": true,
"dependencies": {
- "@sinonjs/commons": "^1.8.3",
- "@sinonjs/fake-timers": "^8.1.0",
- "@sinonjs/samsam": "^6.0.2",
- "diff": "^5.0.0",
- "nise": "^5.1.0",
+ "@sinonjs/commons": "^3.0.0",
+ "@sinonjs/fake-timers": "^11.2.2",
+ "@sinonjs/samsam": "^8.0.0",
+ "diff": "^5.1.0",
+ "nise": "^5.1.5",
"supports-color": "^7.2.0"
},
"funding": {
@@ -5277,9 +5342,9 @@
}
},
"node_modules/socket.io": {
- "version": "4.7.3",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.3.tgz",
- "integrity": "sha512-SE+UIQXBQE+GPG2oszWMlsEmWtHVqw/h1VrYJGK5/MC7CH5p58N448HwIrtREcvR4jfdOJAY4ieQfxMr55qbbw==",
+ "version": "4.7.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.4.tgz",
+ "integrity": "sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==",
"dev": true,
"dependencies": {
"accepts": "~1.3.4",
@@ -5295,11 +5360,12 @@
}
},
"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==",
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz",
+ "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==",
"dev": true,
"dependencies": {
+ "debug": "~4.3.4",
"ws": "~8.11.0"
}
},
@@ -5325,6 +5391,15 @@
"node": ">=0.10.0"
}
},
+ "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-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
@@ -5346,9 +5421,9 @@
}
},
"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==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
"dev": true
},
"node_modules/spdx-expression-parse": {
@@ -5362,9 +5437,9 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.16",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz",
- "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==",
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
+ "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
"dev": true
},
"node_modules/sprintf-js": {
@@ -5382,16 +5457,6 @@
"node": ">= 0.6"
}
},
- "node_modules/stream-browserify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
- "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
- "dev": true,
- "dependencies": {
- "inherits": "~2.0.4",
- "readable-stream": "^3.5.0"
- }
- },
"node_modules/streamroller": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
@@ -5406,15 +5471,6 @@
"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",
@@ -5533,15 +5589,6 @@
"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/supports-color": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
@@ -5576,9 +5623,9 @@
}
},
"node_modules/terser": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
- "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
+ "version": "5.28.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz",
+ "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -5710,29 +5757,30 @@
}
},
"node_modules/typed-array-buffer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
- "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "is-typed-array": "^1.1.10"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/typed-array-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
- "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -5742,16 +5790,17 @@
}
},
"node_modules/typed-array-byte-offset": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
- "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -5761,14 +5810,20 @@
}
},
"node_modules/typed-array-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
- "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz",
+ "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -5875,12 +5930,6 @@
"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",
@@ -5932,35 +5981,35 @@
}
},
"node_modules/webpack": {
- "version": "5.56.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.56.0.tgz",
- "integrity": "sha512-pJ7esw2AGkpZL0jqsEAKnDEfRZdrc9NVjAWA+d1mFkwj68ng9VQ6+Wnrl+kS5dlDHvrat5ASK5vd7wp6I7f53Q==",
- "dev": true,
- "dependencies": {
- "@types/eslint-scope": "^3.7.0",
- "@types/estree": "^0.0.50",
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/wasm-edit": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "acorn": "^8.4.1",
- "acorn-import-assertions": "^1.7.6",
- "browserslist": "^4.14.5",
+ "version": "5.90.3",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz",
+ "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==",
+ "dev": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.3",
+ "@types/estree": "^1.0.5",
+ "@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.21.10",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.8.3",
- "es-module-lexer": "^0.9.0",
+ "enhanced-resolve": "^5.15.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.4",
- "json-parse-better-errors": "^1.0.2",
+ "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.0",
+ "schema-utils": "^3.2.0",
"tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.1.3",
- "watchpack": "^2.2.0",
- "webpack-sources": "^3.2.0"
+ "terser-webpack-plugin": "^5.3.10",
+ "watchpack": "^2.4.0",
+ "webpack-sources": "^3.2.3"
},
"bin": {
"webpack": "bin/webpack.js"
@@ -5979,40 +6028,42 @@
}
},
"node_modules/webpack-cli": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz",
- "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==",
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
+ "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
"dev": true,
"dependencies": {
"@discoveryjs/json-ext": "^0.5.0",
- "@webpack-cli/configtest": "^1.1.0",
- "@webpack-cli/info": "^1.4.0",
- "@webpack-cli/serve": "^1.6.0",
+ "@webpack-cli/configtest": "^2.1.1",
+ "@webpack-cli/info": "^2.0.2",
+ "@webpack-cli/serve": "^2.0.5",
"colorette": "^2.0.14",
- "commander": "^7.0.0",
- "execa": "^5.0.0",
+ "commander": "^10.0.1",
+ "cross-spawn": "^7.0.3",
+ "envinfo": "^7.7.3",
"fastest-levenshtein": "^1.0.12",
"import-local": "^3.0.2",
- "interpret": "^2.2.0",
- "rechoir": "^0.7.0",
+ "interpret": "^3.1.1",
+ "rechoir": "^0.8.0",
"webpack-merge": "^5.7.3"
},
"bin": {
"webpack-cli": "bin/cli.js"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">=14.15.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
},
"peerDependencies": {
- "webpack": "4.x.x || 5.x.x"
+ "webpack": "5.x.x"
},
"peerDependenciesMeta": {
"@webpack-cli/generators": {
"optional": true
},
- "@webpack-cli/migrate": {
- "optional": true
- },
"webpack-bundle-analyzer": {
"optional": true
},
@@ -6022,12 +6073,56 @@
}
},
"node_modules/webpack-cli/node_modules/commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
+ "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
"dev": true,
"engines": {
- "node": ">= 10"
+ "node": ">=14"
+ }
+ },
+ "node_modules/webpack-cli/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/webpack-cli/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/webpack-cli/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/webpack-cli/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/webpack-cli/node_modules/webpack-merge": {
@@ -6112,16 +6207,16 @@
}
},
"node_modules/which-typed-array": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
- "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz",
+ "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.4",
+ "available-typed-arrays": "^1.0.6",
+ "call-bind": "^1.0.5",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
- "has-tostringtag": "^1.0.0"
+ "has-tostringtag": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -6318,4734 +6413,18 @@
"engines": {
"node": ">=10"
}
- }
- },
- "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"
- }
- },
- "@babel/code-frame": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
- "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.23.4",
- "chalk": "^2.4.2"
- }
- },
- "@babel/compat-data": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
- "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
- "dev": true
- },
- "@babel/core": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz",
- "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==",
- "dev": true,
- "requires": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.23.5",
- "@babel/generator": "^7.23.6",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helpers": "^7.23.7",
- "@babel/parser": "^7.23.6",
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.7",
- "@babel/types": "^7.23.6",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- }
- },
- "@babel/generator": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
- "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.23.6",
- "@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-compilation-targets": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
- "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.23.5",
- "@babel/helper-validator-option": "^7.23.5",
- "browserslist": "^4.22.2",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- }
- },
- "@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
- "dev": true
- },
- "@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- }
- },
- "@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-module-imports": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
- "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.22.15"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
- "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
- "dev": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.20"
- }
- },
- "@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-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-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-string-parser": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
- "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
- "dev": true
- },
- "@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
- "dev": true
- },
- "@babel/helper-validator-option": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
- "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
- "dev": true
- },
- "@babel/helpers": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz",
- "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.7",
- "@babel/types": "^7.23.6"
- }
- },
- "@babel/highlight": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
- "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
- "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
- "dev": true
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
- "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.22.5"
- }
- },
- "@babel/plugin-transform-react-display-name": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz",
- "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.22.5"
- }
- },
- "@babel/plugin-transform-react-jsx": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz",
- "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-jsx": "^7.23.3",
- "@babel/types": "^7.23.4"
- }
- },
- "@babel/plugin-transform-react-jsx-development": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
- "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
- "dev": true,
- "requires": {
- "@babel/plugin-transform-react-jsx": "^7.22.5"
- }
- },
- "@babel/plugin-transform-react-pure-annotations": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz",
- "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- }
- },
- "@babel/preset-react": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz",
- "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-react-display-name": "^7.16.0",
- "@babel/plugin-transform-react-jsx": "^7.16.0",
- "@babel/plugin-transform-react-jsx-development": "^7.16.0",
- "@babel/plugin-transform-react-pure-annotations": "^7.16.0"
- }
- },
- "@babel/runtime": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.7.tgz",
- "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==",
- "requires": {
- "regenerator-runtime": "^0.14.0"
- }
- },
- "@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
- }
- },
- "@babel/traverse": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
- "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.23.5",
- "@babel/generator": "^7.23.6",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.6",
- "@babel/types": "^7.23.6",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
- }
- },
- "@babel/types": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
- "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
- "dev": true,
- "requires": {
- "@babel/helper-string-parser": "^7.23.4",
- "@babel/helper-validator-identifier": "^7.22.20",
- "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
- },
- "@fluent/bundle": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/@fluent/bundle/-/bundle-0.17.1.tgz",
- "integrity": "sha512-CRFNT9QcSFAeFDneTF59eyv3JXFGhIIN4boUO2y22YmsuuKLyDk+N1I/NQUYz9Ab63e6V7T6vItoZIG/2oOOuw=="
- },
- "@fluent/react": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/@fluent/react/-/react-0.15.0.tgz",
- "integrity": "sha512-qUMfaHman+UciOELQc5hnFAv0VerUR6+9gEBCRk9RR66XS13syt91ZElNOTHWe2Ofv70cxAGaJ5Yff4MRPg5Ow==",
- "requires": {
- "@fluent/sequence": "^0.8.0",
- "cached-iterable": "^0.3.0"
- }
- },
- "@fluent/sequence": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@fluent/sequence/-/sequence-0.8.0.tgz",
- "integrity": "sha512-eV5QlEEVV/wR3AFQLXO67x4yPRPQXyqke0c8yucyMSeW36B3ecZyVFlY1UprzrfFV8iPJB4TAehDy/dLGbvQ1Q==",
- "requires": {}
- },
- "@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.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "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.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
- "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
- "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.20",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
- "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
- "dev": true,
- "requires": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "@jsdevtools/coverage-istanbul-loader": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz",
- "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==",
- "dev": true,
- "requires": {
- "convert-source-map": "^1.7.0",
- "istanbul-lib-instrument": "^4.0.3",
- "loader-utils": "^2.0.0",
- "merge-source-map": "^1.1.0",
- "schema-utils": "^2.7.0"
- },
- "dependencies": {
- "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
- }
- }
- },
- "@sinonjs/commons": {
- "version": "1.8.6",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
- "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
- "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "@sinonjs/samsam": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.3.tgz",
- "integrity": "sha512-nhOb2dWPeb1sd3IQXL/dVPnKHDOAFfvichtBf4xV00/rU1QbPCQqKMbvIheIjqwVjh7qIgf2AHTHi391yMOMpQ==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.6.0",
- "lodash.get": "^4.4.2",
- "type-detect": "^4.0.8"
- }
- },
- "@sinonjs/text-encoding": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
- "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
- "dev": true
- },
- "@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
- },
- "@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
- },
- "@types/cors": {
- "version": "2.8.17",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
- "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/eslint": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.1.tgz",
- "integrity": "sha512-18PLWRzhy9glDQp3+wOgfLYRWlhgX0azxgJ63rdpoUHyrC9z0f5CkFburjQx4uD7ZCruw85ZtMt6K+L+R8fLJQ==",
- "dev": true,
- "requires": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "@types/eslint-scope": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
- "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
- "dev": true,
- "requires": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
- "@types/estree": {
- "version": "0.0.50",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
- "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
- "dev": true
- },
- "@types/hoist-non-react-statics": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
- "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
- "requires": {
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0"
- }
- },
- "@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
- "@types/node": {
- "version": "20.10.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz",
- "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==",
- "dev": true,
- "requires": {
- "undici-types": "~5.26.4"
- }
- },
- "@types/prop-types": {
- "version": "15.7.11",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
- "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng=="
- },
- "@types/react": {
- "version": "18.2.46",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.46.tgz",
- "integrity": "sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==",
- "requires": {
- "@types/prop-types": "*",
- "@types/scheduler": "*",
- "csstype": "^3.0.2"
- }
- },
- "@types/react-redux": {
- "version": "7.1.33",
- "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.33.tgz",
- "integrity": "sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg==",
- "requires": {
- "@types/hoist-non-react-statics": "^3.3.0",
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0",
- "redux": "^4.0.0"
- }
- },
- "@types/scheduler": {
- "version": "0.16.8",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
- "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A=="
- },
- "@webassemblyjs/ast": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
- "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-numbers": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
- }
- },
- "@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
- "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
- "dev": true
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
- "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
- "dev": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
- "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
- "dev": true
- },
- "@webassemblyjs/helper-numbers": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
- "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
- "dev": true,
- "requires": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
- "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
- "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
- "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
- "dev": true,
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
- "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
- "dev": true,
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
- "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
- "dev": true
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
- "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/helper-wasm-section": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-opt": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "@webassemblyjs/wast-printer": "1.11.1"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
- "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
- "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
- "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
- "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webpack-cli/configtest": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz",
- "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==",
- "dev": true,
- "requires": {}
- },
- "@webpack-cli/info": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz",
- "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==",
- "dev": true,
- "requires": {
- "envinfo": "^7.7.3"
- }
- },
- "@webpack-cli/serve": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz",
- "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==",
- "dev": true,
- "requires": {}
- },
- "@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
- },
- "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.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
- "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": {}
- },
- "airbnb-prop-types": {
- "version": "2.16.0",
- "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz",
- "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==",
- "dev": true,
- "requires": {
- "array.prototype.find": "^2.1.1",
- "function.prototype.name": "^1.1.2",
- "is-regex": "^1.1.0",
- "object-is": "^1.1.2",
- "object.assign": "^4.1.0",
- "object.entries": "^1.1.2",
- "prop-types": "^15.7.2",
- "prop-types-exact": "^1.2.0",
- "react-is": "^16.13.1"
- }
- },
- "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": {}
- },
- "ansi-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
- "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"
- }
- },
- "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-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.prototype.filter": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz",
- "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-array-method-boxes-properly": "^1.0.0",
- "is-string": "^1.0.7"
- }
- },
- "array.prototype.find": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.2.tgz",
- "integrity": "sha512-DRumkfW97iZGOfn+lIXbkVrXL04sfYKX+EfOodo8XboR5sxPDVvOjZTF/rysusa9lmhmSOeD6Vp6RKQP+eP4Tg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0"
- }
- },
- "array.prototype.flat": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
- "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0"
- }
- },
- "arraybuffer.prototype.slice": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
- "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
- "dev": true,
- "requires": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
- "is-array-buffer": "^3.0.2",
- "is-shared-array-buffer": "^1.0.2"
- }
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "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
- },
- "babel-loader": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
- "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==",
- "dev": true,
- "requires": {
- "find-cache-dir": "^3.3.1",
- "loader-utils": "^1.4.0",
- "make-dir": "^3.1.0",
- "schema-utils": "^2.6.5"
- },
- "dependencies": {
- "json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- }
- }
- },
- "babel-plugin-jsm-to-esmodules": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jsm-to-esmodules/-/babel-plugin-jsm-to-esmodules-0.6.0.tgz",
- "integrity": "sha512-463Yuq2sLkjoGHl5vPYUQQONnDjxnmxZuhsR1swL5N76hDFGyYZAVd6HoS4E02jBF8bORpS4aFmdr1XjEZ0buQ==",
- "dev": true
- },
- "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
- },
- "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
- },
- "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
- },
- "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,
- "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",
- "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
- }
- }
- },
- "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",
- "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"
- }
- },
- "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.22.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
- "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001565",
- "electron-to-chromium": "^1.4.601",
- "node-releases": "^2.0.14",
- "update-browserslist-db": "^1.0.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
- },
- "bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "dev": true
- },
- "cached-iterable": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/cached-iterable/-/cached-iterable-0.3.0.tgz",
- "integrity": "sha512-MDqM6TpBVebZD4UDtmlFp8EjVtRcsB6xt9aRdWymjk0fWVUUGgmt/V7o0H0gkI2Tkvv8B0ucjidZm4mLosdlWw=="
- },
- "call-bind": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
- "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.1",
- "set-function-length": "^1.1.1"
- }
- },
- "caniuse-lite": {
- "version": "1.0.30001574",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz",
- "integrity": "sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg==",
- "dev": true
- },
- "chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- }
- },
- "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"
- }
- },
- "check-error": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
- "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.2"
- }
- },
- "cheerio": {
- "version": "1.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
- "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
- "dev": true,
- "requires": {
- "cheerio-select": "^2.1.0",
- "dom-serializer": "^2.0.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.0.1",
- "htmlparser2": "^8.0.1",
- "parse5": "^7.0.0",
- "parse5-htmlparser2-tree-adapter": "^7.0.0"
- }
- },
- "cheerio-select": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
- "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
- "dev": true,
- "requires": {
- "boolbase": "^1.0.0",
- "css-select": "^5.1.0",
- "css-what": "^6.1.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.0.1"
- }
- },
- "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"
- }
- },
- "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
- },
- "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"
- },
- "dependencies": {
- "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
- },
- "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"
- }
- }
- }
- },
- "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
- },
- "colorette": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
- "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
- "dev": true
- },
- "colors": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
- "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
- },
- "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": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
- "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
- "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",
- "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
- }
- }
- },
- "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": "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
- },
- "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
- },
- "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,
- "requires": {
- "object-assign": "^4",
- "vary": "^1"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "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
- },
- "csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
- },
- "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
- },
- "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
- },
- "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"
- }
- },
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "define-data-property": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
- "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.2.1",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
- }
- },
- "define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "requires": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- }
- },
- "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
- },
- "di": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
- "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==",
- "dev": true
- },
- "diff": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz",
- "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==",
- "dev": true
- },
- "discontinuous-range": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
- "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==",
- "dev": true
- },
- "dom-helpers": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.1.tgz",
- "integrity": "sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==",
- "requires": {
- "@babel/runtime": "^7.8.7",
- "csstype": "^3.0.2"
- }
- },
- "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,
- "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"
- }
- },
- "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.620",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.620.tgz",
- "integrity": "sha512-a2fcSHOHrqBJsPNXtf6ZCEZpXrFCcbK1FBxfX3txoqWzNgtEDG1f3M59M98iwxhRW4iMKESnSjbJ310/rkrp0g==",
- "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
- },
- "engine.io": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz",
- "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==",
- "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.2.1",
- "ws": "~8.11.0"
- }
- },
- "engine.io-parser": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz",
- "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==",
- "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",
- "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
- "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==",
- "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
- },
- "envinfo": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz",
- "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==",
- "dev": true
- },
- "enzyme": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz",
- "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==",
- "dev": true,
- "requires": {
- "array.prototype.flat": "^1.2.3",
- "cheerio": "^1.0.0-rc.3",
- "enzyme-shallow-equal": "^1.0.1",
- "function.prototype.name": "^1.1.2",
- "has": "^1.0.3",
- "html-element-map": "^1.2.0",
- "is-boolean-object": "^1.0.1",
- "is-callable": "^1.1.5",
- "is-number-object": "^1.0.4",
- "is-regex": "^1.0.5",
- "is-string": "^1.0.5",
- "is-subset": "^0.1.1",
- "lodash.escape": "^4.0.1",
- "lodash.isequal": "^4.5.0",
- "object-inspect": "^1.7.0",
- "object-is": "^1.0.2",
- "object.assign": "^4.1.0",
- "object.entries": "^1.1.1",
- "object.values": "^1.1.1",
- "raf": "^3.4.1",
- "rst-selector-parser": "^2.2.3",
- "string.prototype.trim": "^1.2.1"
- }
- },
- "enzyme-adapter-react-16": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz",
- "integrity": "sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==",
- "dev": true,
- "requires": {
- "enzyme-adapter-utils": "^1.14.0",
- "enzyme-shallow-equal": "^1.0.4",
- "has": "^1.0.3",
- "object.assign": "^4.1.2",
- "object.values": "^1.1.2",
- "prop-types": "^15.7.2",
- "react-is": "^16.13.1",
- "react-test-renderer": "^16.0.0-0",
- "semver": "^5.7.0"
- },
- "dependencies": {
- "react-test-renderer": {
- "version": "16.14.0",
- "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz",
- "integrity": "sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==",
- "dev": true,
- "requires": {
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "react-is": "^16.8.6",
- "scheduler": "^0.19.1"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- }
- }
- },
- "enzyme-adapter-utils": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz",
- "integrity": "sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ==",
- "dev": true,
- "requires": {
- "airbnb-prop-types": "^2.16.0",
- "function.prototype.name": "^1.1.5",
- "has": "^1.0.3",
- "object.assign": "^4.1.4",
- "object.fromentries": "^2.0.5",
- "prop-types": "^15.8.1",
- "semver": "^5.7.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- }
- }
- },
- "enzyme-shallow-equal": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz",
- "integrity": "sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==",
- "dev": true,
- "requires": {
- "has": "^1.0.3",
- "object-is": "^1.1.5"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es-abstract": {
- "version": "1.22.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
- "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
- "dev": true,
- "requires": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.2",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.5",
- "es-set-tostringtag": "^2.0.1",
- "es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.2",
- "get-symbol-description": "^1.0.0",
- "globalthis": "^1.0.3",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0",
- "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.12",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.13.1",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.1",
- "safe-array-concat": "^1.0.1",
- "safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.8",
- "string.prototype.trimend": "^1.0.7",
- "string.prototype.trimstart": "^1.0.7",
- "typed-array-buffer": "^1.0.0",
- "typed-array-byte-length": "^1.0.0",
- "typed-array-byte-offset": "^1.0.0",
- "typed-array-length": "^1.0.4",
- "unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.13"
- }
- },
- "es-array-method-boxes-properly": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
- "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
- "dev": true
- },
- "es-module-lexer": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
- "dev": true
- },
- "es-set-tostringtag": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
- "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.2.2",
- "has-tostringtag": "^1.0.0",
- "hasown": "^2.0.0"
- }
- },
- "es-shim-unscopables": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
- "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
- "dev": true,
- "requires": {
- "hasown": "^2.0.0"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "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"
- }
- },
- "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
- },
- "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": {
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "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
- },
- "fastest-levenshtein": {
- "version": "1.0.16",
- "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
- "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
- "dev": true
- },
- "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.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "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",
- "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
- },
- "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,
- "requires": {
- "ee-first": "1.1.1"
- }
- }
- }
- },
- "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"
- }
- },
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
- "flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
- "dev": true
- },
- "follow-redirects": {
- "version": "1.15.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
- "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
- "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"
- }
},
- "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,
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "fs.realpath": {
+ "node_modules/yocto-queue": {
"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.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "optional": true
- },
- "function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true
- },
- "function.prototype.name": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
- "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "functions-have-names": "^1.2.3"
- }
- },
- "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
- },
- "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-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
- "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
- }
- },
- "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
- },
- "get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.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"
- }
- },
- "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
- },
- "globalthis": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
- "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3"
- }
- },
- "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",
- "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
- },
- "has": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
- "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
- "dev": true
- },
- "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",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "has-property-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
- "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.2.2"
- }
- },
- "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-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"
- }
- },
- "hasown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
- "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.2"
- }
- },
- "hoist-non-react-statics": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
- "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
- "requires": {
- "react-is": "^16.7.0"
- }
- },
- "hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "html-element-map": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz",
- "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==",
- "dev": true,
- "requires": {
- "array.prototype.filter": "^1.0.0",
- "call-bind": "^1.0.2"
- }
- },
- "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
- },
- "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-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"
- },
- "dependencies": {
- "statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "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"
- }
- },
- "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
- },
- "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"
- }
- },
- "import-local": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
- "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
- "dev": true,
- "requires": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- }
- },
- "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
- },
- "internal-slot": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
- "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.2.2",
- "hasown": "^2.0.0",
- "side-channel": "^1.0.4"
- }
- },
- "interpret": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
- "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
- "dev": true
- },
- "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",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
- "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",
- "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-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-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-core-module": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
- "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
- "dev": true,
- "requires": {
- "hasown": "^2.0.0"
- }
- },
- "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",
- "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-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
- "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-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-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-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-subset": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
- "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==",
- "dev": true
- },
- "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.12",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
- "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
- "dev": true,
- "requires": {
- "which-typed-array": "^1.1.11"
- }
- },
- "is-weakref": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
- "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2"
- }
- },
- "is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "requires": {
- "is-docker": "^2.0.0"
- }
- },
- "isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true
- },
- "isbinaryfile": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
- "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
- "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.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
- "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
- "dev": true
- },
- "istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- }
- },
- "istanbul-lib-report": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
- "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^4.0.0",
- "supports-color": "^7.1.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
- },
- "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"
- }
- },
- "make-dir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
- "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
- "dev": true,
- "requires": {
- "semver": "^7.5.3"
- }
- },
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "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"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
- "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^2.0.5",
- "make-dir": "^2.1.0",
- "rimraf": "^2.6.3",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "istanbul-lib-coverage": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
- "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
- "dev": true
- },
- "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,
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- }
- },
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- }
- }
- },
- "istanbul-reports": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
- "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
- "dev": true,
- "requires": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.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"
- }
- }
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "json-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
- },
- "json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+ "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
"dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "just-extend": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
- "dev": true
- },
- "karma": {
- "version": "6.3.8",
- "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.8.tgz",
- "integrity": "sha512-10wBBU9S0lBHhbCNfmmbWQaY5C1bXlKdnvzN2QKThujCI/+DKaezrI08l6bfTlpJ92VsEboq3zYKpXwK6DOi3A==",
- "dev": true,
- "requires": {
- "body-parser": "^1.19.0",
- "braces": "^3.0.2",
- "chokidar": "^3.5.1",
- "colors": "^1.4.0",
- "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.3.0",
- "mime": "^2.5.2",
- "minimatch": "^3.0.4",
- "qjobs": "^1.2.0",
- "range-parser": "^1.2.1",
- "rimraf": "^3.0.2",
- "socket.io": "^4.2.0",
- "source-map": "^0.6.1",
- "tmp": "^0.2.1",
- "ua-parser-js": "^0.7.30",
- "yargs": "^16.1.1"
- }
- },
- "karma-chai": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz",
- "integrity": "sha512-mqKCkHwzPMhgTYca10S90aCEX9+HjVjjrBFAsw36Zj7BlQNbokXXCAe6Ji04VUMsxcY5RLP7YphpfO06XOubdg==",
- "dev": true,
- "requires": {}
- },
- "karma-coverage-istanbul-reporter": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz",
- "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^3.0.6",
- "istanbul-reports": "^3.0.2",
- "minimatch": "^3.0.4"
- }
- },
- "karma-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"
- }
- },
- "karma-json-reporter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/karma-json-reporter/-/karma-json-reporter-1.2.1.tgz",
- "integrity": "sha512-ASmvranNhUN0ctSuAZKeWISW9Nf4AteMcVy8rJVjS7Qk+qWgssag/nw+yivHWKDROztVFn7TdamHOETMPCkvgA==",
- "dev": true,
- "requires": {}
- },
- "karma-mocha": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz",
- "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.3"
- }
- },
- "karma-mocha-reporter": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz",
- "integrity": "sha512-Hr6nhkIp0GIJJrvzY8JFeHpQZNseuIakGac4bpw8K1+5F0tLb6l7uvXRa8mt2Z+NVwYgCct4QAfp2R2QP6o00w==",
- "dev": true,
- "requires": {
- "chalk": "^2.1.0",
- "log-symbols": "^2.1.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "karma-sinon": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz",
- "integrity": "sha512-wrkyAxJmJbn75Dqy17L/8aILJWFm7znd1CE8gkyxTBFnjMSOe2XTJ3P30T8SkxWZHmoHX0SCaUJTDBEoXs25Og==",
- "dev": true,
- "requires": {}
- },
- "karma-sourcemap-loader": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz",
- "integrity": "sha512-zorxyAakYZuBcHRJE+vbrK2o2JXLFWK8VVjiT/6P+ltLBUGUvqTEkUiQ119MGdOrK7mrmxXHZF1/pfT6GgIZ6g==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2"
- }
- },
- "karma-webpack": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-5.0.0.tgz",
- "integrity": "sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3",
- "minimatch": "^3.0.4",
- "webpack-merge": "^4.1.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
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "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": "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"
- }
- },
- "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.escape": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz",
- "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==",
- "dev": true
- },
- "lodash.flattendeep": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
- "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==",
- "dev": true
- },
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
- "dev": true
- },
- "lodash.isequal": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
- "dev": true
- },
- "log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.1"
- }
- },
- "log4js": {
- "version": "6.9.1",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz",
- "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==",
- "dev": true,
- "requires": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "flatted": "^3.2.7",
- "rfdc": "^1.3.0",
- "streamroller": "^3.1.5"
- }
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "requires": {
- "js-tokens": "^3.0.0 || ^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"
- }
- },
- "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"
- }
- },
- "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
- },
- "memorystream": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
- "dev": true
- },
- "merge-source-map": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
- "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
- "dev": true,
- "requires": {
- "source-map": "^0.6.1"
- }
- },
- "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
- },
- "mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "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
- },
- "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"
- }
- },
- "minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true
- },
- "moo": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz",
- "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==",
- "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
- },
- "nearley": {
- "version": "2.20.1",
- "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz",
- "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==",
- "dev": true,
- "requires": {
- "commander": "^2.19.0",
- "moo": "^0.5.0",
- "railroad-diagrams": "^1.0.0",
- "randexp": "0.4.6"
- }
- },
- "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
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "nise": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.5.tgz",
- "integrity": "sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^2.0.0",
- "@sinonjs/fake-timers": "^10.0.2",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "path-to-regexp": "^1.7.0"
- },
- "dependencies": {
- "@sinonjs/commons": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
- "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
- "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^3.0.0"
- },
- "dependencies": {
- "@sinonjs/commons": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
- "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- }
- }
- }
- }
- },
- "node-releases": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
- "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
- "dev": true
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- }
- }
- },
- "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
- },
- "npm-run-all": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
- "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "chalk": "^2.4.1",
- "cross-spawn": "^6.0.5",
- "memorystream": "^0.3.1",
- "minimatch": "^3.0.4",
- "pidtree": "^0.3.0",
- "read-pkg": "^3.0.0",
- "shell-quote": "^1.6.1",
- "string.prototype.padend": "^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"
- },
- "dependencies": {
- "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
- }
- }
- },
- "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",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
- },
- "object-inspect": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
- "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
- "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.5",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
- "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.5",
- "define-properties": "^1.2.1",
- "has-symbols": "^1.0.3",
- "object-keys": "^1.1.1"
- }
- },
- "object.entries": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
- "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "object.fromentries": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
- "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "object.values": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
- "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "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"
- }
- },
- "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"
- }
- },
- "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-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
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "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-htmlparser2-tree-adapter": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
- "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
- "dev": true,
- "requires": {
- "domhandler": "^5.0.2",
- "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": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
- "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-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "requires": {
- "isarray": "0.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "dev": true
- }
- }
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "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",
- "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
- },
- "pidtree": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
- "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
- "dev": true
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- }
- },
- "prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "prop-types-exact": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz",
- "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==",
- "dev": true,
- "requires": {
- "has": "^1.0.3",
- "object.assign": "^4.1.0",
- "reflect.ownkeys": "^0.2.0"
- }
- },
- "punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true
- },
- "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
- },
- "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"
- }
- },
- "raf": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
- "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
- "dev": true,
- "requires": {
- "performance-now": "^2.1.0"
- }
- },
- "railroad-diagrams": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",
- "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==",
- "dev": true
- },
- "randexp": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
- "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
- "dev": true,
- "requires": {
- "discontinuous-range": "1.0.0",
- "ret": "~0.1.10"
- }
- },
- "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.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "dev": true,
- "requires": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- },
- "react": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
- "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2"
- }
- },
- "react-dom": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
- "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.19.1"
- }
- },
- "react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
- },
- "react-redux": {
- "version": "7.2.6",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz",
- "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==",
- "requires": {
- "@babel/runtime": "^7.15.4",
- "@types/react-redux": "^7.1.20",
- "hoist-non-react-statics": "^3.3.2",
- "loose-envify": "^1.4.0",
- "prop-types": "^15.7.2",
- "react-is": "^17.0.2"
- },
- "dependencies": {
- "react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
- }
- }
- },
- "react-transition-group": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.2.tgz",
- "integrity": "sha512-/RNYfRAMlZwDSr6z4zNKV6xu53/e2BuaBbGhbyYIXTrmgu/bGHzmqOs7mJSJBHy9Ud+ApHx3QjrkKSp1pxvlFg==",
- "requires": {
- "@babel/runtime": "^7.5.5",
- "dom-helpers": "^5.0.1",
- "loose-envify": "^1.4.0",
- "prop-types": "^15.6.2"
- }
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "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"
- }
- },
- "rechoir": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
- "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
- "dev": true,
- "requires": {
- "resolve": "^1.9.0"
- }
- },
- "redux": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.2.tgz",
- "integrity": "sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==",
- "requires": {
- "@babel/runtime": "^7.9.2"
- }
- },
- "reflect.ownkeys": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz",
- "integrity": "sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg==",
- "dev": true
- },
- "regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
- },
- "regexp.prototype.flags": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
- "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "set-function-name": "^2.0.0"
- }
- },
- "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
- },
- "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.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
- "dev": true,
- "requires": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "requires": {
- "resolve-from": "^5.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
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
- "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"
- }
- },
- "rst-selector-parser": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
- "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==",
- "dev": true,
- "requires": {
- "lodash.flattendeep": "^4.4.0",
- "nearley": "^2.7.10"
- }
- },
- "safe-array-concat": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
- "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "has-symbols": "^1.0.3",
- "isarray": "^2.0.5"
- }
- },
- "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
- },
- "safe-regex-test": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
- "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
- "is-regex": "^1.1.4"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "sass": {
- "version": "1.43.4",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.4.tgz",
- "integrity": "sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==",
- "dev": true,
- "requires": {
- "chokidar": ">=3.0.0 <4.0.0"
- }
- },
- "scheduler": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
- "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "schema-utils": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
- "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.5",
- "ajv": "^6.12.4",
- "ajv-keywords": "^3.5.2"
- }
- },
- "semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "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"
- }
- },
- "set-function-length": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
- "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
- "dev": true,
- "requires": {
- "define-data-property": "^1.1.1",
- "get-intrinsic": "^1.2.1",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
- }
- },
- "set-function-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
- "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
- "dev": true,
- "requires": {
- "define-data-property": "^1.0.1",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.0"
- }
- },
- "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": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
- "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": "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
- },
- "sinon": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz",
- "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.8.3",
- "@sinonjs/fake-timers": "^8.1.0",
- "@sinonjs/samsam": "^6.0.2",
- "diff": "^5.0.0",
- "nise": "^5.1.0",
- "supports-color": "^7.2.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": "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"
- }
- }
- }
- },
- "socket.io": {
- "version": "4.7.3",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.3.tgz",
- "integrity": "sha512-SE+UIQXBQE+GPG2oszWMlsEmWtHVqw/h1VrYJGK5/MC7CH5p58N448HwIrtREcvR4jfdOJAY4ieQfxMr55qbbw==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.4",
- "base64id": "~2.0.0",
- "cors": "~2.8.5",
- "debug": "~4.3.2",
- "engine.io": "~6.5.2",
- "socket.io-adapter": "~2.5.2",
- "socket.io-parser": "~4.2.4"
- }
- },
- "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,
- "requires": {
- "ws": "~8.11.0"
- }
- },
- "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,
- "requires": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.1"
- }
- },
- "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
- },
- "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"
- }
- },
- "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.16",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz",
- "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==",
- "dev": true
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "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
- },
- "stream-browserify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
- "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
- "dev": true,
- "requires": {
- "inherits": "~2.0.4",
- "readable-stream": "^3.5.0"
- }
- },
- "streamroller": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
- "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
- "dev": true,
- "requires": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "fs-extra": "^8.1.0"
- }
- },
- "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"
- },
- "dependencies": {
- "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
- },
- "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"
- }
- }
- }
- },
- "string.prototype.padend": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz",
- "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "string.prototype.trim": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
- "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
- "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
- "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "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
- },
- "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
- },
- "tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true
- },
- "terser": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
- "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
- "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.10",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
- "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
- "dev": true,
- "requires": {
- "@jridgewell/trace-mapping": "^0.3.20",
- "jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.1",
- "terser": "^5.26.0"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "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"
- }
- },
- "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
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "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-array-buffer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
- "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "is-typed-array": "^1.1.10"
- }
- },
- "typed-array-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
- "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
- }
- },
- "typed-array-byte-offset": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
- "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
- "dev": true,
- "requires": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
- }
- },
- "typed-array-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
- "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
- }
- },
- "ua-parser-js": {
- "version": "0.7.37",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.37.tgz",
- "integrity": "sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA==",
- "dev": true
- },
- "unbox-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
- "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.0.3",
- "which-boxed-primitive": "^1.0.2"
- }
- },
- "undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "dev": true
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "dev": true
- },
- "update-browserslist-db": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
- "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
- "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
- },
- "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"
- }
- },
- "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
- },
- "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
- },
- "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"
- }
- },
- "webpack": {
- "version": "5.56.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.56.0.tgz",
- "integrity": "sha512-pJ7esw2AGkpZL0jqsEAKnDEfRZdrc9NVjAWA+d1mFkwj68ng9VQ6+Wnrl+kS5dlDHvrat5ASK5vd7wp6I7f53Q==",
- "dev": true,
- "requires": {
- "@types/eslint-scope": "^3.7.0",
- "@types/estree": "^0.0.50",
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/wasm-edit": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "acorn": "^8.4.1",
- "acorn-import-assertions": "^1.7.6",
- "browserslist": "^4.14.5",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.8.3",
- "es-module-lexer": "^0.9.0",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.4",
- "json-parse-better-errors": "^1.0.2",
- "loader-runner": "^4.2.0",
- "mime-types": "^2.1.27",
- "neo-async": "^2.6.2",
- "schema-utils": "^3.1.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.1.3",
- "watchpack": "^2.2.0",
- "webpack-sources": "^3.2.0"
- },
- "dependencies": {
- "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-cli": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz",
- "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==",
- "dev": true,
- "requires": {
- "@discoveryjs/json-ext": "^0.5.0",
- "@webpack-cli/configtest": "^1.1.0",
- "@webpack-cli/info": "^1.4.0",
- "@webpack-cli/serve": "^1.6.0",
- "colorette": "^2.0.14",
- "commander": "^7.0.0",
- "execa": "^5.0.0",
- "fastest-levenshtein": "^1.0.12",
- "import-local": "^3.0.2",
- "interpret": "^2.2.0",
- "rechoir": "^0.7.0",
- "webpack-merge": "^5.7.3"
- },
- "dependencies": {
- "commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
- "dev": true
- },
- "webpack-merge": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
- "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
- "dev": true,
- "requires": {
- "clone-deep": "^4.0.1",
- "flat": "^5.0.2",
- "wildcard": "^2.0.0"
- }
- }
- }
- },
- "webpack-merge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz",
- "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.15"
- }
- },
- "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
- },
- "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"
- }
- },
- "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-typed-array": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
- "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
- "dev": true,
- "requires": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.4",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-tostringtag": "^1.0.0"
- }
- },
- "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",
- "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-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": "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
- },
- "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"
- }
- }
- }
- },
- "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.11.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
- "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
- "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
- },
- "yamljs": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz",
- "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "glob": "^7.0.5"
- }
- },
- "yamscripts": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yamscripts/-/yamscripts-0.1.0.tgz",
- "integrity": "sha512-i4ThS58KwsK83qSrrc8YZiBqgdl3WewWcWZ4fPdrh7A+qiRU9kXMcIKzngOC7VpJ2nTsWvHG6TcK3JHXpBxACA==",
- "dev": true,
- "requires": {
- "colors": "^1.3.2",
- "fs-extra": "^7.0.0",
- "minimist": "^1.2.0",
- "yamljs": "^0.3.0"
+ "engines": {
+ "node": ">=12.20"
},
- "dependencies": {
- "fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- }
- }
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "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"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
- },
- "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
}
}
}
diff --git a/browser/components/aboutwelcome/package.json b/browser/components/aboutwelcome/package.json
index 210c9dc7a8..bc7758b1e7 100644
--- a/browser/components/aboutwelcome/package.json
+++ b/browser/components/aboutwelcome/package.json
@@ -4,8 +4,8 @@
"version": "1.0.0",
"author": "Mozilla (https://mozilla.org/)",
"dependencies": {
- "@fluent/bundle": "0.17.1",
- "@fluent/react": "0.15.0",
+ "@fluent/bundle": "0.18.0",
+ "@fluent/react": "0.15.2",
"react": "16.13.1",
"react-dom": "16.13.1",
"react-redux": "7.2.6",
@@ -13,14 +13,13 @@
"redux": "4.1.2"
},
"devDependencies": {
- "@babel/preset-react": "7.16.0",
+ "@babel/preset-react": "7.23.3",
"@jsdevtools/coverage-istanbul-loader": "^3.0.5",
- "babel-loader": "8.2.3",
- "babel-plugin-jsm-to-esmodules": "0.6.0",
+ "babel-loader": "9.1.3",
"chai": "4.3.4",
"enzyme": "3.11.0",
- "enzyme-adapter-react-16": "1.15.6",
- "karma": "6.3.8",
+ "enzyme-adapter-react-16": "1.15.8",
+ "karma": "6.4.2",
"karma-chai": "0.1.0",
"karma-coverage-istanbul-reporter": "3.0.3",
"karma-firefox-launcher": "2.1.2",
@@ -28,21 +27,20 @@
"karma-mocha": "2.0.1",
"karma-mocha-reporter": "2.2.5",
"karma-sinon": "1.0.5",
- "karma-sourcemap-loader": "0.3.8",
- "karma-webpack": "5.0.0",
+ "karma-sourcemap-loader": "0.4.0",
+ "karma-webpack": "5.0.1",
"npm-run-all": "4.1.5",
- "sass": "1.43.4",
- "sinon": "12.0.1",
- "stream-browserify": "3.0.0",
- "webpack": "5.56.0",
- "webpack-cli": "4.9.1",
+ "sass": "1.71.1",
+ "sinon": "17.0.1",
+ "webpack": "5.90.3",
+ "webpack-cli": "5.1.4",
"yamscripts": "0.1.0"
},
"engines": {
- "firefox": ">=45.0 <=*",
+ "firefox": ">=122.0 <=*",
"//": "when changing node versions, also edit .nvmrc",
- "node": "16.19.*",
- "npm": "8.19.3"
+ "node": "18.19.*",
+ "npm": "10.2.*"
},
"license": "MPL-2.0",
"config": {
diff --git a/browser/components/aboutwelcome/tests/browser/browser.toml b/browser/components/aboutwelcome/tests/browser/browser.toml
index 22d95272e8..96d1070645 100644
--- a/browser/components/aboutwelcome/tests/browser/browser.toml
+++ b/browser/components/aboutwelcome/tests/browser/browser.toml
@@ -37,6 +37,9 @@ skip-if = ["os == 'linux' && bits == 64"] # Bug 1757875
["browser_aboutwelcome_multistage_mr.js"]
skip-if = ["os == 'linux' && bits == 64 && debug"] # Bug 1812050
+["browser_aboutwelcome_multistage_transitions.js"]
+skip-if = ["debug"] # Bug 1875203
+
["browser_aboutwelcome_multistage_video.js"]
["browser_aboutwelcome_observer.js"]
@@ -50,6 +53,8 @@ skip-if = [
["browser_aboutwelcome_screen_targeting.js"]
+["browser_aboutwelcome_toolbar_button.js"]
+
["browser_aboutwelcome_upgrade_multistage_mr.js"]
skip-if = [
"win11_2009 && debug",
diff --git a/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_attribution.js b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_attribution.js
index f0727c9b6f..d7076bd7c5 100644
--- a/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_attribution.js
+++ b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_attribution.js
@@ -42,7 +42,6 @@ const TEST_PROTON_CONTENT = [
navigate: true,
},
},
- has_noodles: true,
},
},
{
@@ -58,7 +57,6 @@ const TEST_PROTON_CONTENT = [
data: {},
},
},
- has_noodles: true,
},
},
];
diff --git a/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_configurable_ui.js b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_configurable_ui.js
index d53b5acc14..3081688a0c 100644
--- a/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_configurable_ui.js
+++ b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_configurable_ui.js
@@ -334,46 +334,46 @@ add_task(async function test_aboutwelcome_dismiss_button() {
/**
* Test rendering a screen with the "split" position
*/
-add_task(async function test_aboutwelcome_split_position() {
- const TEST_SPLIT_STEP = makeTestContent("TEST_SPLIT_STEP", {
- position: "split",
- hero_text: "hero test",
- });
-
- const TEST_SPLIT_JSON = JSON.stringify([TEST_SPLIT_STEP]);
- let browser = await openAboutWelcome(TEST_SPLIT_JSON);
-
- await test_screen_content(
- browser,
- "renders screen secondary section containing hero text",
- // Expected selectors:
- [`main.screen[pos="split"]`, `.section-secondary`, `.message-text h1`]
- );
-
- // Ensure secondary section has split template styling
- await test_element_styles(
- browser,
- "main.screen .section-secondary",
- // Expected styles:
- {
- display: "flex",
- margin: "auto 0px auto auto",
- }
- );
-
- // Ensure secondary action has button styling
- await test_element_styles(
- browser,
- ".action-buttons .secondary-cta .secondary",
- // Expected styles:
- {
- // Override default text-link styles
- "background-color": "color(srgb 0.0823529 0.0784314 0.101961 / 0.07)",
- color: "rgb(21, 20, 26)",
- }
- );
- browser.closeBrowser();
-});
+// add_task(async function test_aboutwelcome_split_position() {
+// const TEST_SPLIT_STEP = makeTestContent("TEST_SPLIT_STEP", {
+// position: "split",
+// hero_text: "hero test",
+// });
+
+// const TEST_SPLIT_JSON = JSON.stringify([TEST_SPLIT_STEP]);
+// let browser = await openAboutWelcome(TEST_SPLIT_JSON);
+
+// await test_screen_content(
+// browser,
+// "renders screen secondary section containing hero text",
+// // Expected selectors:
+// [`main.screen[pos="split"]`, `.section-secondary`, `.message-text h1`]
+// );
+
+// // Ensure secondary section has split template styling
+// await test_element_styles(
+// browser,
+// "main.screen .section-secondary",
+// // Expected styles:
+// {
+// display: "flex",
+// margin: "auto 0px auto auto",
+// }
+// );
+
+// // Ensure secondary action has button styling
+// await test_element_styles(
+// browser,
+// ".action-buttons .secondary-cta .secondary",
+// // Expected styles:
+// {
+// // Override default text-link styles
+// "background-color": "color(srgb 0.0823529 0.0784314 0.101961 / 0.07)",
+// color: "rgb(21, 20, 26)",
+// }
+// );
+// browser.closeBrowser();
+// });
/**
* Test rendering a screen with a URL value and default color for backdrop
@@ -722,3 +722,27 @@ add_task(async function test_aboutwelcome_start_screen_configured() {
browser.closeBrowser();
sandbox.restore();
});
+
+/**
+ * Test rendering a screen with that doesn't use responsive design
+ */
+add_task(async function test_aboutwelcome_rdm_property() {
+ let screens = [makeTestContent(`TEST_NO_RDM`, { no_rdm: true })];
+
+ let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
+ featureId: "aboutwelcome",
+ value: { enabled: true, screens },
+ });
+
+ let browser = await openAboutWelcome();
+
+ await test_screen_content(
+ browser,
+ "render screen with 'no-rdm' attribute",
+ // Expected selectors:
+ ["main.TEST_NO_RDM[no-rdm]"]
+ );
+
+ await doExperimentCleanup();
+ browser.closeBrowser();
+});
diff --git a/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_multistage_experimentAPI.js b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_multistage_experimentAPI.js
index 960d42a1f8..1e29e230ab 100644
--- a/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_multistage_experimentAPI.js
+++ b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_multistage_experimentAPI.js
@@ -10,101 +10,6 @@ const { TelemetryTestUtils } = ChromeUtils.importESModule(
"resource://testing-common/TelemetryTestUtils.sys.mjs"
);
-const TEST_PROTON_CONTENT = [
- {
- id: "AW_STEP1",
- content: {
- title: "Step 1",
- primary_button: {
- label: "Next",
- action: {
- navigate: true,
- },
- },
- secondary_button: {
- label: "link",
- },
- secondary_button_top: {
- label: "link top",
- action: {
- type: "SHOW_FIREFOX_ACCOUNTS",
- data: { entrypoint: "test" },
- },
- },
- has_noodles: true,
- },
- },
- {
- id: "AW_STEP2",
- content: {
- title: "Step 2",
- primary_button: {
- label: "Next",
- action: {
- navigate: true,
- },
- },
- secondary_button: {
- label: "link",
- },
- has_noodles: true,
- },
- },
- {
- id: "AW_STEP3",
- content: {
- title: "Step 3",
- tiles: {
- type: "theme",
- action: {
- theme: "<event>",
- },
- data: [
- {
- theme: "automatic",
- label: "theme-1",
- tooltip: "test-tooltip",
- },
- {
- theme: "dark",
- label: "theme-2",
- },
- ],
- },
- primary_button: {
- label: "Next",
- action: {
- navigate: true,
- },
- },
- secondary_button: {
- label: "Import",
- action: {
- type: "SHOW_MIGRATION_WIZARD",
- data: { source: "chrome" },
- },
- },
- has_noodles: true,
- },
- },
- {
- id: "AW_STEP4",
- content: {
- title: "Step 4",
- primary_button: {
- label: "Next",
- action: {
- navigate: true,
- },
- },
- secondary_button: {
- label: "link",
- },
- has_noodles: true,
- },
- },
-];
-
/**
* Test the zero onboarding using ExperimentAPI
*/
@@ -354,119 +259,6 @@ add_task(async function test_multistage_aboutwelcome_experimentAPI() {
await doExperimentCleanup();
});
-/**
- * Test the multistage proton welcome UI using ExperimentAPI with transitions
- */
-add_task(async function test_multistage_aboutwelcome_transitions() {
- const sandbox = sinon.createSandbox();
- await setAboutWelcomePref(true);
- await ExperimentAPI.ready();
-
- let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
- featureId: "aboutwelcome",
- value: {
- id: "my-mochitest-experiment",
- enabled: true,
- screens: TEST_PROTON_CONTENT,
- transitions: true,
- },
- });
-
- let tab = await BrowserTestUtils.openNewForegroundTab(
- gBrowser,
- "about:welcome",
- true
- );
-
- const browser = tab.linkedBrowser;
-
- let aboutWelcomeActor = await getAboutWelcomeParent(browser);
- // Stub AboutWelcomeParent Content Message Handler
- sandbox.spy(aboutWelcomeActor, "onContentMessage");
- registerCleanupFunction(() => {
- BrowserTestUtils.removeTab(tab);
- sandbox.restore();
- });
-
- await test_screen_content(
- browser,
- "multistage proton step 1",
- // Expected selectors:
- ["div.proton.transition- .screen"],
- // Unexpected selectors:
- ["div.proton.transition-out"]
- );
-
- // Double click should still only transition once.
- await onButtonClick(browser, "button.primary");
- await onButtonClick(browser, "button.primary");
-
- await test_screen_content(
- browser,
- "multistage proton step 1 transition to 2",
- // Expected selectors:
- ["div.proton.transition-out .screen", "div.proton.transition- .screen-1"]
- );
-
- await doExperimentCleanup();
-});
-
-/**
- * Test the multistage proton welcome UI using ExperimentAPI without transitions
- */
-add_task(async function test_multistage_aboutwelcome_transitions_off() {
- const sandbox = sinon.createSandbox();
- await setAboutWelcomePref(true);
- await ExperimentAPI.ready();
-
- let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
- featureId: "aboutwelcome",
- value: {
- id: "my-mochitest-experiment",
- enabled: true,
- screens: TEST_PROTON_CONTENT,
- transitions: false,
- },
- });
-
- let tab = await BrowserTestUtils.openNewForegroundTab(
- gBrowser,
- "about:welcome",
- true
- );
-
- const browser = tab.linkedBrowser;
-
- let aboutWelcomeActor = await getAboutWelcomeParent(browser);
- // Stub AboutWelcomeParent Content Message Handler
- sandbox.spy(aboutWelcomeActor, "onContentMessage");
- registerCleanupFunction(() => {
- BrowserTestUtils.removeTab(tab);
- sandbox.restore();
- });
-
- await test_screen_content(
- browser,
- "multistage proton step 1",
- // Expected selectors:
- ["div.proton.transition- .screen"],
- // Unexpected selectors:
- ["div.proton.transition-out"]
- );
-
- await onButtonClick(browser, "button.primary");
- await test_screen_content(
- browser,
- "multistage proton step 1 no transition to 2",
- // Expected selectors:
- [],
- // Unexpected selectors:
- ["div.proton.transition-out .screen-0"]
- );
-
- await doExperimentCleanup();
-});
-
/* Test multistage custom backdrop
*/
add_task(async function test_multistage_aboutwelcome_backdrop() {
diff --git a/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_multistage_transitions.js b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_multistage_transitions.js
new file mode 100644
index 0000000000..d27674ef6c
--- /dev/null
+++ b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_multistage_transitions.js
@@ -0,0 +1,219 @@
+"use strict";
+
+const { ExperimentAPI } = ChromeUtils.importESModule(
+ "resource://nimbus/ExperimentAPI.sys.mjs"
+);
+const { ExperimentFakes } = ChromeUtils.importESModule(
+ "resource://testing-common/NimbusTestUtils.sys.mjs"
+);
+const { TelemetryTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/TelemetryTestUtils.sys.mjs"
+);
+
+const TEST_PROTON_CONTENT = [
+ {
+ id: "AW_STEP1",
+ content: {
+ title: "Step 1",
+ primary_button: {
+ label: "Next",
+ action: {
+ navigate: true,
+ },
+ },
+ secondary_button: {
+ label: "link",
+ },
+ secondary_button_top: {
+ label: "link top",
+ action: {
+ type: "SHOW_FIREFOX_ACCOUNTS",
+ data: { entrypoint: "test" },
+ },
+ },
+ has_noodles: true,
+ },
+ },
+ {
+ id: "AW_STEP2",
+ content: {
+ title: "Step 2",
+ primary_button: {
+ label: "Next",
+ action: {
+ navigate: true,
+ },
+ },
+ secondary_button: {
+ label: "link",
+ },
+ has_noodles: true,
+ },
+ },
+ {
+ id: "AW_STEP3",
+ content: {
+ title: "Step 3",
+ tiles: {
+ type: "theme",
+ action: {
+ theme: "<event>",
+ },
+ data: [
+ {
+ theme: "automatic",
+ label: "theme-1",
+ tooltip: "test-tooltip",
+ },
+ {
+ theme: "dark",
+ label: "theme-2",
+ },
+ ],
+ },
+ primary_button: {
+ label: "Next",
+ action: {
+ navigate: true,
+ },
+ },
+ secondary_button: {
+ label: "Import",
+ action: {
+ type: "SHOW_MIGRATION_WIZARD",
+ data: { source: "chrome" },
+ },
+ },
+ has_noodles: true,
+ },
+ },
+ {
+ id: "AW_STEP4",
+ content: {
+ title: "Step 4",
+ primary_button: {
+ label: "Next",
+ action: {
+ navigate: true,
+ },
+ },
+ secondary_button: {
+ label: "link",
+ },
+ has_noodles: true,
+ },
+ },
+];
+
+/**
+ * Test the multistage proton welcome UI using ExperimentAPI with transitions
+ */
+add_task(async function test_multistage_aboutwelcome_transitions() {
+ const sandbox = sinon.createSandbox();
+ await setAboutWelcomePref(true);
+ await ExperimentAPI.ready();
+
+ let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
+ featureId: "aboutwelcome",
+ value: {
+ id: "my-mochitest-experiment",
+ enabled: true,
+ screens: TEST_PROTON_CONTENT,
+ transitions: true,
+ },
+ });
+
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:welcome",
+ true
+ );
+
+ const browser = tab.linkedBrowser;
+
+ let aboutWelcomeActor = await getAboutWelcomeParent(browser);
+ // Stub AboutWelcomeParent Content Message Handler
+ sandbox.spy(aboutWelcomeActor, "onContentMessage");
+ registerCleanupFunction(() => {
+ BrowserTestUtils.removeTab(tab);
+ sandbox.restore();
+ });
+
+ await test_screen_content(
+ browser,
+ "multistage proton step 1",
+ // Expected selectors:
+ ["div.proton.transition- .screen"],
+ // Unexpected selectors:
+ ["div.proton.transition-out"]
+ );
+
+ // Double click should still only transition once.
+ await onButtonClick(browser, "button.primary");
+ await onButtonClick(browser, "button.primary");
+
+ await test_screen_content(
+ browser,
+ "multistage proton step 1 transition to 2",
+ // Expected selectors:
+ ["div.proton.transition-out .screen", "div.proton.transition- .screen-1"]
+ );
+
+ await doExperimentCleanup();
+});
+
+/**
+ * Test the multistage proton welcome UI using ExperimentAPI without transitions
+ */
+add_task(async function test_multistage_aboutwelcome_transitions_off() {
+ const sandbox = sinon.createSandbox();
+ await setAboutWelcomePref(true);
+ await ExperimentAPI.ready();
+
+ let doExperimentCleanup = await ExperimentFakes.enrollWithFeatureConfig({
+ featureId: "aboutwelcome",
+ value: {
+ id: "my-mochitest-experiment",
+ enabled: true,
+ screens: TEST_PROTON_CONTENT,
+ transitions: false,
+ },
+ });
+
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:welcome",
+ true
+ );
+
+ const browser = tab.linkedBrowser;
+
+ let aboutWelcomeActor = await getAboutWelcomeParent(browser);
+ // Stub AboutWelcomeParent Content Message Handler
+ sandbox.spy(aboutWelcomeActor, "onContentMessage");
+ registerCleanupFunction(() => {
+ BrowserTestUtils.removeTab(tab);
+ sandbox.restore();
+ });
+
+ await test_screen_content(
+ browser,
+ "multistage proton step 1",
+ // Expected selectors:
+ ["div.proton.transition- .screen"],
+ // Unexpected selectors:
+ ["div.proton.transition-out"]
+ );
+
+ await onButtonClick(browser, "button.primary");
+ await test_screen_content(
+ browser,
+ "multistage proton step 1 no transition to 2",
+ // Expected selectors:
+ [],
+ // Unexpected selectors:
+ ["div.proton.transition-out .screen-0"]
+ );
+
+ await doExperimentCleanup();
+});
diff --git a/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_observer.js b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_observer.js
index 58f9059532..d1fe0edc4c 100644
--- a/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_observer.js
+++ b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_observer.js
@@ -70,4 +70,9 @@ add_task(async function test_About_Welcome_Location_Change() {
aboutWelcomeActor.AboutWelcomeObserver.AWTerminate.ADDRESS_BAR_NAVIGATED,
"Terminated due to location uri changed"
);
+
+ // Wait for the end of the any transition happening due to
+ // location change before closing the window, See bug 1882067
+ // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
+ await new Promise(r => setTimeout(r, 100));
});
diff --git a/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_toolbar_button.js b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_toolbar_button.js
new file mode 100644
index 0000000000..c9180ddf2d
--- /dev/null
+++ b/browser/components/aboutwelcome/tests/browser/browser_aboutwelcome_toolbar_button.js
@@ -0,0 +1,64 @@
+"use strict";
+
+const { AboutWelcomeTelemetry } = ChromeUtils.importESModule(
+ "resource:///modules/aboutwelcome/AboutWelcomeTelemetry.sys.mjs"
+);
+const { AWToolbarButton } = ChromeUtils.importESModule(
+ "resource:///modules/aboutwelcome/AWToolbarUtils.sys.mjs"
+);
+
+const TOOLBAR_PREF = "browser.aboutwelcome.toolbarButtonEnabled";
+const DID_SEE_FINAL_SCREEN_PREF = "browser.aboutwelcome.didSeeFinalScreen";
+
+async function openNewTab() {
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:newtab",
+ false
+ );
+
+ registerCleanupFunction(async () => {
+ BrowserTestUtils.removeTab(tab);
+ await SpecialPowers.popPrefEnv();
+ });
+
+ return tab.linkedBrowser;
+}
+
+add_task(async function test_add_and_remove_toolbar_button() {
+ // Clear the final screen pref, which may have been set by other tests
+ await SpecialPowers.pushPrefEnv({
+ set: [[DID_SEE_FINAL_SCREEN_PREF, false]],
+ });
+ // Open newtab
+ let win = await BrowserTestUtils.openNewBrowserWindow();
+ win.BrowserOpenTab();
+ ok(win, "browser exists");
+ // Try to add the button. It shouldn't add because the pref is false
+ await AWToolbarButton.maybeAddSetupButton();
+ ok(
+ !win.document.getElementById("aboutwelcome-button"),
+ "Button should not exist"
+ );
+ // Set the pref and try again
+ await SpecialPowers.pushPrefEnv({
+ set: [[TOOLBAR_PREF, true]],
+ });
+ await AWToolbarButton.maybeAddSetupButton();
+ // The button should exist
+ ok(
+ win.document.getElementById("aboutwelcome-button"),
+ "Button should be added."
+ );
+ // Switch the pref to false and check again
+ await SpecialPowers.pushPrefEnv({
+ set: [[TOOLBAR_PREF, false]],
+ });
+ ok(
+ !win.document.getElementById("aboutwelcome-button"),
+ "Button should be removed"
+ );
+ // Cleanup
+ await SpecialPowers.popPrefEnv();
+ await BrowserTestUtils.closeWindow(win);
+});
diff --git a/browser/components/aboutwelcome/tests/unit/MultiStageAWProton.test.jsx b/browser/components/aboutwelcome/tests/unit/MultiStageAWProton.test.jsx
index a40af1c4a1..9b452d5c6b 100644
--- a/browser/components/aboutwelcome/tests/unit/MultiStageAWProton.test.jsx
+++ b/browser/components/aboutwelcome/tests/unit/MultiStageAWProton.test.jsx
@@ -385,6 +385,92 @@ describe("MultiStageAboutWelcomeProton module", () => {
assert.equal(textEl.at(0).prop("data-l10n-id"), "test-string-id");
assert.equal(textEl.at(1).prop("data-l10n-id"), "test-string-id-2");
});
+
+ it("should render above_button_content legal copy with MultiSelect tile", async () => {
+ const SCREEN_PROPS = {
+ content: {
+ tiles: {
+ type: "multiselect",
+ label: "Test Subtitle",
+ data: [
+ {
+ id: "checkbox-1",
+ type: "checkbox",
+ defaultValue: false,
+ label: { raw: "Checkbox 1" },
+ },
+ ],
+ },
+ above_button_content: [
+ {
+ type: "text",
+ text: {
+ string_id: "test-string-id",
+ },
+ font_styles: "legal",
+ link_keys: ["privacy_policy", "terms_of_use"],
+ },
+ ],
+ },
+ setScreenMultiSelects: sandbox.stub(),
+ setActiveMultiSelect: sandbox.stub(),
+ };
+
+ const wrapper = mount(<MultiStageProtonScreen {...SCREEN_PROPS} />);
+ assert.ok(wrapper.exists());
+ const legalText = wrapper.find(".legal-paragraph");
+ assert.equal(legalText.exists(), true);
+
+ const multiSelectContainer = wrapper.find(".multi-select-container");
+ assert.equal(multiSelectContainer.exists(), true);
+
+ sandbox.restore();
+ });
+
+ it("should not have no-rdm property when property is not in message content", () => {
+ const SCREEN_PROPS = {
+ content: {
+ title: "test title",
+ layout: "inline",
+ },
+ };
+ const wrapper = mount(<MultiStageProtonScreen {...SCREEN_PROPS} />);
+ assert.ok(wrapper.exists());
+ assert.notExists(wrapper.find("main").prop("no-rdm"));
+ });
+
+ it("should have no-rdm property when property is set in message content", () => {
+ const SCREEN_PROPS = {
+ content: {
+ title: "test title",
+ layout: "inline",
+ no_rdm: true,
+ },
+ };
+ const wrapper = mount(<MultiStageProtonScreen {...SCREEN_PROPS} />);
+ assert.ok(wrapper.exists());
+ assert.exists(wrapper.find("main").prop("no-rdm"));
+ });
+
+ it("should correctly set reverse-split prop", () => {
+ const SCREEN_PROPS = {
+ content: {
+ position: "split",
+ reverse_split: true,
+ title: "test title",
+ primary_button: {
+ label: "test primary button",
+ },
+ additional_button: {
+ label: "test additional button",
+ style: "link",
+ },
+ },
+ };
+ const wrapper = mount(<MultiStageProtonScreen {...SCREEN_PROPS} />);
+ assert.ok(wrapper.exists());
+ assert.equal(wrapper.find("main").prop("reverse-split"), "");
+ });
});
describe("AboutWelcomeDefaults for proton", () => {
@@ -568,4 +654,21 @@ describe("MultiStageAboutWelcomeProton module", () => {
);
});
});
+
+ describe("Embedded Migration Wizard", () => {
+ const SCREEN_PROPS = {
+ content: {
+ title: "test title",
+ tiles: {
+ type: "migration-wizard",
+ },
+ },
+ };
+
+ it("should render migration wizard", async () => {
+ const wrapper = mount(<MultiStageProtonScreen {...SCREEN_PROPS} />);
+ assert.ok(wrapper.exists());
+ assert.isTrue(wrapper.find("migration-wizard").exists());
+ });
+ });
});
diff --git a/browser/components/newtab/test/xpcshell/test_AboutWelcomeAttribution.js b/browser/components/aboutwelcome/tests/xpcshell/test_AboutWelcomeAttribution.js
index 3d83f473d5..3d83f473d5 100644
--- a/browser/components/newtab/test/xpcshell/test_AboutWelcomeAttribution.js
+++ b/browser/components/aboutwelcome/tests/xpcshell/test_AboutWelcomeAttribution.js
diff --git a/browser/components/newtab/test/xpcshell/test_AboutWelcomeTelemetry.js b/browser/components/aboutwelcome/tests/xpcshell/test_AboutWelcomeTelemetry.js
index b8339fb39f..b8339fb39f 100644
--- a/browser/components/newtab/test/xpcshell/test_AboutWelcomeTelemetry.js
+++ b/browser/components/aboutwelcome/tests/xpcshell/test_AboutWelcomeTelemetry.js
diff --git a/browser/components/newtab/test/xpcshell/test_AboutWelcomeTelemetry_glean.js b/browser/components/aboutwelcome/tests/xpcshell/test_AboutWelcomeTelemetry_glean.js
index 5191f05d04..5191f05d04 100644
--- a/browser/components/newtab/test/xpcshell/test_AboutWelcomeTelemetry_glean.js
+++ b/browser/components/aboutwelcome/tests/xpcshell/test_AboutWelcomeTelemetry_glean.js
diff --git a/browser/components/aboutwelcome/tests/xpcshell/xpcshell.toml b/browser/components/aboutwelcome/tests/xpcshell/xpcshell.toml
new file mode 100644
index 0000000000..d68ee3e51e
--- /dev/null
+++ b/browser/components/aboutwelcome/tests/xpcshell/xpcshell.toml
@@ -0,0 +1,9 @@
+[DEFAULT]
+skip-if = ["os == 'android'"]
+firefox-appdir = "browser"
+
+["test_AboutWelcomeAttribution.js"]
+
+["test_AboutWelcomeTelemetry.js"]
+
+["test_AboutWelcomeTelemetry_glean.js"]
diff --git a/browser/components/asrouter/.eslintrc.js b/browser/components/asrouter/.eslintrc.js
index 7a67e797e6..ef5bc81b68 100644
--- a/browser/components/asrouter/.eslintrc.js
+++ b/browser/components/asrouter/.eslintrc.js
@@ -15,7 +15,7 @@ module.exports = {
{
// TODO: Bug 1773467 - Move these to .mjs or figure out a generic way
// to identify these as modules.
- files: ["content-src/**/*.js", "tests/unit/**/*.js"],
+ files: ["tests/unit/**/*.js"],
parserOptions: {
sourceType: "module",
},
@@ -94,15 +94,12 @@ module.exports = {
"consistent-this": ["error", "use-bind"],
eqeqeq: "error",
"func-name-matching": "error",
- "getter-return": "error",
"guard-for-in": "error",
- "max-depth": ["error", 4],
"max-nested-callbacks": ["error", 4],
"max-params": ["error", 6],
"max-statements": ["error", 50],
"new-cap": ["error", { newIsCap: true, capIsNew: false }],
"no-alert": "error",
- "no-console": ["error", { allow: ["error"] }],
"no-div-regex": "error",
"no-duplicate-imports": "error",
"no-eq-null": "error",
diff --git a/browser/components/asrouter/README.md b/browser/components/asrouter/README.md
deleted file mode 100644
index 213093af86..0000000000
--- a/browser/components/asrouter/README.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Activity Stream Router
-
-## Preferences `browser.newtab.activity-stream.asrouter.*`
-
-Name | Used for | Type | Example value
---- | --- | --- | ---
-`allowHosts` | Allow a host in order to fetch messages from its endpoint | `[String]` | `["gist.github.com", "gist.githubusercontent.com", "localhost:8000"]`
-`providers.cfr` | Message provider options for cfr | `Object` | [see below](#message-providers)
-`providers.onboarding` | Message provider options for onboarding | `Object` | [see below](#message-providers)
-`useRemoteL10n` | Controls whether to use the remote Fluent files for l10n, default as `true` | `Boolean` | `[true|false]`
-
-### Message providers examples
-
-```json
-{
- "id" : "onboarding",
- "enabled": true,
- "type" : "local",
- "localProvider" : "OnboardingMessageProvider"
-}
-```
-
-### [Message format documentation](https://github.com/mozilla/activity-stream/blob/master/content-src/asrouter/schemas/message-format.md)
diff --git a/browser/components/asrouter/actors/ASRouterChild.sys.mjs b/browser/components/asrouter/actors/ASRouterChild.sys.mjs
index 8e5fd5ccf5..2096d92bb3 100644
--- a/browser/components/asrouter/actors/ASRouterChild.sys.mjs
+++ b/browser/components/asrouter/actors/ASRouterChild.sys.mjs
@@ -43,7 +43,7 @@ export class ASRouterChild extends JSWindowActorChild {
});
}
- handleEvent(event) {
+ handleEvent() {
// DOMDocElementCreated is only used to create the actor.
}
diff --git a/browser/components/asrouter/bin/import-rollouts.js b/browser/components/asrouter/bin/import-rollouts.js
index 63f8a555b4..d29a31a068 100644
--- a/browser/components/asrouter/bin/import-rollouts.js
+++ b/browser/components/asrouter/bin/import-rollouts.js
@@ -24,7 +24,7 @@
* };
*/
-/* eslint-disable max-depth, no-console */
+/* eslint-disable no-console */
const chalk = require("chalk");
const https = require("https");
const path = require("path");
diff --git a/browser/components/asrouter/content-src/asrouter-utils.js b/browser/components/asrouter/content-src/asrouter-utils.mjs
index 65d25cb907..989d864e71 100644
--- a/browser/components/asrouter/content-src/asrouter-utils.js
+++ b/browser/components/asrouter/content-src/asrouter-utils.mjs
@@ -2,23 +2,25 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
-import { MESSAGE_TYPE_HASH as msg } from "modules/ActorConstants.sys.mjs";
-import { actionCreators as ac } from "common/Actions.sys.mjs";
+// eslint-disable-next-line mozilla/reject-import-system-module-from-non-system
+import { MESSAGE_TYPE_HASH as msg } from "../modules/ActorConstants.sys.mjs";
+// eslint-disable-next-line mozilla/reject-import-system-module-from-non-system
+import { actionCreators as ac } from "../../newtab/common/Actions.sys.mjs";
export const ASRouterUtils = {
addListener(listener) {
- if (global.ASRouterAddParentListener) {
- global.ASRouterAddParentListener(listener);
+ if (globalThis.ASRouterAddParentListener) {
+ globalThis.ASRouterAddParentListener(listener);
}
},
removeListener(listener) {
- if (global.ASRouterRemoveParentListener) {
- global.ASRouterRemoveParentListener(listener);
+ if (globalThis.ASRouterRemoveParentListener) {
+ globalThis.ASRouterRemoveParentListener(listener);
}
},
sendMessage(action) {
- if (global.ASRouterMessage) {
- return global.ASRouterMessage(action);
+ if (globalThis.ASRouterMessage) {
+ return globalThis.ASRouterMessage(action);
}
throw new Error(`Unexpected call:\n${JSON.stringify(action, null, 3)}`);
},
diff --git a/browser/components/asrouter/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx b/browser/components/asrouter/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
index f16dbacbd8..befce707ef 100644
--- a/browser/components/asrouter/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
+++ b/browser/components/asrouter/content-src/components/ASRouterAdmin/ASRouterAdmin.jsx
@@ -258,7 +258,7 @@ export class ASRouterAdminInner extends React.PureComponent {
ASRouterUtils.sendMessage({ type: "RESET_PROVIDER_PREF" });
}
- resetGroups(id, value) {
+ resetGroups() {
ASRouterUtils.sendMessage({
type: "RESET_GROUPS_STATE",
}).then(this.setStateFromParent);
@@ -387,7 +387,7 @@ export class ASRouterAdminInner extends React.PureComponent {
}
// Simulate a copy event that sets to clipboard all targeting paramters and values
- onCopyTargetingParams(event) {
+ onCopyTargetingParams() {
const stringTargetingParameters = {
...this.state.stringTargetingParameters,
};
@@ -507,7 +507,7 @@ export class ASRouterAdminInner extends React.PureComponent {
isBlocked ? null : isModified ? (
<button
className="button restore"
- onClick={e => this.resetJSON(msg)}
+ onClick={() => this.resetJSON(msg)}
>
Reset
</button>
@@ -523,7 +523,7 @@ export class ASRouterAdminInner extends React.PureComponent {
{isBlocked ? null : (
<button
className="button modify"
- onClick={e => this.modifyJson(msg)}
+ onClick={() => this.modifyJson(msg)}
>
Modify
</button>
@@ -557,7 +557,7 @@ export class ASRouterAdminInner extends React.PureComponent {
name={msg.id}
className="general-textarea"
disabled={isBlocked}
- onChange={e => this.handleChange(msg.id)}
+ onChange={() => this.handleChange(msg.id)}
>
{JSON.stringify(msg, null, 2)}
</textarea>
@@ -647,7 +647,7 @@ export class ASRouterAdminInner extends React.PureComponent {
</button>
<button
className="ASRouterButton slim button"
- onClick={e => this.resetPBJSON(msg)}
+ onClick={() => this.resetPBJSON(msg)}
>
Reset JSON
</button>
@@ -698,7 +698,7 @@ export class ASRouterAdminInner extends React.PureComponent {
<div>
<button
className="ASRouterButton slim"
- onClick={e => this.toggleAllMessages(messagesToShow)}
+ onClick={() => this.toggleAllMessages(messagesToShow)}
>
Collapse/Expand All
</button>
@@ -1046,7 +1046,7 @@ export class ASRouterAdminInner extends React.PureComponent {
});
}
- setAttribution(e) {
+ setAttribution() {
ASRouterUtils.sendMessage({
type: "FORCE_ATTRIBUTION",
data: this.state.attributionParameters,
@@ -1307,7 +1307,7 @@ export class ASRouterAdminInner extends React.PureComponent {
<h2>Messages</h2>
<button
className="ASRouterButton slim button"
- onClick={e => this.toggleAllMessages(messagesToShow)}
+ onClick={() => this.toggleAllMessages(messagesToShow)}
>
Collapse/Expand All
</button>
@@ -1359,10 +1359,7 @@ export class ASRouterAdminInner extends React.PureComponent {
<tbody>
{this.state.groups &&
this.state.groups.map(
- (
- { id, enabled, frequency, userPreferences = [] },
- index
- ) => (
+ ({ id, enabled, frequency, userPreferences = [] }) => (
<Row key={id}>
<td>
<TogglePrefCheckbox
@@ -1473,7 +1470,7 @@ export class ASRouterAdminInner extends React.PureComponent {
Need help using these tools? Check out our{" "}
<a
target="blank"
- href="https://firefox-source-docs.mozilla.org/browser/components/newtab/content-src/asrouter/docs/debugging-docs.html"
+ href="https://firefox-source-docs.mozilla.org/browser/components/asrouter/docs/debugging-docs.html"
>
documentation
</a>
diff --git a/browser/components/asrouter/content-src/components/ASRouterAdmin/CopyButton.jsx b/browser/components/asrouter/content-src/components/ASRouterAdmin/CopyButton.jsx
index 6739d38b97..3233b42032 100644
--- a/browser/components/asrouter/content-src/components/ASRouterAdmin/CopyButton.jsx
+++ b/browser/components/asrouter/content-src/components/ASRouterAdmin/CopyButton.jsx
@@ -26,7 +26,7 @@ export const CopyButton = ({
timeout.current = setTimeout(() => setCopied(false), 1500);
}, [inputSelector, transformer]);
return (
- <button className={className} onClick={e => onClick()} {...props}>
+ <button className={className} onClick={() => onClick()} {...props}>
{(copied && copiedLabel) || label}
</button>
);
diff --git a/browser/components/asrouter/content-src/components/ConditionalWrapper/ConditionalWrapper.jsx b/browser/components/asrouter/content-src/components/ConditionalWrapper/ConditionalWrapper.jsx
deleted file mode 100644
index e4b0812f26..0000000000
--- a/browser/components/asrouter/content-src/components/ConditionalWrapper/ConditionalWrapper.jsx
+++ /dev/null
@@ -1,9 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// lifted from https://gist.github.com/kitze/23d82bb9eb0baabfd03a6a720b1d637f
-const ConditionalWrapper = ({ condition, wrap, children }) =>
- condition && wrap ? wrap(children) : children;
-
-export default ConditionalWrapper;
diff --git a/browser/components/asrouter/content-src/components/ImpressionsWrapper/ImpressionsWrapper.jsx b/browser/components/asrouter/content-src/components/ImpressionsWrapper/ImpressionsWrapper.jsx
deleted file mode 100644
index 8498bde03b..0000000000
--- a/browser/components/asrouter/content-src/components/ImpressionsWrapper/ImpressionsWrapper.jsx
+++ /dev/null
@@ -1,76 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-import React from "react";
-
-export const VISIBLE = "visible";
-export const VISIBILITY_CHANGE_EVENT = "visibilitychange";
-
-/**
- * Component wrapper used to send telemetry pings on every impression.
- */
-export class ImpressionsWrapper extends React.PureComponent {
- // This sends an event when a user sees a set of new content. If content
- // changes while the page is hidden (i.e. preloaded or on a hidden tab),
- // only send the event if the page becomes visible again.
- sendImpressionOrAddListener() {
- if (this.props.document.visibilityState === VISIBLE) {
- this.props.sendImpression({ id: this.props.id });
- } else {
- // We should only ever send the latest impression stats ping, so remove any
- // older listeners.
- if (this._onVisibilityChange) {
- this.props.document.removeEventListener(
- VISIBILITY_CHANGE_EVENT,
- this._onVisibilityChange
- );
- }
-
- // When the page becomes visible, send the impression stats ping if the section isn't collapsed.
- this._onVisibilityChange = () => {
- if (this.props.document.visibilityState === VISIBLE) {
- this.props.sendImpression({ id: this.props.id });
- this.props.document.removeEventListener(
- VISIBILITY_CHANGE_EVENT,
- this._onVisibilityChange
- );
- }
- };
- this.props.document.addEventListener(
- VISIBILITY_CHANGE_EVENT,
- this._onVisibilityChange
- );
- }
- }
-
- componentWillUnmount() {
- if (this._onVisibilityChange) {
- this.props.document.removeEventListener(
- VISIBILITY_CHANGE_EVENT,
- this._onVisibilityChange
- );
- }
- }
-
- componentDidMount() {
- if (this.props.sendOnMount) {
- this.sendImpressionOrAddListener();
- }
- }
-
- componentDidUpdate(prevProps) {
- if (this.props.shouldSendImpressionOnUpdate(this.props, prevProps)) {
- this.sendImpressionOrAddListener();
- }
- }
-
- render() {
- return this.props.children;
- }
-}
-
-ImpressionsWrapper.defaultProps = {
- document: global.document,
- sendOnMount: true,
-};
diff --git a/browser/components/asrouter/content-src/schemas/MessagingExperiment.schema.json b/browser/components/asrouter/content-src/schemas/MessagingExperiment.schema.json
index a395f4f990..fbabb109f8 100644
--- a/browser/components/asrouter/content-src/schemas/MessagingExperiment.schema.json
+++ b/browser/components/asrouter/content-src/schemas/MessagingExperiment.schema.json
@@ -752,6 +752,10 @@
"startScreen": {
"type": "integer",
"description": "Index of first screen to show from message, defaulting to 0"
+ },
+ "no-rdm": {
+ "type": "boolean",
+ "description": "If true, prevents the spotlight from entering responsive design mode at widths less than 800px"
}
},
"additionalProperties": true
diff --git a/browser/components/asrouter/content-src/schemas/message-format.md b/browser/components/asrouter/content-src/schemas/message-format.md
deleted file mode 100644
index 65f031e260..0000000000
--- a/browser/components/asrouter/content-src/schemas/message-format.md
+++ /dev/null
@@ -1,111 +0,0 @@
-## Activity Stream Router message format
-
-Field name | Type | Required | Description | Example / Note
---- | --- | --- | --- | ---
-`id` | `string` | Yes | A unique identifier for the message that should not conflict with any other previous message | `ONBOARDING_1`
-`template` | `string` | Yes | An id matching an existing Activity Stream Router template |
-`content` | `object` | Yes | An object containing all variables/props to be rendered in the template. Subset of allowed tags detailed below. | [See example below](#html-subset)
-`bundled` | `integer` | No | The number of messages of the same template this one should be shown with | [See example below](#a-bundled-message-example)
-`order` | `integer` | No | If bundled with other messages of the same template, which order should this one be placed in? Defaults to 0 if no order is desired | [See example below](#a-bundled-message-example)
-`campaign` | `string` | No | Campaign id that the message belongs to | `RustWebAssembly`
-`targeting` | `string` `JEXL` | No | A [JEXL expression](http://normandy.readthedocs.io/en/latest/user/filter_expressions.html#jexl-basics) with all targeting information needed in order to decide if the message is shown | Not yet implemented, [Examples](#targeting-attributes)
-`trigger` | `string` | No | An event or condition upon which the message will be immediately shown. This can be combined with `targeting`. Messages that define a trigger will not be shown during non-trigger-based passive message rotation.
-`trigger.params` | `[string]` | No | A set of hostnames passed down as parameters to the trigger condition. Used to restrict the number of domains where the trigger/message is valid. | [See example below](#trigger-params)
-`trigger.patterns` | `[string]` | No | A set of patterns that match multiple hostnames passed down as parameters to the trigger condition. Used to restrict the number of domains where the trigger/message is valid. | [See example below](#trigger-patterns)
-`frequency` | `object` | No | A definition for frequency cap information for the message
-`frequency.lifetime` | `integer` | No | The maximum number of lifetime impressions for the message.
-`frequency.custom` | `array` | No | An array of frequency cap definition objects including `period`, a time period in milliseconds, and `cap`, a max number of impressions for that period.
-
-### Message example
-```javascript
-{
- weight: 100,
- id: "PROTECTIONS_PANEL_1",
- template: "protections_panel",
- content: {
- title: {
- string_id: "cfr-protections-panel-header"
- },
- body: {
- string_id: "cfr-protections-panel-body"
- },
- link_text: {
- string_id: "cfr-protections-panel-link-text"
- },
- cta_url: "https://support.mozilla.org/1/firefox/121.0a1/Darwin/en-US/etp-promotions?as=u&utm_source=inproduct",
- cta_type: "OPEN_URL"
- },
- trigger: {
- id: "protectionsPanelOpen"
- },
- groups: [],
- provider: "onboarding"
-}
-```
-
-### A Bundled Message example
-The following 2 messages have a `bundled` property, indicating that they should be shown together, since they have the same template. The number `2` indicates that this message should be shown in a bundle of 2 messages of the same template. The order property defines that ONBOARDING_2 should be shown after ONBOARDING_3 in the bundle.
-```javascript
-{
- id: "ONBOARDING_2",
- template: "onboarding",
- bundled: 2,
- order: 2,
- content: {
- title: "Private Browsing",
- body: "Browse by yourself. Private Browsing with Tracking Protection blocks online trackers that follow you around the web."
- },
- targeting: "",
- trigger: "firstRun"
-}
-{
- id: "ONBOARDING_3",
- template: "onboarding",
- bundled: 2,
- order: 1,
- content: {
- title: "Find it faster",
- body: "Access all of your favorite search engines with a click. Search the whole Web or just one website from the search box."
- },
- targeting: "",
- trigger: "firstRun"
-}
-```
-
-### HTML subset
-The following tags are allowed in the content of a message: `i, b, u, strong, em, br`.
-
-Links cannot be rendered using regular anchor tags because [Fluent does not allow for href attributes](https://github.com/projectfluent/fluent.js/blob/a03d3aa833660f8c620738b26c80e46b1a4edb05/fluent-dom/src/overlay.js#L13). They will be wrapped in custom tags, for example `<cta>link</cta>` and the url will be provided as part of the payload:
-```
-{
- "id": "7899",
- "content": {
- "text": "Use the CMD (CTRL) + T keyboard shortcut to <cta>open a new tab quickly!</cta>",
- "links": {
- "cta": {
- "url": "https://support.mozilla.org/en-US/kb/keyboard-shortcuts-perform-firefox-tasks-quickly"
- }
- }
- }
-}
-```
-If a tag that is not on the allowed is used, the text content will be extracted and displayed.
-
-Grouping multiple allowed elements is not possible, only the first level will be used: `<u><b>text</b></u>` will be interpreted as `<u>text</u>`.
-
-### Trigger params
-A set of hostnames that need to exactly match the location of the selected tab in order for the trigger to execute.
-```
-["github.com", "wwww.github.com"]
-```
-More examples in the [CFRMessageProvider](https://github.com/mozilla/activity-stream/blob/e76ce12fbaaac1182aa492b84fc038f78c3acc33/lib/CFRMessageProvider.jsm#L40-L47).
-
-### Trigger patterns
-A set of patterns that can match multiple hostnames. When the location of the selected tab matches one of the patterns it can execute a trigger.
-```
-["*://*.github.com"] // can match `github.com` but also match `https://gist.github.com/`
-```
-More [MatchPattern examples](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Match_patterns#Examples).
-
-### Targeting attributes
-(This section has moved to [targeting-attributes.md](../docs/targeting-attributes.md)).
diff --git a/browser/components/asrouter/content-src/styles/_shopping.scss b/browser/components/asrouter/content-src/styles/_shopping.scss
index 218e996cb8..a13fbc8a74 100644
--- a/browser/components/asrouter/content-src/styles/_shopping.scss
+++ b/browser/components/asrouter/content-src/styles/_shopping.scss
@@ -85,6 +85,7 @@
margin-block: 0 20px;
padding-inline: 30px;
text-align: start;
+ color: inherit;
a {
text-decoration: underline;
diff --git a/browser/components/asrouter/content-src/templates/OnboardingMessage/Spotlight.schema.json b/browser/components/asrouter/content-src/templates/OnboardingMessage/Spotlight.schema.json
index 5d5b98f594..581f84dcc8 100644
--- a/browser/components/asrouter/content-src/templates/OnboardingMessage/Spotlight.schema.json
+++ b/browser/components/asrouter/content-src/templates/OnboardingMessage/Spotlight.schema.json
@@ -51,6 +51,10 @@
"startScreen": {
"type": "integer",
"description": "Index of first screen to show from message, defaulting to 0"
+ },
+ "no-rdm": {
+ "type": "boolean",
+ "description": "If true, prevents the spotlight from entering responsive design mode at widths less than 800px"
}
},
"additionalProperties": true
diff --git a/browser/components/asrouter/content/asrouter-admin.bundle.js b/browser/components/asrouter/content/asrouter-admin.bundle.js
index b92be649c6..b38d551a17 100644
--- a/browser/components/asrouter/content/asrouter-admin.bundle.js
+++ b/browser/components/asrouter/content/asrouter-admin.bundle.js
@@ -10,116 +10,105 @@ var ASRouterAdminRenderUtils;
/******/ var __webpack_modules__ = ([
/* 0 */,
/* 1 */
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "ASRouterUtils": () => (/* binding */ ASRouterUtils)
+/* harmony export */ ASRouterUtils: () => (/* binding */ ASRouterUtils)
/* harmony export */ });
-/* harmony import */ var modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
-/* harmony import */ var common_Actions_sys_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3);
+/* harmony import */ var _modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2);
+/* harmony import */ var _newtab_common_Actions_sys_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3);
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
+// eslint-disable-next-line mozilla/reject-import-system-module-from-non-system
+
+// eslint-disable-next-line mozilla/reject-import-system-module-from-non-system
const ASRouterUtils = {
addListener(listener) {
- if (__webpack_require__.g.ASRouterAddParentListener) {
- __webpack_require__.g.ASRouterAddParentListener(listener);
+ if (globalThis.ASRouterAddParentListener) {
+ globalThis.ASRouterAddParentListener(listener);
}
},
removeListener(listener) {
- if (__webpack_require__.g.ASRouterRemoveParentListener) {
- __webpack_require__.g.ASRouterRemoveParentListener(listener);
+ if (globalThis.ASRouterRemoveParentListener) {
+ globalThis.ASRouterRemoveParentListener(listener);
}
},
sendMessage(action) {
- if (__webpack_require__.g.ASRouterMessage) {
- return __webpack_require__.g.ASRouterMessage(action);
+ if (globalThis.ASRouterMessage) {
+ return globalThis.ASRouterMessage(action);
}
throw new Error(`Unexpected call:\n${JSON.stringify(action, null, 3)}`);
},
blockById(id, options) {
return ASRouterUtils.sendMessage({
- type: modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.BLOCK_MESSAGE_BY_ID,
- data: {
- id,
- ...options
- }
+ type: _modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.BLOCK_MESSAGE_BY_ID,
+ data: { id, ...options },
});
},
modifyMessageJson(content) {
return ASRouterUtils.sendMessage({
- type: modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.MODIFY_MESSAGE_JSON,
- data: {
- content
- }
+ type: _modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.MODIFY_MESSAGE_JSON,
+ data: { content },
});
},
executeAction(button_action) {
return ASRouterUtils.sendMessage({
- type: modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.USER_ACTION,
- data: button_action
+ type: _modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.USER_ACTION,
+ data: button_action,
});
},
unblockById(id) {
return ASRouterUtils.sendMessage({
- type: modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.UNBLOCK_MESSAGE_BY_ID,
- data: {
- id
- }
+ type: _modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.UNBLOCK_MESSAGE_BY_ID,
+ data: { id },
});
},
blockBundle(bundle) {
return ASRouterUtils.sendMessage({
- type: modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.BLOCK_BUNDLE,
- data: {
- bundle
- }
+ type: _modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.BLOCK_BUNDLE,
+ data: { bundle },
});
},
unblockBundle(bundle) {
return ASRouterUtils.sendMessage({
- type: modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.UNBLOCK_BUNDLE,
- data: {
- bundle
- }
+ type: _modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.UNBLOCK_BUNDLE,
+ data: { bundle },
});
},
overrideMessage(id) {
return ASRouterUtils.sendMessage({
- type: modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.OVERRIDE_MESSAGE,
- data: {
- id
- }
+ type: _modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.OVERRIDE_MESSAGE,
+ data: { id },
});
},
editState(key, value) {
return ASRouterUtils.sendMessage({
- type: modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.EDIT_STATE,
- data: {
- [key]: value
- }
+ type: _modules_ActorConstants_sys_mjs__WEBPACK_IMPORTED_MODULE_0__.MESSAGE_TYPE_HASH.EDIT_STATE,
+ data: { [key]: value },
});
},
sendTelemetry(ping) {
- return ASRouterUtils.sendMessage(common_Actions_sys_mjs__WEBPACK_IMPORTED_MODULE_1__.actionCreators.ASRouterUserEvent(ping));
+ return ASRouterUtils.sendMessage(_newtab_common_Actions_sys_mjs__WEBPACK_IMPORTED_MODULE_1__.actionCreators.ASRouterUserEvent(ping));
},
getPreviewEndpoint() {
return null;
- }
+ },
};
+
/***/ }),
/* 2 */
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "MESSAGE_TYPE_LIST": () => (/* binding */ MESSAGE_TYPE_LIST),
-/* harmony export */ "MESSAGE_TYPE_HASH": () => (/* binding */ MESSAGE_TYPE_HASH)
+/* harmony export */ MESSAGE_TYPE_HASH: () => (/* binding */ MESSAGE_TYPE_HASH),
+/* harmony export */ MESSAGE_TYPE_LIST: () => (/* binding */ MESSAGE_TYPE_LIST)
/* harmony export */ });
/* vim: set ts=2 sw=2 sts=2 et tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
@@ -178,15 +167,15 @@ const MESSAGE_TYPE_HASH = MESSAGE_TYPE_LIST.reduce((hash, value) => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "MAIN_MESSAGE_TYPE": () => (/* binding */ MAIN_MESSAGE_TYPE),
-/* harmony export */ "CONTENT_MESSAGE_TYPE": () => (/* binding */ CONTENT_MESSAGE_TYPE),
-/* harmony export */ "PRELOAD_MESSAGE_TYPE": () => (/* binding */ PRELOAD_MESSAGE_TYPE),
-/* harmony export */ "UI_CODE": () => (/* binding */ UI_CODE),
-/* harmony export */ "BACKGROUND_PROCESS": () => (/* binding */ BACKGROUND_PROCESS),
-/* harmony export */ "globalImportContext": () => (/* binding */ globalImportContext),
-/* harmony export */ "actionTypes": () => (/* binding */ actionTypes),
-/* harmony export */ "actionCreators": () => (/* binding */ actionCreators),
-/* harmony export */ "actionUtils": () => (/* binding */ actionUtils)
+/* harmony export */ BACKGROUND_PROCESS: () => (/* binding */ BACKGROUND_PROCESS),
+/* harmony export */ CONTENT_MESSAGE_TYPE: () => (/* binding */ CONTENT_MESSAGE_TYPE),
+/* harmony export */ MAIN_MESSAGE_TYPE: () => (/* binding */ MAIN_MESSAGE_TYPE),
+/* harmony export */ PRELOAD_MESSAGE_TYPE: () => (/* binding */ PRELOAD_MESSAGE_TYPE),
+/* harmony export */ UI_CODE: () => (/* binding */ UI_CODE),
+/* harmony export */ actionCreators: () => (/* binding */ actionCreators),
+/* harmony export */ actionTypes: () => (/* binding */ actionTypes),
+/* harmony export */ actionUtils: () => (/* binding */ actionUtils),
+/* harmony export */ globalImportContext: () => (/* binding */ globalImportContext)
/* harmony export */ });
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -665,7 +654,7 @@ module.exports = ReactDOM;
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "SimpleHashRouter": () => (/* binding */ SimpleHashRouter)
+/* harmony export */ SimpleHashRouter: () => (/* binding */ SimpleHashRouter)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -710,7 +699,7 @@ class SimpleHashRouter extends (react__WEBPACK_IMPORTED_MODULE_0___default().Pur
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "CopyButton": () => (/* binding */ CopyButton)
+/* harmony export */ CopyButton: () => (/* binding */ CopyButton)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
@@ -742,7 +731,7 @@ const CopyButton = ({
}, [inputSelector, transformer]);
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("button", _extends({
className: className,
- onClick: e => onClick()
+ onClick: () => onClick()
}, props), copied && copiedLabel || label);
};
@@ -752,7 +741,7 @@ const CopyButton = ({
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "ImpressionsSection": () => (/* binding */ ImpressionsSection)
+/* harmony export */ ImpressionsSection: () => (/* binding */ ImpressionsSection)
/* harmony export */ });
/* harmony import */ var _asrouter_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4);
@@ -967,12 +956,12 @@ var __webpack_exports__ = {};
(() => {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "ToggleStoryButton": () => (/* binding */ ToggleStoryButton),
-/* harmony export */ "ToggleMessageJSON": () => (/* binding */ ToggleMessageJSON),
-/* harmony export */ "TogglePrefCheckbox": () => (/* binding */ TogglePrefCheckbox),
-/* harmony export */ "ASRouterAdminInner": () => (/* binding */ ASRouterAdminInner),
-/* harmony export */ "ASRouterAdmin": () => (/* binding */ ASRouterAdmin),
-/* harmony export */ "renderASRouterAdmin": () => (/* binding */ renderASRouterAdmin)
+/* harmony export */ ASRouterAdmin: () => (/* binding */ ASRouterAdmin),
+/* harmony export */ ASRouterAdminInner: () => (/* binding */ ASRouterAdminInner),
+/* harmony export */ ToggleMessageJSON: () => (/* binding */ ToggleMessageJSON),
+/* harmony export */ TogglePrefCheckbox: () => (/* binding */ TogglePrefCheckbox),
+/* harmony export */ ToggleStoryButton: () => (/* binding */ ToggleStoryButton),
+/* harmony export */ renderASRouterAdmin: () => (/* binding */ renderASRouterAdmin)
/* harmony export */ });
/* harmony import */ var _asrouter_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1);
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4);
@@ -1205,7 +1194,7 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
type: "RESET_PROVIDER_PREF"
});
}
- resetGroups(id, value) {
+ resetGroups() {
_asrouter_utils__WEBPACK_IMPORTED_MODULE_0__.ASRouterUtils.sendMessage({
type: "RESET_GROUPS_STATE"
}).then(this.setStateFromParent);
@@ -1342,7 +1331,7 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
}
// Simulate a copy event that sets to clipboard all targeting paramters and values
- onCopyTargetingParams(event) {
+ onCopyTargetingParams() {
const stringTargetingParameters = {
...this.state.stringTargetingParameters
};
@@ -1430,13 +1419,13 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
// eslint-disable-next-line no-nested-ternary
isBlocked ? null : isModified ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", {
className: "button restore",
- onClick: e => this.resetJSON(msg)
+ onClick: () => this.resetJSON(msg)
}, "Reset") : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", {
className: "button show",
onClick: this.handleOverride(msg.id)
}, "Show"), isBlocked ? null : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", {
className: "button modify",
- onClick: e => this.modifyJson(msg)
+ onClick: () => this.modifyJson(msg)
}, "Modify"), aboutMessagePreviewSupported ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(_CopyButton__WEBPACK_IMPORTED_MODULE_4__.CopyButton, {
transformer: text => `about:messagepreview?json=${encodeURIComponent(btoa(text))}`,
label: "Share",
@@ -1452,7 +1441,7 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
name: msg.id,
className: "general-textarea",
disabled: isBlocked,
- onChange: e => this.handleChange(msg.id)
+ onChange: () => this.handleChange(msg.id)
}, JSON.stringify(msg, null, 2))))));
}
selectPBMessage(msgId) {
@@ -1511,7 +1500,7 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
onClick: isBlocked ? this.handleUnblock(msg) : this.handleBlock(msg)
}, isBlocked ? "Unblock" : "Block"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", {
className: "ASRouterButton slim button",
- onClick: e => this.resetPBJSON(msg)
+ onClick: () => this.resetPBJSON(msg)
}, "Reset JSON")), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("td", {
className: `message-summary`
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("pre", {
@@ -1542,7 +1531,7 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
const messagesToShow = this.state.messageFilter === "all" ? this.state.messages : this.state.messages.filter(message => message.provider === this.state.messageFilter && message.template !== "pb_newtab");
return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("div", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", {
className: "ASRouterButton slim",
- onClick: e => this.toggleAllMessages(messagesToShow)
+ onClick: () => this.toggleAllMessages(messagesToShow)
}, "Collapse/Expand All"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("p", {
className: "helpLink"
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("span", {
@@ -1726,7 +1715,7 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
};
});
}
- setAttribution(e) {
+ setAttribution() {
_asrouter_utils__WEBPACK_IMPORTED_MODULE_0__.ASRouterUtils.sendMessage({
type: "FORCE_ATTRIBUTION",
data: this.state.attributionParameters
@@ -1844,7 +1833,7 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
}
}), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("h2", null, "Messages"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("button", {
className: "ASRouterButton slim button",
- onClick: e => this.toggleAllMessages(messagesToShow)
+ onClick: () => this.toggleAllMessages(messagesToShow)
}, "Collapse/Expand All"), this.renderPBMessages()));
}
getSection() {
@@ -1868,7 +1857,7 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
enabled,
frequency,
userPreferences = []
- }, index) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(Row, {
+ }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(Row, {
key: id
}, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("td", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement(TogglePrefCheckbox, {
checked: enabled,
@@ -1921,7 +1910,7 @@ class ASRouterAdminInner extends (react__WEBPACK_IMPORTED_MODULE_1___default().P
className: "icon icon-small-spacer icon-info"
}), " ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("span", null, "Need help using these tools? Check out our", " ", /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1___default().createElement("a", {
target: "blank",
- href: "https://firefox-source-docs.mozilla.org/browser/components/newtab/content-src/asrouter/docs/debugging-docs.html"
+ href: "https://firefox-source-docs.mozilla.org/browser/components/asrouter/docs/debugging-docs.html"
}, "documentation"))), this.getSection()));
}
}
diff --git a/browser/components/asrouter/content/components/ASRouterAdmin/ASRouterAdmin.css b/browser/components/asrouter/content/components/ASRouterAdmin/ASRouterAdmin.css
index aaf15a9a15..de14572006 100644
--- a/browser/components/asrouter/content/components/ASRouterAdmin/ASRouterAdmin.css
+++ b/browser/components/asrouter/content/components/ASRouterAdmin/ASRouterAdmin.css
@@ -5,9 +5,9 @@
:root {
--newtab-background-color: #F9F9FB;
--newtab-background-color-secondary: #FFF;
- --newtab-text-primary-color: #15141a;
- --newtab-primary-action-background: #0061e0;
- --newtab-primary-action-background-pocket: #008078;
+ --newtab-text-primary-color: rgb(21, 20, 26);
+ --newtab-primary-action-background: rgb(0, 97, 224);
+ --newtab-primary-action-background-pocket: rgb(0, 128, 120);
--newtab-text-secondary-color: color-mix(in srgb, var(--newtab-text-primary-color) 70%, transparent);
--newtab-element-hover-color: color-mix(in srgb, var(--newtab-background-color) 90%, #000);
--newtab-element-active-color: color-mix(in srgb, var(--newtab-background-color) 80%, #000);
@@ -32,10 +32,10 @@
}
:root[lwt-newtab-brighttext] {
--newtab-background-color: #2B2A33;
- --newtab-background-color-secondary: #42414d;
- --newtab-text-primary-color: #fbfbfe;
- --newtab-primary-action-background: #00ddff;
- --newtab-primary-action-background-pocket: #00ddff;
+ --newtab-background-color-secondary: rgb(66, 65, 77);
+ --newtab-text-primary-color: rgb(251, 251, 254);
+ --newtab-primary-action-background: rgb(0, 221, 255);
+ --newtab-primary-action-background-pocket: rgb(0, 221, 255);
--newtab-primary-action-background-pocket-dimmed: color-mix(in srgb, var(--newtab-primary-action-background) 25%, transparent);
--newtab-primary-element-hover-color: color-mix(in srgb, var(--newtab-primary-action-background) 55%, #FFF);
--newtab-primary-element-hover-pocket-color: color-mix(in srgb, var(--newtab-primary-action-background-pocket) 55%, #FFF);
@@ -45,8 +45,8 @@
--newtab-element-secondary-hover-color: color-mix(in srgb, currentColor 17%, transparent);
--newtab-element-secondary-active-color: color-mix(in srgb, currentColor 30%, transparent);
--newtab-border-color: color-mix(in srgb, var(--newtab-background-color) 75%, #FFF);
- --newtab-primary-element-text-color: #2b2a33;
- --newtab-wordmark-color: #fbfbfe;
+ --newtab-primary-element-text-color: rgb(43, 42, 51);
+ --newtab-wordmark-color: rgb(251, 251, 254);
--newtab-status-success: #7C6;
}
@@ -111,6 +111,9 @@
.icon.icon-info {
background-image: url("chrome://global/skin/icons/info.svg");
}
+.icon.icon-help {
+ background-image: url("chrome://global/skin/icons/help.svg");
+}
.icon.icon-new-window {
background-image: url("chrome://activity-stream/content/data/content/assets/glyph-newWindow-16.svg");
}
diff --git a/browser/components/asrouter/docs/telemetry.md b/browser/components/asrouter/docs/telemetry.md
index 4484a3eaf4..67c5385ae9 100644
--- a/browser/components/asrouter/docs/telemetry.md
+++ b/browser/components/asrouter/docs/telemetry.md
@@ -86,5 +86,5 @@ before we can automatically act on them.
* If you have any questions, the Glean Team is available across a lot of
timezones on the [`#glean:mozilla.org` channel](https://chat.mozilla.org/#/room/#glean:mozilla.org) on Matrix and Slack `#data-help`.
- [submit-glean-for-glean]: https://searchfox.org/mozilla-central/search?q=.submitGleanPingForPing&path=*.jsm&case=false&regexp=false
+ [submit-glean-for-glean]: https://searchfox.org/mozilla-central/search?q=.submitGleanPingForPing&path=*.sys.mjs&case=false&regexp=false
[metrics-yaml]: https://searchfox.org/mozilla-central/source/browser/components/newtab/metrics.yaml
diff --git a/browser/components/asrouter/karma.mc.config.js b/browser/components/asrouter/karma.mc.config.js
index b27a8dc447..cfabcc4eea 100644
--- a/browser/components/asrouter/karma.mc.config.js
+++ b/browser/components/asrouter/karma.mc.config.js
@@ -75,43 +75,30 @@ module.exports = function (config) {
statements: 80,
lines: 80,
functions: 80,
- branches: 66,
+ branches: 80,
overrides: {
- "content-src/asrouter-utils.js": {
- statements: 66,
- lines: 66,
- functions: 76,
- branches: 33,
- },
- "content-src/components/ASRouterAdmin/*.jsx": {
+ "content-src/components/ASRouterAdmin/SimpleHashRouter.jsx": {
statements: 0,
- lines: 0,
functions: 0,
- branches: 0,
- },
- "content-src/components/ModalOverlay/ModalOverlay.jsx": {
- statements: 92,
- lines: 92,
- functions: 100,
- branches: 66,
+ lines: 0,
},
- "modules/ASRouter.sys.mjs": {
- statements: 75,
- lines: 75,
- functions: 64,
- branches: 66,
+ "content-src/components/ASRouterAdmin/CopyButton.jsx": {
+ statements: 7.14,
+ lines: 7.69,
+ branches: 0,
+ functions: 0,
},
- "modules/ASRouterParentProcessMessageHandler.sys.mjs": {
- statements: 98,
- lines: 98,
- functions: 100,
- branches: 88,
+ "content-src/components/ASRouterAdmin/ImpressionsSection.jsx": {
+ statements: 7.14,
+ lines: 7.5,
+ branches: 0,
+ functions: 0,
},
- "modules/ToolbarPanelHub.sys.mjs": {
- statements: 88,
- lines: 88,
- functions: 94,
- branches: 84,
+ "content-src/components/ASRouterAdmin/ASRouterAdmin.jsx": {
+ statements: 39.19,
+ lines: 39.19,
+ branches: 47.15,
+ functions: 32.08,
},
},
},
@@ -122,24 +109,14 @@ module.exports = function (config) {
webpack: {
mode: "none",
devtool: "inline-source-map",
- // This loader allows us to override required files in tests
- resolveLoader: {
- alias: {
- inject: path.join(__dirname, "../newtab/loaders/inject-loader"),
- },
- },
// This resolve config allows us to import with paths relative to the root directory
resolve: {
- extensions: [".js", ".jsx"],
+ extensions: [".mjs", ".js", ".jsx"],
modules: [
PATHS.moduleResolveDirectory,
"node_modules",
PATHS.newtabResolveDirectory,
],
- fallback: {
- stream: require.resolve("stream-browserify"),
- buffer: require.resolve("buffer"),
- },
alias: {
newtab: path.join(__dirname, "../newtab"),
},
@@ -191,7 +168,7 @@ module.exports = function (config) {
},
{
enforce: "post",
- test: /\.js[mx]?$/,
+ test: /\.js[x]?$/,
loader: "@jsdevtools/coverage-istanbul-loader",
options: { esModules: true },
include: [path.resolve("content-src"), path.resolve("modules")],
diff --git a/browser/components/asrouter/modules/ASRouter.sys.mjs b/browser/components/asrouter/modules/ASRouter.sys.mjs
index f6657a39b9..e46c57f685 100644
--- a/browser/components/asrouter/modules/ASRouter.sys.mjs
+++ b/browser/components/asrouter/modules/ASRouter.sys.mjs
@@ -106,18 +106,10 @@ const TOPIC_EXPERIMENT_ENROLLMENT_CHANGED = "nimbus:enrollments-updated";
const USE_REMOTE_L10N_PREF =
"browser.newtabpage.activity-stream.asrouter.useRemoteL10n";
-// Experiment groups that need to report the reach event in Messaging-Experiments.
-// If you're adding new groups to it, make sure they're also added in the
-// `messaging_experiments.reach.objects` defined in "toolkit/components/telemetry/Events.yaml"
-const REACH_EVENT_GROUPS = [
- "cfr",
- "moments-page",
- "infobar",
- "spotlight",
- "featureCallout",
-];
const REACH_EVENT_CATEGORY = "messaging_experiments";
const REACH_EVENT_METHOD = "reach";
+// Reach for the pbNewtab feature will be added in bug 1755401
+const NO_REACH_EVENT_GROUPS = ["pbNewtab"];
export const MessageLoaderUtils = {
STARTPAGE_VERSION,
@@ -405,7 +397,11 @@ export const MessageLoaderUtils = {
// Add Reach messages from unenrolled sibling branches, provided we are
// recording Reach events for this feature. If we are in a rollout, we do
// not have sibling branches.
- if (!REACH_EVENT_GROUPS.includes(featureId) || !experimentData) {
+ if (
+ NO_REACH_EVENT_GROUPS.includes(featureId) ||
+ !MESSAGING_EXPERIMENTS_DEFAULT_FEATURES.includes(featureId) ||
+ !experimentData
+ ) {
continue;
}
@@ -947,7 +943,7 @@ export class _ASRouter {
return this.state;
}
- async _onLocaleChanged(subject, topic, data) {
+ async _onLocaleChanged() {
await this._maybeUpdateL10nAttachment();
}
@@ -1743,7 +1739,7 @@ export class _ASRouter {
}
// Update storage
this._storage.set("groupImpressions", newGroupImpressions);
- return this.setState(({ groups }) => ({
+ return this.setState(() => ({
groupImpressions: newGroupImpressions,
}));
}
diff --git a/browser/components/asrouter/modules/ASRouterPreferences.sys.mjs b/browser/components/asrouter/modules/ASRouterPreferences.sys.mjs
index c7617d80c0..e9a08fe259 100644
--- a/browser/components/asrouter/modules/ASRouterPreferences.sys.mjs
+++ b/browser/components/asrouter/modules/ASRouterPreferences.sys.mjs
@@ -9,7 +9,7 @@ const DEVTOOLS_PREF =
/**
* Use `ASRouterPreferences.console.debug()` and friends from ASRouter files to
- * log messages during development. See LOG_LEVELS in ConsoleAPI.jsm for the
+ * log messages during development. See LOG_LEVELS in Console.sys.mjs for the
* available methods as well as the available values for this pref.
*/
const DEBUG_PREF = "browser.newtabpage.activity-stream.asrouter.debugLogLevel";
diff --git a/browser/components/asrouter/modules/ASRouterTargeting.sys.mjs b/browser/components/asrouter/modules/ASRouterTargeting.sys.mjs
index a262f8911e..d76b303fc6 100644
--- a/browser/components/asrouter/modules/ASRouterTargeting.sys.mjs
+++ b/browser/components/asrouter/modules/ASRouterTargeting.sys.mjs
@@ -576,7 +576,7 @@ const TargetingGetters = {
lazy.fxAccounts
.getSignedInUser()
.then(data => resolve(!!data))
- .catch(e => resolve(false));
+ .catch(() => resolve(false));
});
},
get sync() {
diff --git a/browser/components/asrouter/modules/ASRouterTriggerListeners.sys.mjs b/browser/components/asrouter/modules/ASRouterTriggerListeners.sys.mjs
index d8eaa3994d..fb4680085c 100644
--- a/browser/components/asrouter/modules/ASRouterTriggerListeners.sys.mjs
+++ b/browser/components/asrouter/modules/ASRouterTriggerListeners.sys.mjs
@@ -446,7 +446,7 @@ export const ASRouterTriggerListeners = new Map([
}
},
- observe(aSubject, aTopic, aData) {
+ observe(aSubject, aTopic) {
if (aSubject.currentURI.asciiHost === "accounts.firefox.com") {
// Don't notify about saved logins on the FxA login origin since this
// trigger is used to promote login Sync and getting a recommendation
@@ -562,7 +562,7 @@ export const ASRouterTriggerListeners = new Map([
_sessionPageLoad: 0,
onLocationChange: null,
- init(triggerHandler, params, patterns) {
+ init(triggerHandler, params) {
params.forEach(p => this._events.push(p));
if (!this._initialized) {
@@ -610,7 +610,7 @@ export const ASRouterTriggerListeners = new Map([
this._sessionPageLoad = 0;
},
- observe(aSubject, aTopic, aData) {
+ observe(aSubject, aTopic) {
switch (aTopic) {
case "SiteProtection:ContentBlockingEvent":
const { browser, host, event } = aSubject.wrappedJSObject;
@@ -690,7 +690,7 @@ export const ASRouterTriggerListeners = new Map([
this._triggerHandler = triggerHandler;
},
- observe(aSubject, aTopic, aData) {
+ observe(aSubject, aTopic) {
switch (aTopic) {
case "captive-portal-login-success":
const browser = Services.wm.getMostRecentBrowserWindow();
diff --git a/browser/components/asrouter/modules/CFRPageActions.sys.mjs b/browser/components/asrouter/modules/CFRPageActions.sys.mjs
index cf7719d9eb..392173f754 100644
--- a/browser/components/asrouter/modules/CFRPageActions.sys.mjs
+++ b/browser/components/asrouter/modules/CFRPageActions.sys.mjs
@@ -792,7 +792,7 @@ export class PageAction {
* Respond to a user click on the recommendation by showing a doorhanger/
* popup notification or running the action defined in the message
*/
- async _cfrUrlbarButtonClick(event) {
+ async _cfrUrlbarButtonClick() {
const browser = this.window.gBrowser.selectedBrowser;
if (!RecommendationMap.has(browser)) {
// There's no recommendation for this browser, so the user shouldn't have
diff --git a/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs b/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs
index 7ede6c9bf8..3f5ed713f1 100644
--- a/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs
+++ b/browser/components/asrouter/modules/FeatureCalloutBroker.sys.mjs
@@ -192,7 +192,7 @@ export class _FeatureCalloutBroker {
return item;
}
- handleFeatureCalloutCallback(win, event, data) {
+ handleFeatureCalloutCallback(win, event) {
switch (event) {
case "end":
const item = this.#calloutMap.get(win);
diff --git a/browser/components/asrouter/modules/MessagingExperimentConstants.sys.mjs b/browser/components/asrouter/modules/MessagingExperimentConstants.sys.mjs
index 5960ab92cc..5a07efb687 100644
--- a/browser/components/asrouter/modules/MessagingExperimentConstants.sys.mjs
+++ b/browser/components/asrouter/modules/MessagingExperimentConstants.sys.mjs
@@ -15,6 +15,10 @@
* FeatureManifest.yaml. Conversely, messaging experiment features contain
* actual messages, with the usual message keys like `template` and `targeting`.
* @see FeatureManifest.yaml
+ * Messages delivered through these feature IDs record reach events, with the
+ * exception of "pbNewtab". If you're adding new features to this list, make
+ * sure they're also added in the `messaging_experiments.reach.objects` defined
+ * in "toolkit/components/telemetry/Events.yaml"
*/
export const MESSAGING_EXPERIMENTS_DEFAULT_FEATURES = [
"cfr",
diff --git a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
index 6164e3e72a..ceded6b755 100644
--- a/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
+++ b/browser/components/asrouter/modules/OnboardingMessageProvider.sys.mjs
@@ -1129,7 +1129,7 @@ const BASE_MESSAGES = () => [
lifetime: 2,
},
targeting:
- "source == 'startup' && !isMajorUpgrade && !activeNotifications && !isDefaultBrowser && !willShowDefaultPrompt && (currentDate|date - profileAgeCreated|date) / 86400000 >= 28 && userPrefs.cfrFeatures == true",
+ "source == 'startup' && !isMajorUpgrade && !activeNotifications && !isDefaultBrowser && !willShowDefaultPrompt && 'browser.shell.checkDefaultBrowser'|preferenceValue && (currentDate|date - profileAgeCreated|date) / 86400000 >= 28 && userPrefs.cfrFeatures == true",
trigger: {
id: "defaultBrowserCheck",
},
@@ -1205,7 +1205,7 @@ const BASE_MESSAGES = () => [
lifetime: 1,
},
targeting:
- "source == 'startup' && !isMajorUpgrade && !activeNotifications && !isDefaultBrowser && !willShowDefaultPrompt && (currentDate|date - profileAgeCreated|date) / 86400000 <= 28 && (currentDate|date - profileAgeCreated|date) / 86400000 >= 7 && userPrefs.cfrFeatures == true",
+ "source == 'startup' && !isMajorUpgrade && !activeNotifications && !isDefaultBrowser && !willShowDefaultPrompt && 'browser.shell.checkDefaultBrowser'|preferenceValue && (currentDate|date - profileAgeCreated|date) / 86400000 <= 28 && (currentDate|date - profileAgeCreated|date) / 86400000 >= 7 && userPrefs.cfrFeatures == true",
trigger: {
id: "defaultBrowserCheck",
},
diff --git a/browser/components/asrouter/modules/ToastNotification.sys.mjs b/browser/components/asrouter/modules/ToastNotification.sys.mjs
index 136225cf61..fa30002daa 100644
--- a/browser/components/asrouter/modules/ToastNotification.sys.mjs
+++ b/browser/components/asrouter/modules/ToastNotification.sys.mjs
@@ -123,7 +123,7 @@ export const ToastNotification = {
}
let shownPromise = Promise.withResolvers();
- let obs = (subject, topic, data) => {
+ let obs = (subject, topic) => {
if (topic === "alertshow") {
shownPromise.resolve();
}
diff --git a/browser/components/asrouter/modules/ToolbarBadgeHub.sys.mjs b/browser/components/asrouter/modules/ToolbarBadgeHub.sys.mjs
index 7832ae9456..57fd104f19 100644
--- a/browser/components/asrouter/modules/ToolbarBadgeHub.sys.mjs
+++ b/browser/components/asrouter/modules/ToolbarBadgeHub.sys.mjs
@@ -81,7 +81,7 @@ export class _ToolbarBadgeHub {
win.MozXULElement.insertFTLIfNeeded("browser/newtab/asrouter.ftl");
}
- executeAction({ id, data, message_id }) {
+ executeAction({ id }) {
switch (id) {
case "show-whatsnew-button":
lazy.ToolbarPanelHub.enableToolbarButton();
diff --git a/browser/components/asrouter/package-lock.json b/browser/components/asrouter/package-lock.json
index 58bddccf28..f10630ad3a 100644
--- a/browser/components/asrouter/package-lock.json
+++ b/browser/components/asrouter/package-lock.json
@@ -1,7 +1,7 @@
{
"name": "ASRouter",
"version": "1.0.0",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
@@ -9,23 +9,22 @@
"version": "1.0.0",
"license": "MPL-2.0",
"dependencies": {
- "@fluent/bundle": "0.17.1",
- "@fluent/react": "0.15.0",
+ "@fluent/bundle": "0.18.0",
+ "@fluent/react": "0.15.2",
"react": "16.13.1",
"react-dom": "16.13.1",
"react-redux": "7.2.6",
"redux": "4.1.2"
},
"devDependencies": {
- "@babel/preset-react": "7.16.0",
+ "@babel/preset-react": "7.23.3",
"@jsdevtools/coverage-istanbul-loader": "^3.0.5",
- "babel-loader": "8.2.3",
- "babel-plugin-jsm-to-esmodules": "0.6.0",
+ "babel-loader": "9.1.3",
"chai": "4.3.4",
"chai-json-schema": "1.5.1",
"enzyme": "3.11.0",
- "enzyme-adapter-react-16": "1.15.6",
- "karma": "6.3.8",
+ "enzyme-adapter-react-16": "1.15.8",
+ "karma": "6.4.2",
"karma-chai": "0.1.0",
"karma-coverage-istanbul-reporter": "3.0.3",
"karma-firefox-launcher": "2.1.2",
@@ -33,23 +32,22 @@
"karma-mocha": "2.0.1",
"karma-mocha-reporter": "2.2.5",
"karma-sinon": "1.0.5",
- "karma-sourcemap-loader": "0.3.8",
- "karma-webpack": "5.0.0",
- "mocha": "9.1.3",
+ "karma-sourcemap-loader": "0.4.0",
+ "karma-webpack": "5.0.1",
+ "mocha": "10.3.0",
"npm-run-all": "4.1.5",
"raw-loader": "4.0.2",
- "sass": "1.43.4",
- "sinon": "12.0.1",
- "stream-browserify": "3.0.0",
- "webpack": "5.56.0",
- "webpack-cli": "4.9.1",
+ "sass": "1.71.1",
+ "sinon": "17.0.1",
+ "webpack": "5.90.3",
+ "webpack-cli": "5.1.4",
"yamscripts": "0.1.0"
},
"engines": {
"//": "when changing node versions, also edit .nvmrc",
- "firefox": ">=45.0 <=*",
- "node": "16.19.*",
- "npm": "8.19.3"
+ "firefox": ">=122.0 <=*",
+ "node": "18.19.*",
+ "npm": "10.2.*"
}
},
"node_modules/@ampproject/remapping": {
@@ -88,9 +86,9 @@
}
},
"node_modules/@babel/core": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz",
- "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz",
+ "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.2.0",
@@ -98,11 +96,11 @@
"@babel/generator": "^7.23.6",
"@babel/helper-compilation-targets": "^7.23.6",
"@babel/helper-module-transforms": "^7.23.3",
- "@babel/helpers": "^7.23.7",
- "@babel/parser": "^7.23.6",
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.7",
- "@babel/types": "^7.23.6",
+ "@babel/helpers": "^7.23.9",
+ "@babel/parser": "^7.23.9",
+ "@babel/template": "^7.23.9",
+ "@babel/traverse": "^7.23.9",
+ "@babel/types": "^7.23.9",
"convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -286,14 +284,14 @@
}
},
"node_modules/@babel/helpers": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz",
- "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz",
+ "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.7",
- "@babel/types": "^7.23.6"
+ "@babel/template": "^7.23.9",
+ "@babel/traverse": "^7.23.9",
+ "@babel/types": "^7.23.9"
},
"engines": {
"node": ">=6.9.0"
@@ -314,9 +312,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
- "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz",
+ "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -406,17 +404,17 @@
}
},
"node_modules/@babel/preset-react": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz",
- "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz",
+ "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-react-display-name": "^7.16.0",
- "@babel/plugin-transform-react-jsx": "^7.16.0",
- "@babel/plugin-transform-react-jsx-development": "^7.16.0",
- "@babel/plugin-transform-react-pure-annotations": "^7.16.0"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
+ "@babel/plugin-transform-react-display-name": "^7.23.3",
+ "@babel/plugin-transform-react-jsx": "^7.22.15",
+ "@babel/plugin-transform-react-jsx-development": "^7.22.5",
+ "@babel/plugin-transform-react-pure-annotations": "^7.23.3"
},
"engines": {
"node": ">=6.9.0"
@@ -426,9 +424,9 @@
}
},
"node_modules/@babel/runtime": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.7.tgz",
- "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz",
+ "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==",
"dependencies": {
"regenerator-runtime": "^0.14.0"
},
@@ -437,23 +435,23 @@
}
},
"node_modules/@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz",
+ "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
+ "@babel/code-frame": "^7.23.5",
+ "@babel/parser": "^7.23.9",
+ "@babel/types": "^7.23.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
- "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz",
+ "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.23.5",
@@ -462,8 +460,8 @@
"@babel/helper-function-name": "^7.23.0",
"@babel/helper-hoist-variables": "^7.22.5",
"@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.6",
- "@babel/types": "^7.23.6",
+ "@babel/parser": "^7.23.9",
+ "@babel/types": "^7.23.9",
"debug": "^4.3.1",
"globals": "^11.1.0"
},
@@ -472,9 +470,9 @@
}
},
"node_modules/@babel/types": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
- "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
+ "version": "7.23.9",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz",
+ "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==",
"dev": true,
"dependencies": {
"@babel/helper-string-parser": "^7.23.4",
@@ -485,6 +483,15 @@
"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",
@@ -495,18 +502,18 @@
}
},
"node_modules/@fluent/bundle": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/@fluent/bundle/-/bundle-0.17.1.tgz",
- "integrity": "sha512-CRFNT9QcSFAeFDneTF59eyv3JXFGhIIN4boUO2y22YmsuuKLyDk+N1I/NQUYz9Ab63e6V7T6vItoZIG/2oOOuw==",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/@fluent/bundle/-/bundle-0.18.0.tgz",
+ "integrity": "sha512-8Wfwu9q8F9g2FNnv82g6Ch/E1AW1wwljsUOolH5NEtdJdv0sZTuWvfCM7c3teB9dzNaJA8rn4khpidpozHWYEA==",
"engines": {
- "node": ">=12.0.0",
+ "node": ">=14.0.0",
"npm": ">=7.0.0"
}
},
"node_modules/@fluent/react": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/@fluent/react/-/react-0.15.0.tgz",
- "integrity": "sha512-qUMfaHman+UciOELQc5hnFAv0VerUR6+9gEBCRk9RR66XS13syt91ZElNOTHWe2Ofv70cxAGaJ5Yff4MRPg5Ow==",
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/@fluent/react/-/react-0.15.2.tgz",
+ "integrity": "sha512-M2klqXTUJTD8o2VDm6vEXApE/pSc16YtB7DSZ/Q8cPYF63FgDkvquVLHjzzG1PvrK9JlKJKPzl3wJ7hTAqSK4w==",
"dependencies": {
"@fluent/sequence": "^0.8.0",
"cached-iterable": "^0.3.0"
@@ -516,7 +523,7 @@
"npm": ">=7.0.0"
},
"peerDependencies": {
- "@fluent/bundle": ">=0.16.0 <0.18.0",
+ "@fluent/bundle": ">=0.16.0",
"react": ">=16.8.0"
}
},
@@ -542,9 +549,9 @@
}
},
"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==",
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz",
+ "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==",
"dev": true,
"dependencies": {
"@jridgewell/set-array": "^1.0.1",
@@ -556,9 +563,9 @@
}
},
"node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
+ "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
@@ -590,9 +597,9 @@
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.20",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
- "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+ "version": "0.3.23",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz",
+ "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
@@ -619,34 +626,43 @@
"dev": true
},
"node_modules/@sinonjs/commons": {
- "version": "1.8.6",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
- "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
+ "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==",
"dev": true,
"dependencies": {
"type-detect": "4.0.8"
}
},
"node_modules/@sinonjs/fake-timers": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
- "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
+ "version": "11.2.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.2.2.tgz",
+ "integrity": "sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==",
"dev": true,
"dependencies": {
- "@sinonjs/commons": "^1.7.0"
+ "@sinonjs/commons": "^3.0.0"
}
},
"node_modules/@sinonjs/samsam": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.3.tgz",
- "integrity": "sha512-nhOb2dWPeb1sd3IQXL/dVPnKHDOAFfvichtBf4xV00/rU1QbPCQqKMbvIheIjqwVjh7qIgf2AHTHi391yMOMpQ==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.0.tgz",
+ "integrity": "sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==",
"dev": true,
"dependencies": {
- "@sinonjs/commons": "^1.6.0",
+ "@sinonjs/commons": "^2.0.0",
"lodash.get": "^4.4.2",
"type-detect": "^4.0.8"
}
},
+ "node_modules/@sinonjs/samsam/node_modules/@sinonjs/commons": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
+ "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
+ "dev": true,
+ "dependencies": {
+ "type-detect": "4.0.8"
+ }
+ },
"node_modules/@sinonjs/text-encoding": {
"version": "0.7.2",
"resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
@@ -675,9 +691,9 @@
}
},
"node_modules/@types/eslint": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.1.tgz",
- "integrity": "sha512-18PLWRzhy9glDQp3+wOgfLYRWlhgX0azxgJ63rdpoUHyrC9z0f5CkFburjQx4uD7ZCruw85ZtMt6K+L+R8fLJQ==",
+ "version": "8.56.3",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.3.tgz",
+ "integrity": "sha512-PvSf1wfv2wJpVIFUMSb+i4PvqNYkB9Rkp9ZDO3oaWzq4SKhsQk4mrMBr3ZH06I0hKrVGLBacmgl8JM4WVjb9dg==",
"dev": true,
"dependencies": {
"@types/estree": "*",
@@ -695,9 +711,9 @@
}
},
"node_modules/@types/estree": {
- "version": "0.0.50",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
- "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
"dev": true
},
"node_modules/@types/hoist-non-react-statics": {
@@ -716,9 +732,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.10.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz",
- "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==",
+ "version": "20.11.20",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz",
+ "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -730,9 +746,9 @@
"integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng=="
},
"node_modules/@types/react": {
- "version": "18.2.46",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.46.tgz",
- "integrity": "sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==",
+ "version": "18.2.58",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.58.tgz",
+ "integrity": "sha512-TaGvMNhxvG2Q0K0aYxiKfNDS5m5ZsoIBBbtfUorxdH4NGSXIlYvZxLJI+9Dd3KjeB3780bciLyAb7ylO8pLhPw==",
"dependencies": {
"@types/prop-types": "*",
"@types/scheduler": "*",
@@ -755,187 +771,189 @@
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
"integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A=="
},
- "node_modules/@ungap/promise-all-settled": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
- "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
- "dev": true
- },
"node_modules/@webassemblyjs/ast": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
- "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
+ "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.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
+ "@webassemblyjs/helper-numbers": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
}
},
"node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
- "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
- "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
- "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
- "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
+ "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.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
- "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
- "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
+ "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.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1"
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
- "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
- "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
- "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
+ "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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
- "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
+ "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.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/helper-wasm-section": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-opt": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "@webassemblyjs/wast-printer": "1.11.1"
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
- "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
+ "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.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
- "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
+ "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.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1"
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
- "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
+ "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.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
+ "@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.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
- "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
+ "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.1",
+ "@webassemblyjs/ast": "1.11.6",
"@xtuc/long": "4.2.2"
}
},
"node_modules/@webpack-cli/configtest": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz",
- "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz",
+ "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==",
"dev": true,
+ "engines": {
+ "node": ">=14.15.0"
+ },
"peerDependencies": {
- "webpack": "4.x.x || 5.x.x",
- "webpack-cli": "4.x.x"
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
}
},
"node_modules/@webpack-cli/info": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz",
- "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz",
+ "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==",
"dev": true,
- "dependencies": {
- "envinfo": "^7.7.3"
+ "engines": {
+ "node": ">=14.15.0"
},
"peerDependencies": {
- "webpack-cli": "4.x.x"
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
}
},
"node_modules/@webpack-cli/serve": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz",
- "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz",
+ "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==",
"dev": true,
+ "engines": {
+ "node": ">=14.15.0"
+ },
"peerDependencies": {
- "webpack-cli": "4.x.x"
+ "webpack": "5.x.x",
+ "webpack-cli": "5.x.x"
},
"peerDependenciesMeta": {
"webpack-dev-server": {
@@ -1028,6 +1046,45 @@
"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-formats/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/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/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
@@ -1087,13 +1144,16 @@
"dev": true
},
"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==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz",
+ "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "is-array-buffer": "^3.0.1"
+ "call-bind": "^1.0.5",
+ "is-array-buffer": "^3.0.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1152,17 +1212,18 @@
}
},
"node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
- "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz",
+ "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==",
"dev": true,
"dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
- "is-array-buffer": "^3.0.2",
+ "array-buffer-byte-length": "^1.0.1",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
+ "es-abstract": "^1.22.3",
+ "es-errors": "^1.2.1",
+ "get-intrinsic": "^1.2.3",
+ "is-array-buffer": "^3.0.4",
"is-shared-array-buffer": "^1.0.2"
},
"engines": {
@@ -1182,10 +1243,13 @@
}
},
"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==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz",
+ "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==",
"dev": true,
+ "dependencies": {
+ "possible-typed-array-names": "^1.0.0"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -1194,56 +1258,75 @@
}
},
"node_modules/babel-loader": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
- "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==",
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
+ "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
"dev": true,
"dependencies": {
- "find-cache-dir": "^3.3.1",
- "loader-utils": "^1.4.0",
- "make-dir": "^3.1.0",
- "schema-utils": "^2.6.5"
+ "find-cache-dir": "^4.0.0",
+ "schema-utils": "^4.0.0"
},
"engines": {
- "node": ">= 8.9"
+ "node": ">= 14.15.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0",
- "webpack": ">=2"
+ "@babel/core": "^7.12.0",
+ "webpack": ">=5"
}
},
- "node_modules/babel-loader/node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "node_modules/babel-loader/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": {
- "minimist": "^1.2.0"
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
},
- "bin": {
- "json5": "lib/cli.js"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/babel-loader/node_modules/loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+ "node_modules/babel-loader/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": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
+ "fast-deep-equal": "^3.1.3"
},
- "engines": {
- "node": ">=4.0.0"
+ "peerDependencies": {
+ "ajv": "^8.8.2"
}
},
- "node_modules/babel-plugin-jsm-to-esmodules": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jsm-to-esmodules/-/babel-plugin-jsm-to-esmodules-0.6.0.tgz",
- "integrity": "sha512-463Yuq2sLkjoGHl5vPYUQQONnDjxnmxZuhsR1swL5N76hDFGyYZAVd6HoS4E02jBF8bORpS4aFmdr1XjEZ0buQ==",
+ "node_modules/babel-loader/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/babel-loader/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/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -1351,9 +1434,9 @@
"dev": true
},
"node_modules/browserslist": {
- "version": "4.22.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
- "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
+ "version": "4.23.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz",
+ "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==",
"dev": true,
"funding": [
{
@@ -1370,8 +1453,8 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001565",
- "electron-to-chromium": "^1.4.601",
+ "caniuse-lite": "^1.0.30001587",
+ "electron-to-chromium": "^1.4.668",
"node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
},
@@ -1406,14 +1489,19 @@
}
},
"node_modules/call-bind": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
- "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dev": true,
"dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.1",
- "set-function-length": "^1.1.1"
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1432,9 +1520,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001574",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz",
- "integrity": "sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg==",
+ "version": "1.0.30001589",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001589.tgz",
+ "integrity": "sha512-vNQWS6kI+q6sBlHbh71IIeC+sRwK2N3EDySc/updIGhIee2x5z00J4c1242/5/d6EpEMdOnk/m+6tuk4/tcsqg==",
"dev": true,
"funding": [
{
@@ -1549,16 +1637,10 @@
}
},
"node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -1571,6 +1653,9 @@
"engines": {
"node": ">= 8.10.0"
},
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
"optionalDependencies": {
"fsevents": "~2.3.2"
}
@@ -1666,10 +1751,10 @@
"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==",
+ "node_modules/common-path-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
+ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
"dev": true
},
"node_modules/concat-map": {
@@ -1872,17 +1957,20 @@
}
},
"node_modules/define-data-property": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
- "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.1",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/define-properties": {
@@ -2016,9 +2104,9 @@
"dev": true
},
"node_modules/electron-to-chromium": {
- "version": "1.4.620",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.620.tgz",
- "integrity": "sha512-a2fcSHOHrqBJsPNXtf6ZCEZpXrFCcbK1FBxfX3txoqWzNgtEDG1f3M59M98iwxhRW4iMKESnSjbJ310/rkrp0g==",
+ "version": "1.4.681",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.681.tgz",
+ "integrity": "sha512-1PpuqJUFWoXZ1E54m8bsLPVYwIVCRzvaL+n5cjigGga4z854abDnFRc+cTa2th4S79kyGqya/1xoR7h+Y5G5lg==",
"dev": true
},
"node_modules/emoji-regex": {
@@ -2067,9 +2155,9 @@
}
},
"node_modules/engine.io-parser": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz",
- "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==",
+ "version": "5.2.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz",
+ "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==",
"dev": true,
"engines": {
"node": ">=10.0.0"
@@ -2107,9 +2195,9 @@
}
},
"node_modules/envinfo": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz",
- "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==",
+ "version": "7.11.1",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.1.tgz",
+ "integrity": "sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==",
"dev": true,
"bin": {
"envinfo": "dist/cli.js"
@@ -2152,20 +2240,20 @@
}
},
"node_modules/enzyme-adapter-react-16": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz",
- "integrity": "sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==",
+ "version": "1.15.8",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.8.tgz",
+ "integrity": "sha512-uYGC31eGZBp5nGsr4nKhZKvxGQjyHGjS06BJsUlWgE29/hvnpgCsT1BJvnnyny7N3GIIVyxZ4O9GChr6hy2WQA==",
"dev": true,
"dependencies": {
- "enzyme-adapter-utils": "^1.14.0",
- "enzyme-shallow-equal": "^1.0.4",
- "has": "^1.0.3",
- "object.assign": "^4.1.2",
- "object.values": "^1.1.2",
- "prop-types": "^15.7.2",
+ "enzyme-adapter-utils": "^1.14.2",
+ "enzyme-shallow-equal": "^1.0.7",
+ "hasown": "^2.0.0",
+ "object.assign": "^4.1.5",
+ "object.values": "^1.1.7",
+ "prop-types": "^15.8.1",
"react-is": "^16.13.1",
"react-test-renderer": "^16.0.0-0",
- "semver": "^5.7.0"
+ "semver": "^5.7.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -2201,18 +2289,18 @@
}
},
"node_modules/enzyme-adapter-utils": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz",
- "integrity": "sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ==",
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.2.tgz",
+ "integrity": "sha512-1ZC++RlsYRaiOWE5NRaF5OgsMt7F5rn/VuaJIgc7eW/fmgg8eS1/Ut7EugSPPi7VMdWMLcymRnMF+mJUJ4B8KA==",
"dev": true,
"dependencies": {
"airbnb-prop-types": "^2.16.0",
- "function.prototype.name": "^1.1.5",
- "has": "^1.0.3",
- "object.assign": "^4.1.4",
- "object.fromentries": "^2.0.5",
+ "function.prototype.name": "^1.1.6",
+ "hasown": "^2.0.0",
+ "object.assign": "^4.1.5",
+ "object.fromentries": "^2.0.7",
"prop-types": "^15.8.1",
- "semver": "^5.7.1"
+ "semver": "^6.3.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -2221,22 +2309,13 @@
"react": "0.13.x || 0.14.x || ^15.0.0-0 || ^16.0.0-0"
}
},
- "node_modules/enzyme-adapter-utils/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
"node_modules/enzyme-shallow-equal": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz",
- "integrity": "sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz",
+ "integrity": "sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg==",
"dev": true,
"dependencies": {
- "has": "^1.0.3",
+ "hasown": "^2.0.0",
"object-is": "^1.1.5"
},
"funding": {
@@ -2253,50 +2332,52 @@
}
},
"node_modules/es-abstract": {
- "version": "1.22.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
- "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
- "dev": true,
- "dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.2",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.5",
- "es-set-tostringtag": "^2.0.1",
+ "version": "1.22.4",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.4.tgz",
+ "integrity": "sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==",
+ "dev": true,
+ "dependencies": {
+ "array-buffer-byte-length": "^1.0.1",
+ "arraybuffer.prototype.slice": "^1.0.3",
+ "available-typed-arrays": "^1.0.6",
+ "call-bind": "^1.0.7",
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "es-set-tostringtag": "^2.0.2",
"es-to-primitive": "^1.2.1",
"function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.2",
- "get-symbol-description": "^1.0.0",
+ "get-intrinsic": "^1.2.4",
+ "get-symbol-description": "^1.0.2",
"globalthis": "^1.0.3",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
+ "has-property-descriptors": "^1.0.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
- "hasown": "^2.0.0",
- "internal-slot": "^1.0.5",
- "is-array-buffer": "^3.0.2",
+ "hasown": "^2.0.1",
+ "internal-slot": "^1.0.7",
+ "is-array-buffer": "^3.0.4",
"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.12",
+ "is-typed-array": "^1.1.13",
"is-weakref": "^1.0.2",
"object-inspect": "^1.13.1",
"object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.1",
- "safe-array-concat": "^1.0.1",
- "safe-regex-test": "^1.0.0",
+ "object.assign": "^4.1.5",
+ "regexp.prototype.flags": "^1.5.2",
+ "safe-array-concat": "^1.1.0",
+ "safe-regex-test": "^1.0.3",
"string.prototype.trim": "^1.2.8",
"string.prototype.trimend": "^1.0.7",
"string.prototype.trimstart": "^1.0.7",
- "typed-array-buffer": "^1.0.0",
+ "typed-array-buffer": "^1.0.1",
"typed-array-byte-length": "^1.0.0",
"typed-array-byte-offset": "^1.0.0",
"typed-array-length": "^1.0.4",
"unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.13"
+ "which-typed-array": "^1.1.14"
},
"engines": {
"node": ">= 0.4"
@@ -2311,21 +2392,42 @@
"integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
"dev": true
},
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es-module-lexer": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz",
+ "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==",
"dev": true
},
"node_modules/es-set-tostringtag": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
- "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz",
+ "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2",
- "has-tostringtag": "^1.0.0",
- "hasown": "^2.0.0"
+ "get-intrinsic": "^1.2.4",
+ "has-tostringtag": "^1.0.2",
+ "hasown": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -2358,9 +2460,9 @@
}
},
"node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz",
+ "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==",
"dev": true,
"engines": {
"node": ">=6"
@@ -2439,73 +2541,6 @@
"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/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/execa/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/execa/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/execa/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/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
@@ -2591,20 +2626,19 @@
}
},
"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==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
+ "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
"dev": true,
"dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
+ "common-path-prefix": "^3.0.0",
+ "pkg-dir": "^7.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=14.16"
},
"funding": {
- "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/find-up": {
@@ -2633,15 +2667,15 @@
}
},
"node_modules/flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz",
+ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==",
"dev": true
},
"node_modules/follow-redirects": {
- "version": "1.15.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
- "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
+ "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
"dev": true,
"funding": [
{
@@ -2765,40 +2799,33 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
- "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"dev": true,
"dependencies": {
+ "es-errors": "^1.3.0",
"function-bind": "^1.1.2",
"has-proto": "^1.0.1",
"has-symbols": "^1.0.3",
"hasown": "^2.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "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"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz",
+ "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "call-bind": "^1.0.5",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4"
},
"engines": {
"node": ">= 0.4"
@@ -2887,15 +2914,6 @@
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
},
- "node_modules/growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true,
- "engines": {
- "node": ">=4.x"
- }
- },
"node_modules/has": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
@@ -2924,21 +2942,21 @@
}
},
"node_modules/has-property-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
- "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2"
+ "es-define-property": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"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==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -2960,12 +2978,12 @@
}
},
"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==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",
+ "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",
"dev": true,
"dependencies": {
- "has-symbols": "^1.0.2"
+ "has-symbols": "^1.0.3"
},
"engines": {
"node": ">= 0.4"
@@ -2975,9 +2993,9 @@
}
},
"node_modules/hasown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
- "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
+ "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.2"
@@ -3086,15 +3104,6 @@
"node": ">=8.0.0"
}
},
- "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/iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -3107,6 +3116,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/immutable": {
+ "version": "4.3.5",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
+ "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
+ "dev": true
+ },
"node_modules/import-local": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
@@ -3126,6 +3141,70 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/import-local/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/import-local/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/import-local/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/import-local/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/import-local/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/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -3143,12 +3222,12 @@
"dev": true
},
"node_modules/internal-slot": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
- "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz",
+ "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.2.2",
+ "es-errors": "^1.3.0",
"hasown": "^2.0.0",
"side-channel": "^1.0.4"
},
@@ -3157,23 +3236,25 @@
}
},
"node_modules/interpret": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
- "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz",
+ "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==",
"dev": true,
"engines": {
- "node": ">= 0.10"
+ "node": ">=10.13.0"
}
},
"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==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz",
+ "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.0",
- "is-typed-array": "^1.1.10"
+ "get-intrinsic": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -3310,9 +3391,9 @@
}
},
"node_modules/is-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz",
+ "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==",
"dev": true,
"engines": {
"node": ">= 0.4"
@@ -3383,27 +3464,18 @@
}
},
"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==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz",
+ "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2"
+ "call-bind": "^1.0.7"
},
- "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"
+ "node": ">= 0.4"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-string": {
@@ -3443,12 +3515,12 @@
}
},
"node_modules/is-typed-array": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
- "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz",
+ "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==",
"dev": true,
"dependencies": {
- "which-typed-array": "^1.1.11"
+ "which-typed-array": "^1.1.14"
},
"engines": {
"node": ">= 0.4"
@@ -3573,48 +3645,6 @@
"node": ">=8"
}
},
- "node_modules/istanbul-lib-report/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/istanbul-lib-report/node_modules/make-dir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
- "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
- "dev": true,
- "dependencies": {
- "semver": "^7.5.3"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/istanbul-lib-report/node_modules/semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"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",
@@ -3627,12 +3657,6 @@
"node": ">=8"
}
},
- "node_modules/istanbul-lib-report/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/istanbul-lib-source-maps": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
@@ -3702,9 +3726,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
- "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
+ "version": "3.1.7",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz",
+ "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==",
"dev": true,
"dependencies": {
"html-escaper": "^2.0.0",
@@ -3787,6 +3811,12 @@
"integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
"dev": true
},
+ "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": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
@@ -3821,21 +3851,21 @@
"dev": true
},
"node_modules/just-extend": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz",
+ "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==",
"dev": true
},
"node_modules/karma": {
- "version": "6.3.8",
- "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.8.tgz",
- "integrity": "sha512-10wBBU9S0lBHhbCNfmmbWQaY5C1bXlKdnvzN2QKThujCI/+DKaezrI08l6bfTlpJ92VsEboq3zYKpXwK6DOi3A==",
+ "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",
- "colors": "^1.4.0",
"connect": "^3.7.0",
"di": "^0.0.1",
"dom-serialize": "^2.2.1",
@@ -3844,13 +3874,14 @@
"http-proxy": "^1.18.1",
"isbinaryfile": "^4.0.8",
"lodash": "^4.17.21",
- "log4js": "^6.3.0",
+ "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.2.0",
+ "socket.io": "^4.4.1",
"source-map": "^0.6.1",
"tmp": "^0.2.1",
"ua-parser-js": "^0.7.30",
@@ -3945,31 +3976,55 @@
}
},
"node_modules/karma-sourcemap-loader": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz",
- "integrity": "sha512-zorxyAakYZuBcHRJE+vbrK2o2JXLFWK8VVjiT/6P+ltLBUGUvqTEkUiQ119MGdOrK7mrmxXHZF1/pfT6GgIZ6g==",
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.4.0.tgz",
+ "integrity": "sha512-xCRL3/pmhAYF3I6qOrcn0uhbQevitc2DERMPH82FMnG+4WReoGcGFZb1pURf2a5apyrOHRdvD+O6K7NljqKHyA==",
"dev": true,
"dependencies": {
- "graceful-fs": "^4.1.2"
+ "graceful-fs": "^4.2.10"
}
},
"node_modules/karma-webpack": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-5.0.0.tgz",
- "integrity": "sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-5.0.1.tgz",
+ "integrity": "sha512-oo38O+P3W2mSPCSUrQdySSPv1LvPpXP+f+bBimNomS5sW+1V4SuhCuW8TfJzV+rDv921w2fDSDw0xJbPe6U+kQ==",
"dev": true,
"dependencies": {
"glob": "^7.1.3",
- "minimatch": "^3.0.4",
+ "minimatch": "^9.0.3",
"webpack-merge": "^4.1.5"
},
"engines": {
- "node": ">= 6"
+ "node": ">= 18"
},
"peerDependencies": {
"webpack": "^5.0.0"
}
},
+ "node_modules/karma-webpack/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/karma-webpack/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -4111,20 +4166,53 @@
}
},
"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==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
+ "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
"dev": true,
"dependencies": {
- "semver": "^6.0.0"
+ "semver": "^7.5.3"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/make-dir/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/make-dir/node_modules/semver": {
+ "version": "7.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
+ "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/make-dir/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/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -4191,15 +4279,6 @@
"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/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -4221,47 +4300,51 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "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/mocha": {
- "version": "9.1.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
- "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
+ "version": "10.3.0",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.3.0.tgz",
+ "integrity": "sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==",
"dev": true,
"dependencies": {
- "@ungap/promise-all-settled": "1.1.2",
"ansi-colors": "4.1.1",
"browser-stdout": "1.3.1",
- "chokidar": "3.5.2",
- "debug": "4.3.2",
+ "chokidar": "3.5.3",
+ "debug": "4.3.4",
"diff": "5.0.0",
"escape-string-regexp": "4.0.0",
"find-up": "5.0.0",
- "glob": "7.1.7",
- "growl": "1.10.5",
+ "glob": "8.1.0",
"he": "1.2.0",
"js-yaml": "4.1.0",
"log-symbols": "4.1.0",
- "minimatch": "3.0.4",
+ "minimatch": "5.0.1",
"ms": "2.1.3",
- "nanoid": "3.1.25",
"serialize-javascript": "6.0.0",
"strip-json-comments": "3.1.1",
"supports-color": "8.1.1",
- "which": "2.0.2",
- "workerpool": "6.1.5",
+ "workerpool": "6.2.1",
"yargs": "16.2.0",
"yargs-parser": "20.2.4",
"yargs-unparser": "2.0.0"
},
"bin": {
"_mocha": "bin/_mocha",
- "mocha": "bin/mocha"
+ "mocha": "bin/mocha.js"
},
"engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mochajs"
+ "node": ">= 14.0.0"
}
},
"node_modules/mocha/node_modules/ansi-styles": {
@@ -4279,6 +4362,15 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/mocha/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/mocha/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -4308,10 +4400,16 @@
}
},
"node_modules/mocha/node_modules/chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
+ "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",
@@ -4346,29 +4444,6 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "node_modules/mocha/node_modules/debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/mocha/node_modules/debug/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/mocha/node_modules/escape-string-regexp": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
@@ -4382,20 +4457,19 @@
}
},
"node_modules/mocha/node_modules/glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
+ "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
"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"
+ "minimatch": "^5.0.1",
+ "once": "^1.3.0"
},
"engines": {
- "node": "*"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -4427,15 +4501,15 @@
}
},
"node_modules/mocha/node_modules/minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz",
+ "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==",
"dev": true,
"dependencies": {
- "brace-expansion": "^1.1.7"
+ "brace-expansion": "^2.0.1"
},
"engines": {
- "node": "*"
+ "node": ">=10"
}
},
"node_modules/mocha/node_modules/ms": {
@@ -4471,18 +4545,6 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/nanoid": {
- "version": "3.1.25",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
- "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
- "dev": true,
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
"node_modules/nearley": {
"version": "2.20.1",
"resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz",
@@ -4527,43 +4589,16 @@
"dev": true
},
"node_modules/nise": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.5.tgz",
- "integrity": "sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw==",
+ "version": "5.1.9",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz",
+ "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==",
"dev": true,
"dependencies": {
- "@sinonjs/commons": "^2.0.0",
- "@sinonjs/fake-timers": "^10.0.2",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "path-to-regexp": "^1.7.0"
- }
- },
- "node_modules/nise/node_modules/@sinonjs/commons": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
- "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
- "dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
- }
- },
- "node_modules/nise/node_modules/@sinonjs/fake-timers": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
- "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
- "dev": true,
- "dependencies": {
- "@sinonjs/commons": "^3.0.0"
- }
- },
- "node_modules/nise/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
- "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
- "dev": true,
- "dependencies": {
- "type-detect": "4.0.8"
+ "@sinonjs/commons": "^3.0.0",
+ "@sinonjs/fake-timers": "^11.2.2",
+ "@sinonjs/text-encoding": "^0.7.2",
+ "just-extend": "^6.2.0",
+ "path-to-regexp": "^6.2.1"
}
},
"node_modules/node-releases": {
@@ -4627,27 +4662,6 @@
"node": ">= 4"
}
},
- "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/npm-run-path/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/nth-check": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -4789,21 +4803,6 @@
"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/p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -4924,18 +4923,9 @@
"dev": true
},
"node_modules/path-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "dependencies": {
- "isarray": "0.0.1"
- }
- },
- "node_modules/path-to-regexp/node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz",
+ "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==",
"dev": true
},
"node_modules/path-type": {
@@ -5005,67 +4995,109 @@
}
},
"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==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+ "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
"dev": true,
"dependencies": {
- "find-up": "^4.0.0"
+ "find-up": "^6.3.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-dir/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==",
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+ "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
"dev": true,
"dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
+ "locate-path": "^7.1.0",
+ "path-exists": "^5.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-dir/node_modules/locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
"dev": true,
"dependencies": {
- "p-locate": "^4.1.0"
+ "p-locate": "^6.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-dir/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==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+ "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
"dev": true,
"dependencies": {
- "p-try": "^2.0.0"
+ "yocto-queue": "^1.0.0"
},
"engines": {
- "node": ">=6"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-dir/node_modules/p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+ "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
"dev": true,
"dependencies": {
- "p-limit": "^2.2.0"
+ "p-limit": "^4.0.0"
},
"engines": {
- "node": ">=8"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/path-exists": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
+ "dev": true,
+ "engines": {
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ }
+ },
+ "node_modules/pkg-dir/node_modules/yocto-queue": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+ "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/possible-typed-array-names": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz",
+ "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
}
},
"node_modules/prop-types": {
@@ -5296,20 +5328,6 @@
"node": ">=4"
}
},
- "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",
@@ -5323,15 +5341,15 @@
}
},
"node_modules/rechoir": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
- "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz",
+ "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==",
"dev": true,
"dependencies": {
- "resolve": "^1.9.0"
+ "resolve": "^1.20.0"
},
"engines": {
- "node": ">= 0.10"
+ "node": ">= 10.13.0"
}
},
"node_modules/redux": {
@@ -5354,14 +5372,15 @@
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
},
"node_modules/regexp.prototype.flags": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
- "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz",
+ "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "set-function-name": "^2.0.0"
+ "call-bind": "^1.0.6",
+ "define-properties": "^1.2.1",
+ "es-errors": "^1.3.0",
+ "set-function-name": "^2.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -5379,6 +5398,15 @@
"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",
@@ -5433,9 +5461,9 @@
}
},
"node_modules/rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz",
+ "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==",
"dev": true
},
"node_modules/rimraf": {
@@ -5464,13 +5492,13 @@
}
},
"node_modules/safe-array-concat": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
- "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz",
+ "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
+ "call-bind": "^1.0.5",
+ "get-intrinsic": "^1.2.2",
"has-symbols": "^1.0.3",
"isarray": "^2.0.5"
},
@@ -5502,15 +5530,18 @@
]
},
"node_modules/safe-regex-test": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
- "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz",
+ "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
"is-regex": "^1.1.4"
},
+ "engines": {
+ "node": ">= 0.4"
+ },
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -5522,18 +5553,20 @@
"dev": true
},
"node_modules/sass": {
- "version": "1.43.4",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.4.tgz",
- "integrity": "sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==",
+ "version": "1.71.1",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz",
+ "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==",
"dev": true,
"dependencies": {
- "chokidar": ">=3.0.0 <4.0.0"
+ "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": ">=8.9.0"
+ "node": ">=14.0.0"
}
},
"node_modules/scheduler": {
@@ -5582,29 +5615,32 @@
}
},
"node_modules/set-function-length": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
- "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz",
+ "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==",
"dev": true,
"dependencies": {
- "define-data-property": "^1.1.1",
- "get-intrinsic": "^1.2.1",
+ "define-data-property": "^1.1.2",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.3",
"gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
+ "has-property-descriptors": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/set-function-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
- "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz",
+ "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==",
"dev": true,
"dependencies": {
- "define-data-property": "^1.0.1",
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
"functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.0"
+ "has-property-descriptors": "^1.0.2"
},
"engines": {
"node": ">= 0.4"
@@ -5659,37 +5695,34 @@
}
},
"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==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz",
+ "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
+ "call-bind": "^1.0.6",
+ "es-errors": "^1.3.0",
+ "get-intrinsic": "^1.2.4",
+ "object-inspect": "^1.13.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"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/sinon": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz",
- "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==",
- "deprecated": "16.1.1",
+ "version": "17.0.1",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-17.0.1.tgz",
+ "integrity": "sha512-wmwE19Lie0MLT+ZYNpDymasPHUKTaZHUH/pKEubRXIzySv9Atnlw+BUMGCzWgV7b7wO+Hw6f1TEOr0IUnmU8/g==",
"dev": true,
"dependencies": {
- "@sinonjs/commons": "^1.8.3",
- "@sinonjs/fake-timers": "^8.1.0",
- "@sinonjs/samsam": "^6.0.2",
- "diff": "^5.0.0",
- "nise": "^5.1.0",
+ "@sinonjs/commons": "^3.0.0",
+ "@sinonjs/fake-timers": "^11.2.2",
+ "@sinonjs/samsam": "^8.0.0",
+ "diff": "^5.1.0",
+ "nise": "^5.1.5",
"supports-color": "^7.2.0"
},
"funding": {
@@ -5697,6 +5730,15 @@
"url": "https://opencollective.com/sinon"
}
},
+ "node_modules/sinon/node_modules/diff": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
+ "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.3.1"
+ }
+ },
"node_modules/sinon/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -5719,9 +5761,9 @@
}
},
"node_modules/socket.io": {
- "version": "4.7.3",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.3.tgz",
- "integrity": "sha512-SE+UIQXBQE+GPG2oszWMlsEmWtHVqw/h1VrYJGK5/MC7CH5p58N448HwIrtREcvR4jfdOJAY4ieQfxMr55qbbw==",
+ "version": "4.7.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.4.tgz",
+ "integrity": "sha512-DcotgfP1Zg9iP/dH9zvAQcWrE0TtbMVwXmlV4T4mqsvY+gw+LqUGPfx2AoVyRk0FLME+GQhufDMyacFmw7ksqw==",
"dev": true,
"dependencies": {
"accepts": "~1.3.4",
@@ -5737,11 +5779,12 @@
}
},
"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==",
+ "version": "2.5.4",
+ "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz",
+ "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==",
"dev": true,
"dependencies": {
+ "debug": "~4.3.4",
"ws": "~8.11.0"
}
},
@@ -5767,6 +5810,15 @@
"node": ">=0.10.0"
}
},
+ "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-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
@@ -5788,9 +5840,9 @@
}
},
"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==",
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
"dev": true
},
"node_modules/spdx-expression-parse": {
@@ -5804,9 +5856,9 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.16",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz",
- "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==",
+ "version": "3.0.17",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz",
+ "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==",
"dev": true
},
"node_modules/sprintf-js": {
@@ -5824,16 +5876,6 @@
"node": ">= 0.6"
}
},
- "node_modules/stream-browserify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
- "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
- "dev": true,
- "dependencies": {
- "inherits": "~2.0.4",
- "readable-stream": "^3.5.0"
- }
- },
"node_modules/streamroller": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
@@ -5848,15 +5890,6 @@
"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",
@@ -5975,15 +6008,6 @@
"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",
@@ -6030,9 +6054,9 @@
}
},
"node_modules/terser": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
- "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
+ "version": "5.28.1",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz",
+ "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -6100,9 +6124,9 @@
}
},
"node_modules/terser-webpack-plugin/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==",
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
+ "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
"dev": true,
"dependencies": {
"randombytes": "^2.1.0"
@@ -6182,29 +6206,30 @@
}
},
"node_modules/typed-array-buffer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
- "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz",
+ "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "is-typed-array": "^1.1.10"
+ "call-bind": "^1.0.7",
+ "es-errors": "^1.3.0",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
}
},
"node_modules/typed-array-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
- "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz",
+ "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -6214,16 +6239,17 @@
}
},
"node_modules/typed-array-byte-offset": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
- "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz",
+ "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "available-typed-arrays": "^1.0.7",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13"
},
"engines": {
"node": ">= 0.4"
@@ -6233,14 +6259,20 @@
}
},
"node_modules/typed-array-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
- "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz",
+ "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.7",
"for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
+ "gopd": "^1.0.1",
+ "has-proto": "^1.0.3",
+ "is-typed-array": "^1.1.13",
+ "possible-typed-array-names": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -6347,12 +6379,6 @@
"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",
@@ -6404,35 +6430,35 @@
}
},
"node_modules/webpack": {
- "version": "5.56.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.56.0.tgz",
- "integrity": "sha512-pJ7esw2AGkpZL0jqsEAKnDEfRZdrc9NVjAWA+d1mFkwj68ng9VQ6+Wnrl+kS5dlDHvrat5ASK5vd7wp6I7f53Q==",
- "dev": true,
- "dependencies": {
- "@types/eslint-scope": "^3.7.0",
- "@types/estree": "^0.0.50",
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/wasm-edit": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "acorn": "^8.4.1",
- "acorn-import-assertions": "^1.7.6",
- "browserslist": "^4.14.5",
+ "version": "5.90.3",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz",
+ "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==",
+ "dev": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.3",
+ "@types/estree": "^1.0.5",
+ "@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.21.10",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.8.3",
- "es-module-lexer": "^0.9.0",
+ "enhanced-resolve": "^5.15.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.4",
- "json-parse-better-errors": "^1.0.2",
+ "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.0",
+ "schema-utils": "^3.2.0",
"tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.1.3",
- "watchpack": "^2.2.0",
- "webpack-sources": "^3.2.0"
+ "terser-webpack-plugin": "^5.3.10",
+ "watchpack": "^2.4.0",
+ "webpack-sources": "^3.2.3"
},
"bin": {
"webpack": "bin/webpack.js"
@@ -6451,40 +6477,42 @@
}
},
"node_modules/webpack-cli": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz",
- "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==",
+ "version": "5.1.4",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz",
+ "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==",
"dev": true,
"dependencies": {
"@discoveryjs/json-ext": "^0.5.0",
- "@webpack-cli/configtest": "^1.1.0",
- "@webpack-cli/info": "^1.4.0",
- "@webpack-cli/serve": "^1.6.0",
+ "@webpack-cli/configtest": "^2.1.1",
+ "@webpack-cli/info": "^2.0.2",
+ "@webpack-cli/serve": "^2.0.5",
"colorette": "^2.0.14",
- "commander": "^7.0.0",
- "execa": "^5.0.0",
+ "commander": "^10.0.1",
+ "cross-spawn": "^7.0.3",
+ "envinfo": "^7.7.3",
"fastest-levenshtein": "^1.0.12",
"import-local": "^3.0.2",
- "interpret": "^2.2.0",
- "rechoir": "^0.7.0",
+ "interpret": "^3.1.1",
+ "rechoir": "^0.8.0",
"webpack-merge": "^5.7.3"
},
"bin": {
"webpack-cli": "bin/cli.js"
},
"engines": {
- "node": ">=10.13.0"
+ "node": ">=14.15.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
},
"peerDependencies": {
- "webpack": "4.x.x || 5.x.x"
+ "webpack": "5.x.x"
},
"peerDependenciesMeta": {
"@webpack-cli/generators": {
"optional": true
},
- "@webpack-cli/migrate": {
- "optional": true
- },
"webpack-bundle-analyzer": {
"optional": true
},
@@ -6494,12 +6522,56 @@
}
},
"node_modules/webpack-cli/node_modules/commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
+ "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
"dev": true,
"engines": {
- "node": ">= 10"
+ "node": ">=14"
+ }
+ },
+ "node_modules/webpack-cli/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/webpack-cli/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/webpack-cli/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/webpack-cli/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/webpack-cli/node_modules/webpack-merge": {
@@ -6584,16 +6656,16 @@
}
},
"node_modules/which-typed-array": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
- "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz",
+ "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==",
"dev": true,
"dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.4",
+ "available-typed-arrays": "^1.0.6",
+ "call-bind": "^1.0.5",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
- "has-tostringtag": "^1.0.0"
+ "has-tostringtag": "^1.0.1"
},
"engines": {
"node": ">= 0.4"
@@ -6609,9 +6681,9 @@
"dev": true
},
"node_modules/workerpool": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
- "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz",
+ "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==",
"dev": true
},
"node_modules/wrap-ansi": {
@@ -6833,5085 +6905,5 @@
"url": "https://github.com/sponsors/sindresorhus"
}
}
- },
- "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"
- }
- },
- "@babel/code-frame": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
- "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.23.4",
- "chalk": "^2.4.2"
- }
- },
- "@babel/compat-data": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
- "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
- "dev": true
- },
- "@babel/core": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz",
- "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==",
- "dev": true,
- "requires": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.23.5",
- "@babel/generator": "^7.23.6",
- "@babel/helper-compilation-targets": "^7.23.6",
- "@babel/helper-module-transforms": "^7.23.3",
- "@babel/helpers": "^7.23.7",
- "@babel/parser": "^7.23.6",
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.7",
- "@babel/types": "^7.23.6",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- }
- },
- "@babel/generator": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
- "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.23.6",
- "@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-compilation-targets": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
- "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.23.5",
- "@babel/helper-validator-option": "^7.23.5",
- "browserslist": "^4.22.2",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- }
- },
- "@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
- "dev": true
- },
- "@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- }
- },
- "@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-module-imports": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
- "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.22.15"
- }
- },
- "@babel/helper-module-transforms": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
- "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
- "dev": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.20"
- }
- },
- "@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-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-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.22.5"
- }
- },
- "@babel/helper-string-parser": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
- "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
- "dev": true
- },
- "@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
- "dev": true
- },
- "@babel/helper-validator-option": {
- "version": "7.23.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
- "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
- "dev": true
- },
- "@babel/helpers": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz",
- "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==",
- "dev": true,
- "requires": {
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.7",
- "@babel/types": "^7.23.6"
- }
- },
- "@babel/highlight": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
- "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
- "dev": true,
- "requires": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- }
- },
- "@babel/parser": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
- "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
- "dev": true
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
- "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.22.5"
- }
- },
- "@babel/plugin-transform-react-display-name": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz",
- "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.22.5"
- }
- },
- "@babel/plugin-transform-react-jsx": {
- "version": "7.23.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz",
- "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-jsx": "^7.23.3",
- "@babel/types": "^7.23.4"
- }
- },
- "@babel/plugin-transform-react-jsx-development": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
- "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
- "dev": true,
- "requires": {
- "@babel/plugin-transform-react-jsx": "^7.22.5"
- }
- },
- "@babel/plugin-transform-react-pure-annotations": {
- "version": "7.23.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz",
- "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- }
- },
- "@babel/preset-react": {
- "version": "7.16.0",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.16.0.tgz",
- "integrity": "sha512-d31IFW2bLRB28uL1WoElyro8RH5l6531XfxMtCeCmp6RVAF1uTfxxUA0LH1tXl+psZdwfmIbwoG4U5VwgbhtLw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.14.5",
- "@babel/helper-validator-option": "^7.14.5",
- "@babel/plugin-transform-react-display-name": "^7.16.0",
- "@babel/plugin-transform-react-jsx": "^7.16.0",
- "@babel/plugin-transform-react-jsx-development": "^7.16.0",
- "@babel/plugin-transform-react-pure-annotations": "^7.16.0"
- }
- },
- "@babel/runtime": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.7.tgz",
- "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==",
- "requires": {
- "regenerator-runtime": "^0.14.0"
- }
- },
- "@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
- }
- },
- "@babel/traverse": {
- "version": "7.23.7",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz",
- "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.23.5",
- "@babel/generator": "^7.23.6",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.6",
- "@babel/types": "^7.23.6",
- "debug": "^4.3.1",
- "globals": "^11.1.0"
- }
- },
- "@babel/types": {
- "version": "7.23.6",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
- "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
- "dev": true,
- "requires": {
- "@babel/helper-string-parser": "^7.23.4",
- "@babel/helper-validator-identifier": "^7.22.20",
- "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
- },
- "@fluent/bundle": {
- "version": "0.17.1",
- "resolved": "https://registry.npmjs.org/@fluent/bundle/-/bundle-0.17.1.tgz",
- "integrity": "sha512-CRFNT9QcSFAeFDneTF59eyv3JXFGhIIN4boUO2y22YmsuuKLyDk+N1I/NQUYz9Ab63e6V7T6vItoZIG/2oOOuw=="
- },
- "@fluent/react": {
- "version": "0.15.0",
- "resolved": "https://registry.npmjs.org/@fluent/react/-/react-0.15.0.tgz",
- "integrity": "sha512-qUMfaHman+UciOELQc5hnFAv0VerUR6+9gEBCRk9RR66XS13syt91ZElNOTHWe2Ofv70cxAGaJ5Yff4MRPg5Ow==",
- "requires": {
- "@fluent/sequence": "^0.8.0",
- "cached-iterable": "^0.3.0"
- }
- },
- "@fluent/sequence": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@fluent/sequence/-/sequence-0.8.0.tgz",
- "integrity": "sha512-eV5QlEEVV/wR3AFQLXO67x4yPRPQXyqke0c8yucyMSeW36B3ecZyVFlY1UprzrfFV8iPJB4TAehDy/dLGbvQ1Q==",
- "requires": {}
- },
- "@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.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "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.5",
- "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz",
- "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==",
- "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.20",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
- "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
- "dev": true,
- "requires": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "@jsdevtools/coverage-istanbul-loader": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz",
- "integrity": "sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA==",
- "dev": true,
- "requires": {
- "convert-source-map": "^1.7.0",
- "istanbul-lib-instrument": "^4.0.3",
- "loader-utils": "^2.0.0",
- "merge-source-map": "^1.1.0",
- "schema-utils": "^2.7.0"
- },
- "dependencies": {
- "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
- }
- }
- },
- "@sinonjs/commons": {
- "version": "1.8.6",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
- "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz",
- "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.7.0"
- }
- },
- "@sinonjs/samsam": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.3.tgz",
- "integrity": "sha512-nhOb2dWPeb1sd3IQXL/dVPnKHDOAFfvichtBf4xV00/rU1QbPCQqKMbvIheIjqwVjh7qIgf2AHTHi391yMOMpQ==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.6.0",
- "lodash.get": "^4.4.2",
- "type-detect": "^4.0.8"
- }
- },
- "@sinonjs/text-encoding": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
- "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
- "dev": true
- },
- "@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
- },
- "@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
- },
- "@types/cors": {
- "version": "2.8.17",
- "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
- "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
- "dev": true,
- "requires": {
- "@types/node": "*"
- }
- },
- "@types/eslint": {
- "version": "8.56.1",
- "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.1.tgz",
- "integrity": "sha512-18PLWRzhy9glDQp3+wOgfLYRWlhgX0azxgJ63rdpoUHyrC9z0f5CkFburjQx4uD7ZCruw85ZtMt6K+L+R8fLJQ==",
- "dev": true,
- "requires": {
- "@types/estree": "*",
- "@types/json-schema": "*"
- }
- },
- "@types/eslint-scope": {
- "version": "3.7.7",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz",
- "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==",
- "dev": true,
- "requires": {
- "@types/eslint": "*",
- "@types/estree": "*"
- }
- },
- "@types/estree": {
- "version": "0.0.50",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.50.tgz",
- "integrity": "sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==",
- "dev": true
- },
- "@types/hoist-non-react-statics": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz",
- "integrity": "sha512-SbcrWzkKBw2cdwRTwQAswfpB9g9LJWfjtUeW/jvNwbhC8cpmmNYVePa+ncbUe0rGTQ7G3Ff6mYUN2VMfLVr+Sg==",
- "requires": {
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0"
- }
- },
- "@types/json-schema": {
- "version": "7.0.15",
- "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
- "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
- "dev": true
- },
- "@types/node": {
- "version": "20.10.6",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz",
- "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==",
- "dev": true,
- "requires": {
- "undici-types": "~5.26.4"
- }
- },
- "@types/prop-types": {
- "version": "15.7.11",
- "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
- "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng=="
- },
- "@types/react": {
- "version": "18.2.46",
- "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.46.tgz",
- "integrity": "sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==",
- "requires": {
- "@types/prop-types": "*",
- "@types/scheduler": "*",
- "csstype": "^3.0.2"
- }
- },
- "@types/react-redux": {
- "version": "7.1.33",
- "resolved": "https://registry.npmjs.org/@types/react-redux/-/react-redux-7.1.33.tgz",
- "integrity": "sha512-NF8m5AjWCkert+fosDsN3hAlHzpjSiXlVy9EgQEmLoBhaNXbmyeGs/aj5dQzKuF+/q+S7JQagorGDW8pJ28Hmg==",
- "requires": {
- "@types/hoist-non-react-statics": "^3.3.0",
- "@types/react": "*",
- "hoist-non-react-statics": "^3.3.0",
- "redux": "^4.0.0"
- }
- },
- "@types/scheduler": {
- "version": "0.16.8",
- "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
- "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A=="
- },
- "@ungap/promise-all-settled": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz",
- "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==",
- "dev": true
- },
- "@webassemblyjs/ast": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz",
- "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-numbers": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1"
- }
- },
- "@webassemblyjs/floating-point-hex-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz",
- "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==",
- "dev": true
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz",
- "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==",
- "dev": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz",
- "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
- "dev": true
- },
- "@webassemblyjs/helper-numbers": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
- "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==",
- "dev": true,
- "requires": {
- "@webassemblyjs/floating-point-hex-parser": "1.11.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz",
- "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz",
- "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz",
- "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==",
- "dev": true,
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz",
- "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==",
- "dev": true,
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz",
- "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==",
- "dev": true
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz",
- "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/helper-wasm-section": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-opt": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "@webassemblyjs/wast-printer": "1.11.1"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz",
- "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz",
- "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-buffer": "1.11.1",
- "@webassemblyjs/wasm-gen": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz",
- "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/helper-api-error": "1.11.1",
- "@webassemblyjs/helper-wasm-bytecode": "1.11.1",
- "@webassemblyjs/ieee754": "1.11.1",
- "@webassemblyjs/leb128": "1.11.1",
- "@webassemblyjs/utf8": "1.11.1"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
- "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.11.1",
- "@xtuc/long": "4.2.2"
- }
- },
- "@webpack-cli/configtest": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz",
- "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==",
- "dev": true,
- "requires": {}
- },
- "@webpack-cli/info": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz",
- "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==",
- "dev": true,
- "requires": {
- "envinfo": "^7.7.3"
- }
- },
- "@webpack-cli/serve": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz",
- "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==",
- "dev": true,
- "requires": {}
- },
- "@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
- },
- "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.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
- "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": {}
- },
- "airbnb-prop-types": {
- "version": "2.16.0",
- "resolved": "https://registry.npmjs.org/airbnb-prop-types/-/airbnb-prop-types-2.16.0.tgz",
- "integrity": "sha512-7WHOFolP/6cS96PhKNrslCLMYAI8yB1Pp6u6XmxozQOiZbsI5ycglZr5cHhBFfuRcQQjzCMith5ZPZdYiJCxUg==",
- "dev": true,
- "requires": {
- "array.prototype.find": "^2.1.1",
- "function.prototype.name": "^1.1.2",
- "is-regex": "^1.1.0",
- "object-is": "^1.1.2",
- "object.assign": "^4.1.0",
- "object.entries": "^1.1.2",
- "prop-types": "^15.7.2",
- "prop-types-exact": "^1.2.0",
- "react-is": "^16.13.1"
- }
- },
- "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": {}
- },
- "ansi-colors": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
- "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
- "dev": true
- },
- "ansi-regex": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
- "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==",
- "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"
- }
- },
- "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
- },
- "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.prototype.filter": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz",
- "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-array-method-boxes-properly": "^1.0.0",
- "is-string": "^1.0.7"
- }
- },
- "array.prototype.find": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/array.prototype.find/-/array.prototype.find-2.2.2.tgz",
- "integrity": "sha512-DRumkfW97iZGOfn+lIXbkVrXL04sfYKX+EfOodo8XboR5sxPDVvOjZTF/rysusa9lmhmSOeD6Vp6RKQP+eP4Tg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0"
- }
- },
- "array.prototype.flat": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz",
- "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "es-shim-unscopables": "^1.0.0"
- }
- },
- "arraybuffer.prototype.slice": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz",
- "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==",
- "dev": true,
- "requires": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "get-intrinsic": "^1.2.1",
- "is-array-buffer": "^3.0.2",
- "is-shared-array-buffer": "^1.0.2"
- }
- },
- "assertion-error": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
- "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
- "dev": true
- },
- "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
- },
- "babel-loader": {
- "version": "8.2.3",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.3.tgz",
- "integrity": "sha512-n4Zeta8NC3QAsuyiizu0GkmRcQ6clkV9WFUnUf1iXP//IeSKbWjofW3UHyZVwlOB4y039YQKefawyTn64Zwbuw==",
- "dev": true,
- "requires": {
- "find-cache-dir": "^3.3.1",
- "loader-utils": "^1.4.0",
- "make-dir": "^3.1.0",
- "schema-utils": "^2.6.5"
- },
- "dependencies": {
- "json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- }
- }
- },
- "babel-plugin-jsm-to-esmodules": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jsm-to-esmodules/-/babel-plugin-jsm-to-esmodules-0.6.0.tgz",
- "integrity": "sha512-463Yuq2sLkjoGHl5vPYUQQONnDjxnmxZuhsR1swL5N76hDFGyYZAVd6HoS4E02jBF8bORpS4aFmdr1XjEZ0buQ==",
- "dev": true
- },
- "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
- },
- "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
- },
- "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
- },
- "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,
- "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",
- "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
- }
- }
- },
- "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",
- "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"
- }
- },
- "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"
- }
- },
- "browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true
- },
- "browserslist": {
- "version": "4.22.2",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
- "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001565",
- "electron-to-chromium": "^1.4.601",
- "node-releases": "^2.0.14",
- "update-browserslist-db": "^1.0.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
- },
- "bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "dev": true
- },
- "cached-iterable": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/cached-iterable/-/cached-iterable-0.3.0.tgz",
- "integrity": "sha512-MDqM6TpBVebZD4UDtmlFp8EjVtRcsB6xt9aRdWymjk0fWVUUGgmt/V7o0H0gkI2Tkvv8B0ucjidZm4mLosdlWw=="
- },
- "call-bind": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
- "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.1",
- "set-function-length": "^1.1.1"
- }
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30001574",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001574.tgz",
- "integrity": "sha512-BtYEK4r/iHt/txm81KBudCUcTy7t+s9emrIaHqjYurQ10x71zJ5VQ9x1dYPcz/b+pKSp4y/v1xSI67A+LzpNyg==",
- "dev": true
- },
- "chai": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz",
- "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==",
- "dev": true,
- "requires": {
- "assertion-error": "^1.1.0",
- "check-error": "^1.0.2",
- "deep-eql": "^3.0.1",
- "get-func-name": "^2.0.0",
- "pathval": "^1.1.1",
- "type-detect": "^4.0.5"
- }
- },
- "chai-json-schema": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/chai-json-schema/-/chai-json-schema-1.5.1.tgz",
- "integrity": "sha512-TR/xPDxRhqwFFCWg1HgL8nNWbpNfUwaib6pBN++QKpnd0t+o3+MBvAn5CM1mpdUMaM76oJAtUjGKdjGad01lIA==",
- "dev": true,
- "requires": {
- "jsonpointer.js": "0.4.0",
- "tv4": "^1.3.0"
- }
- },
- "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"
- }
- },
- "check-error": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
- "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
- "dev": true,
- "requires": {
- "get-func-name": "^2.0.2"
- }
- },
- "cheerio": {
- "version": "1.0.0-rc.12",
- "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz",
- "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==",
- "dev": true,
- "requires": {
- "cheerio-select": "^2.1.0",
- "dom-serializer": "^2.0.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.0.1",
- "htmlparser2": "^8.0.1",
- "parse5": "^7.0.0",
- "parse5-htmlparser2-tree-adapter": "^7.0.0"
- }
- },
- "cheerio-select": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz",
- "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==",
- "dev": true,
- "requires": {
- "boolbase": "^1.0.0",
- "css-select": "^5.1.0",
- "css-what": "^6.1.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3",
- "domutils": "^3.0.1"
- }
- },
- "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"
- }
- },
- "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
- },
- "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"
- },
- "dependencies": {
- "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
- },
- "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"
- }
- }
- }
- },
- "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
- },
- "colorette": {
- "version": "2.0.20",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
- "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
- "dev": true
- },
- "colors": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
- "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
- "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
- },
- "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": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
- "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
- "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",
- "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
- }
- }
- },
- "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": "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
- },
- "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
- },
- "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,
- "requires": {
- "object-assign": "^4",
- "vary": "^1"
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
- "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
- },
- "csstype": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
- },
- "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
- },
- "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
- },
- "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"
- }
- },
- "decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true
- },
- "deep-eql": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
- "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
- "dev": true,
- "requires": {
- "type-detect": "^4.0.0"
- }
- },
- "define-data-property": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
- "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.2.1",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
- }
- },
- "define-properties": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
- "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
- "dev": true,
- "requires": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- }
- },
- "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
- },
- "di": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz",
- "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==",
- "dev": true
- },
- "diff": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz",
- "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==",
- "dev": true
- },
- "discontinuous-range": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
- "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==",
- "dev": true
- },
- "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,
- "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"
- }
- },
- "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.620",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.620.tgz",
- "integrity": "sha512-a2fcSHOHrqBJsPNXtf6ZCEZpXrFCcbK1FBxfX3txoqWzNgtEDG1f3M59M98iwxhRW4iMKESnSjbJ310/rkrp0g==",
- "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
- },
- "engine.io": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz",
- "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==",
- "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.2.1",
- "ws": "~8.11.0"
- }
- },
- "engine.io-parser": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz",
- "integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==",
- "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",
- "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
- "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==",
- "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
- },
- "envinfo": {
- "version": "7.11.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz",
- "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==",
- "dev": true
- },
- "enzyme": {
- "version": "3.11.0",
- "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz",
- "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==",
- "dev": true,
- "requires": {
- "array.prototype.flat": "^1.2.3",
- "cheerio": "^1.0.0-rc.3",
- "enzyme-shallow-equal": "^1.0.1",
- "function.prototype.name": "^1.1.2",
- "has": "^1.0.3",
- "html-element-map": "^1.2.0",
- "is-boolean-object": "^1.0.1",
- "is-callable": "^1.1.5",
- "is-number-object": "^1.0.4",
- "is-regex": "^1.0.5",
- "is-string": "^1.0.5",
- "is-subset": "^0.1.1",
- "lodash.escape": "^4.0.1",
- "lodash.isequal": "^4.5.0",
- "object-inspect": "^1.7.0",
- "object-is": "^1.0.2",
- "object.assign": "^4.1.0",
- "object.entries": "^1.1.1",
- "object.values": "^1.1.1",
- "raf": "^3.4.1",
- "rst-selector-parser": "^2.2.3",
- "string.prototype.trim": "^1.2.1"
- }
- },
- "enzyme-adapter-react-16": {
- "version": "1.15.6",
- "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.15.6.tgz",
- "integrity": "sha512-yFlVJCXh8T+mcQo8M6my9sPgeGzj85HSHi6Apgf1Cvq/7EL/J9+1JoJmJsRxZgyTvPMAqOEpRSu/Ii/ZpyOk0g==",
- "dev": true,
- "requires": {
- "enzyme-adapter-utils": "^1.14.0",
- "enzyme-shallow-equal": "^1.0.4",
- "has": "^1.0.3",
- "object.assign": "^4.1.2",
- "object.values": "^1.1.2",
- "prop-types": "^15.7.2",
- "react-is": "^16.13.1",
- "react-test-renderer": "^16.0.0-0",
- "semver": "^5.7.0"
- },
- "dependencies": {
- "react-test-renderer": {
- "version": "16.14.0",
- "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.14.0.tgz",
- "integrity": "sha512-L8yPjqPE5CZO6rKsKXRO/rVPiaCOy0tQQJbC+UjPNlobl5mad59lvPjwFsQHTvL03caVDIVr9x9/OSgDe6I5Eg==",
- "dev": true,
- "requires": {
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "react-is": "^16.8.6",
- "scheduler": "^0.19.1"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- }
- }
- },
- "enzyme-adapter-utils": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.14.1.tgz",
- "integrity": "sha512-JZgMPF1QOI7IzBj24EZoDpaeG/p8Os7WeBZWTJydpsH7JRStc7jYbHE4CmNQaLqazaGFyLM8ALWA3IIZvxW3PQ==",
- "dev": true,
- "requires": {
- "airbnb-prop-types": "^2.16.0",
- "function.prototype.name": "^1.1.5",
- "has": "^1.0.3",
- "object.assign": "^4.1.4",
- "object.fromentries": "^2.0.5",
- "prop-types": "^15.8.1",
- "semver": "^5.7.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- }
- }
- },
- "enzyme-shallow-equal": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.5.tgz",
- "integrity": "sha512-i6cwm7hN630JXenxxJFBKzgLC3hMTafFQXflvzHgPmDhOBhxUWDe8AeRv1qp2/uWJ2Y8z5yLWMzmAfkTOiOCZg==",
- "dev": true,
- "requires": {
- "has": "^1.0.3",
- "object-is": "^1.1.5"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es-abstract": {
- "version": "1.22.3",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz",
- "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==",
- "dev": true,
- "requires": {
- "array-buffer-byte-length": "^1.0.0",
- "arraybuffer.prototype.slice": "^1.0.2",
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.5",
- "es-set-tostringtag": "^2.0.1",
- "es-to-primitive": "^1.2.1",
- "function.prototype.name": "^1.1.6",
- "get-intrinsic": "^1.2.2",
- "get-symbol-description": "^1.0.0",
- "globalthis": "^1.0.3",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0",
- "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.12",
- "is-weakref": "^1.0.2",
- "object-inspect": "^1.13.1",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.1",
- "safe-array-concat": "^1.0.1",
- "safe-regex-test": "^1.0.0",
- "string.prototype.trim": "^1.2.8",
- "string.prototype.trimend": "^1.0.7",
- "string.prototype.trimstart": "^1.0.7",
- "typed-array-buffer": "^1.0.0",
- "typed-array-byte-length": "^1.0.0",
- "typed-array-byte-offset": "^1.0.0",
- "typed-array-length": "^1.0.4",
- "unbox-primitive": "^1.0.2",
- "which-typed-array": "^1.1.13"
- }
- },
- "es-array-method-boxes-properly": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
- "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
- "dev": true
- },
- "es-module-lexer": {
- "version": "0.9.3",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
- "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
- "dev": true
- },
- "es-set-tostringtag": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz",
- "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.2.2",
- "has-tostringtag": "^1.0.0",
- "hasown": "^2.0.0"
- }
- },
- "es-shim-unscopables": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz",
- "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==",
- "dev": true,
- "requires": {
- "hasown": "^2.0.0"
- }
- },
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
- "dev": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "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"
- }
- },
- "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
- },
- "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": {
- "cross-spawn": {
- "version": "7.0.3",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
- "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
- "dev": true,
- "requires": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- }
- },
- "path-key": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
- "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
- "dev": true
- },
- "shebang-command": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
- "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
- "dev": true,
- "requires": {
- "shebang-regex": "^3.0.0"
- }
- },
- "shebang-regex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
- "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
- "dev": true
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true
- },
- "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
- },
- "fastest-levenshtein": {
- "version": "1.0.16",
- "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz",
- "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==",
- "dev": true
- },
- "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.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "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",
- "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
- },
- "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,
- "requires": {
- "ee-first": "1.1.1"
- }
- }
- }
- },
- "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": "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"
- }
- },
- "flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true
- },
- "flatted": {
- "version": "3.2.9",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz",
- "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==",
- "dev": true
- },
- "follow-redirects": {
- "version": "1.15.4",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz",
- "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==",
- "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"
- }
- },
- "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,
- "requires": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- },
- "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.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "optional": true
- },
- "function-bind": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
- "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
- "dev": true
- },
- "function.prototype.name": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz",
- "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1",
- "functions-have-names": "^1.2.3"
- }
- },
- "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
- },
- "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-func-name": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
- "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
- "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.2",
- "has-proto": "^1.0.1",
- "has-symbols": "^1.0.3",
- "hasown": "^2.0.0"
- }
- },
- "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
- },
- "get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.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"
- }
- },
- "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
- },
- "globalthis": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
- "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3"
- }
- },
- "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",
- "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
- },
- "growl": {
- "version": "1.10.5",
- "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
- "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
- "dev": true
- },
- "has": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
- "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
- "dev": true
- },
- "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",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true
- },
- "has-property-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
- "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.2.2"
- }
- },
- "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-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"
- }
- },
- "hasown": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
- "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.2"
- }
- },
- "he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true
- },
- "hoist-non-react-statics": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
- "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
- "requires": {
- "react-is": "^16.7.0"
- }
- },
- "hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "html-element-map": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz",
- "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==",
- "dev": true,
- "requires": {
- "array.prototype.filter": "^1.0.0",
- "call-bind": "^1.0.2"
- }
- },
- "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
- },
- "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-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"
- },
- "dependencies": {
- "statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "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"
- }
- },
- "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
- },
- "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"
- }
- },
- "import-local": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
- "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==",
- "dev": true,
- "requires": {
- "pkg-dir": "^4.2.0",
- "resolve-cwd": "^3.0.0"
- }
- },
- "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
- },
- "internal-slot": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
- "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.2.2",
- "hasown": "^2.0.0",
- "side-channel": "^1.0.4"
- }
- },
- "interpret": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
- "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
- "dev": true
- },
- "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",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
- "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",
- "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-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-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-core-module": {
- "version": "2.13.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
- "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
- "dev": true,
- "requires": {
- "hasown": "^2.0.0"
- }
- },
- "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",
- "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-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
- "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-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-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "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-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-subset": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
- "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==",
- "dev": true
- },
- "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.12",
- "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
- "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
- "dev": true,
- "requires": {
- "which-typed-array": "^1.1.11"
- }
- },
- "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-weakref": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
- "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2"
- }
- },
- "is-wsl": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
- "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
- "dev": true,
- "requires": {
- "is-docker": "^2.0.0"
- }
- },
- "isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
- "dev": true
- },
- "isbinaryfile": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz",
- "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==",
- "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.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
- "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
- "dev": true
- },
- "istanbul-lib-instrument": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
- "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.7.5",
- "@istanbuljs/schema": "^0.1.2",
- "istanbul-lib-coverage": "^3.0.0",
- "semver": "^6.3.0"
- }
- },
- "istanbul-lib-report": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
- "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "make-dir": "^4.0.0",
- "supports-color": "^7.1.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
- },
- "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"
- }
- },
- "make-dir": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
- "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
- "dev": true,
- "requires": {
- "semver": "^7.5.3"
- }
- },
- "semver": {
- "version": "7.5.4",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
- "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
- "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"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
- }
- },
- "istanbul-lib-source-maps": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
- "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
- "dev": true,
- "requires": {
- "debug": "^4.1.1",
- "istanbul-lib-coverage": "^2.0.5",
- "make-dir": "^2.1.0",
- "rimraf": "^2.6.3",
- "source-map": "^0.6.1"
- },
- "dependencies": {
- "istanbul-lib-coverage": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
- "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
- "dev": true
- },
- "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,
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- }
- },
- "pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- }
- }
- },
- "istanbul-reports": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
- "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
- "dev": true,
- "requires": {
- "html-escaper": "^2.0.0",
- "istanbul-lib-report": "^3.0.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"
- }
- }
- }
- },
- "js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
- },
- "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"
- }
- },
- "jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
- "json-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
- },
- "json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true
- },
- "jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.6"
- }
- },
- "jsonpointer.js": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/jsonpointer.js/-/jsonpointer.js-0.4.0.tgz",
- "integrity": "sha512-2bf/1crAmPpsmj1I6rDT6W0SOErkrNBpb555xNWcMVWYrX6VnXpG0GRMQ2shvOHwafpfse8q0gnzPFYVH6Tqdg==",
- "dev": true
- },
- "just-extend": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz",
- "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==",
- "dev": true
- },
- "karma": {
- "version": "6.3.8",
- "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.8.tgz",
- "integrity": "sha512-10wBBU9S0lBHhbCNfmmbWQaY5C1bXlKdnvzN2QKThujCI/+DKaezrI08l6bfTlpJ92VsEboq3zYKpXwK6DOi3A==",
- "dev": true,
- "requires": {
- "body-parser": "^1.19.0",
- "braces": "^3.0.2",
- "chokidar": "^3.5.1",
- "colors": "^1.4.0",
- "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.3.0",
- "mime": "^2.5.2",
- "minimatch": "^3.0.4",
- "qjobs": "^1.2.0",
- "range-parser": "^1.2.1",
- "rimraf": "^3.0.2",
- "socket.io": "^4.2.0",
- "source-map": "^0.6.1",
- "tmp": "^0.2.1",
- "ua-parser-js": "^0.7.30",
- "yargs": "^16.1.1"
- }
- },
- "karma-chai": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/karma-chai/-/karma-chai-0.1.0.tgz",
- "integrity": "sha512-mqKCkHwzPMhgTYca10S90aCEX9+HjVjjrBFAsw36Zj7BlQNbokXXCAe6Ji04VUMsxcY5RLP7YphpfO06XOubdg==",
- "dev": true,
- "requires": {}
- },
- "karma-coverage-istanbul-reporter": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-3.0.3.tgz",
- "integrity": "sha512-wE4VFhG/QZv2Y4CdAYWDbMmcAHeS926ZIji4z+FkB2aF/EposRb6DP6G5ncT/wXhqUfAb/d7kZrNKPonbvsATw==",
- "dev": true,
- "requires": {
- "istanbul-lib-coverage": "^3.0.0",
- "istanbul-lib-report": "^3.0.0",
- "istanbul-lib-source-maps": "^3.0.6",
- "istanbul-reports": "^3.0.2",
- "minimatch": "^3.0.4"
- }
- },
- "karma-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"
- }
- },
- "karma-json-reporter": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/karma-json-reporter/-/karma-json-reporter-1.2.1.tgz",
- "integrity": "sha512-ASmvranNhUN0ctSuAZKeWISW9Nf4AteMcVy8rJVjS7Qk+qWgssag/nw+yivHWKDROztVFn7TdamHOETMPCkvgA==",
- "dev": true,
- "requires": {}
- },
- "karma-mocha": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/karma-mocha/-/karma-mocha-2.0.1.tgz",
- "integrity": "sha512-Tzd5HBjm8his2OA4bouAsATYEpZrp9vC7z5E5j4C5Of5Rrs1jY67RAwXNcVmd/Bnk1wgvQRou0zGVLey44G4tQ==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.3"
- }
- },
- "karma-mocha-reporter": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz",
- "integrity": "sha512-Hr6nhkIp0GIJJrvzY8JFeHpQZNseuIakGac4bpw8K1+5F0tLb6l7uvXRa8mt2Z+NVwYgCct4QAfp2R2QP6o00w==",
- "dev": true,
- "requires": {
- "chalk": "^2.1.0",
- "log-symbols": "^2.1.0",
- "strip-ansi": "^4.0.0"
- }
- },
- "karma-sinon": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/karma-sinon/-/karma-sinon-1.0.5.tgz",
- "integrity": "sha512-wrkyAxJmJbn75Dqy17L/8aILJWFm7znd1CE8gkyxTBFnjMSOe2XTJ3P30T8SkxWZHmoHX0SCaUJTDBEoXs25Og==",
- "dev": true,
- "requires": {}
- },
- "karma-sourcemap-loader": {
- "version": "0.3.8",
- "resolved": "https://registry.npmjs.org/karma-sourcemap-loader/-/karma-sourcemap-loader-0.3.8.tgz",
- "integrity": "sha512-zorxyAakYZuBcHRJE+vbrK2o2JXLFWK8VVjiT/6P+ltLBUGUvqTEkUiQ119MGdOrK7mrmxXHZF1/pfT6GgIZ6g==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2"
- }
- },
- "karma-webpack": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-5.0.0.tgz",
- "integrity": "sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3",
- "minimatch": "^3.0.4",
- "webpack-merge": "^4.1.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
- },
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- }
- },
- "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": "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"
- }
- },
- "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"
- }
- },
- "lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "lodash.escape": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz",
- "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==",
- "dev": true
- },
- "lodash.flattendeep": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
- "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==",
- "dev": true
- },
- "lodash.get": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
- "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
- "dev": true
- },
- "lodash.isequal": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
- "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==",
- "dev": true
- },
- "log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.1"
- }
- },
- "log4js": {
- "version": "6.9.1",
- "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz",
- "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==",
- "dev": true,
- "requires": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "flatted": "^3.2.7",
- "rfdc": "^1.3.0",
- "streamroller": "^3.1.5"
- }
- },
- "loose-envify": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
- "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
- "requires": {
- "js-tokens": "^3.0.0 || ^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"
- }
- },
- "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"
- }
- },
- "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
- },
- "memorystream": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
- "dev": true
- },
- "merge-source-map": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
- "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
- "dev": true,
- "requires": {
- "source-map": "^0.6.1"
- }
- },
- "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
- },
- "mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "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
- },
- "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"
- }
- },
- "minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true
- },
- "mocha": {
- "version": "9.1.3",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz",
- "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==",
- "dev": true,
- "requires": {
- "@ungap/promise-all-settled": "1.1.2",
- "ansi-colors": "4.1.1",
- "browser-stdout": "1.3.1",
- "chokidar": "3.5.2",
- "debug": "4.3.2",
- "diff": "5.0.0",
- "escape-string-regexp": "4.0.0",
- "find-up": "5.0.0",
- "glob": "7.1.7",
- "growl": "1.10.5",
- "he": "1.2.0",
- "js-yaml": "4.1.0",
- "log-symbols": "4.1.0",
- "minimatch": "3.0.4",
- "ms": "2.1.3",
- "nanoid": "3.1.25",
- "serialize-javascript": "6.0.0",
- "strip-json-comments": "3.1.1",
- "supports-color": "8.1.1",
- "which": "2.0.2",
- "workerpool": "6.1.5",
- "yargs": "16.2.0",
- "yargs-parser": "20.2.4",
- "yargs-unparser": "2.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"
- },
- "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"
- }
- }
- }
- },
- "chokidar": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz",
- "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==",
- "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"
- }
- },
- "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
- },
- "debug": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
- "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
- "dev": true,
- "requires": {
- "ms": "2.1.2"
- },
- "dependencies": {
- "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
- }
- }
- },
- "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
- },
- "glob": {
- "version": "7.1.7",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
- "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==",
- "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
- },
- "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"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "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
- },
- "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"
- }
- }
- }
- },
- "moo": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz",
- "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==",
- "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
- },
- "nanoid": {
- "version": "3.1.25",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz",
- "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==",
- "dev": true
- },
- "nearley": {
- "version": "2.20.1",
- "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz",
- "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==",
- "dev": true,
- "requires": {
- "commander": "^2.19.0",
- "moo": "^0.5.0",
- "railroad-diagrams": "^1.0.0",
- "randexp": "0.4.6"
- }
- },
- "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
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
- "nise": {
- "version": "5.1.5",
- "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.5.tgz",
- "integrity": "sha512-VJuPIfUFaXNRzETTQEEItTOP8Y171ijr+JLq42wHes3DiryR8vT+1TXQW/Rx8JNUhyYYWyIvjXTU6dOhJcs9Nw==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^2.0.0",
- "@sinonjs/fake-timers": "^10.0.2",
- "@sinonjs/text-encoding": "^0.7.1",
- "just-extend": "^4.0.2",
- "path-to-regexp": "^1.7.0"
- },
- "dependencies": {
- "@sinonjs/commons": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz",
- "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- },
- "@sinonjs/fake-timers": {
- "version": "10.3.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz",
- "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^3.0.0"
- },
- "dependencies": {
- "@sinonjs/commons": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz",
- "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==",
- "dev": true,
- "requires": {
- "type-detect": "4.0.8"
- }
- }
- }
- }
- }
- },
- "node-releases": {
- "version": "2.0.14",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
- "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
- "dev": true
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true
- }
- }
- },
- "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
- },
- "npm-run-all": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz",
- "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "chalk": "^2.4.1",
- "cross-spawn": "^6.0.5",
- "memorystream": "^0.3.1",
- "minimatch": "^3.0.4",
- "pidtree": "^0.3.0",
- "read-pkg": "^3.0.0",
- "shell-quote": "^1.6.1",
- "string.prototype.padend": "^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"
- },
- "dependencies": {
- "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
- }
- }
- },
- "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",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="
- },
- "object-inspect": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
- "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
- "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.5",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
- "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.5",
- "define-properties": "^1.2.1",
- "has-symbols": "^1.0.3",
- "object-keys": "^1.1.1"
- }
- },
- "object.entries": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz",
- "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "object.fromentries": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz",
- "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "object.values": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz",
- "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "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"
- }
- },
- "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"
- }
- },
- "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"
- }
- },
- "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
- },
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
- "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-htmlparser2-tree-adapter": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz",
- "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==",
- "dev": true,
- "requires": {
- "domhandler": "^5.0.2",
- "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": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
- "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-to-regexp": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
- "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
- "dev": true,
- "requires": {
- "isarray": "0.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "dev": true
- }
- }
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "pathval": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
- "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
- "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",
- "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
- },
- "pidtree": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz",
- "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==",
- "dev": true
- },
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
- "dev": true
- },
- "pkg-dir": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
- "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
- "dev": true,
- "requires": {
- "find-up": "^4.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "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"
- }
- }
- }
- },
- "prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "prop-types-exact": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/prop-types-exact/-/prop-types-exact-1.2.0.tgz",
- "integrity": "sha512-K+Tk3Kd9V0odiXFP9fwDHUYRyvK3Nun3GVyPapSIs5OBkITAm15W0CPFD/YKTkMUAbc0b9CUwRQp2ybiBIq+eA==",
- "dev": true,
- "requires": {
- "has": "^1.0.3",
- "object.assign": "^4.1.0",
- "reflect.ownkeys": "^0.2.0"
- }
- },
- "punycode": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
- "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
- "dev": true
- },
- "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
- },
- "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"
- }
- },
- "raf": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz",
- "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==",
- "dev": true,
- "requires": {
- "performance-now": "^2.1.0"
- }
- },
- "railroad-diagrams": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",
- "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==",
- "dev": true
- },
- "randexp": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
- "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
- "dev": true,
- "requires": {
- "discontinuous-range": "1.0.0",
- "ret": "~0.1.10"
- }
- },
- "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.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "dev": true,
- "requires": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- }
- },
- "raw-loader": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz",
- "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==",
- "dev": true,
- "requires": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "react": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz",
- "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2"
- }
- },
- "react-dom": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz",
- "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.19.1"
- }
- },
- "react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
- },
- "react-redux": {
- "version": "7.2.6",
- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-7.2.6.tgz",
- "integrity": "sha512-10RPdsz0UUrRL1NZE0ejTkucnclYSgXp5q+tB5SWx2qeG2ZJQJyymgAhwKy73yiL/13btfB6fPr+rgbMAaZIAQ==",
- "requires": {
- "@babel/runtime": "^7.15.4",
- "@types/react-redux": "^7.1.20",
- "hoist-non-react-statics": "^3.3.2",
- "loose-envify": "^1.4.0",
- "prop-types": "^15.7.2",
- "react-is": "^17.0.2"
- },
- "dependencies": {
- "react-is": {
- "version": "17.0.2",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz",
- "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w=="
- }
- }
- },
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "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"
- }
- },
- "rechoir": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz",
- "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==",
- "dev": true,
- "requires": {
- "resolve": "^1.9.0"
- }
- },
- "redux": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/redux/-/redux-4.1.2.tgz",
- "integrity": "sha512-SH8PglcebESbd/shgf6mii6EIoRM0zrQyjcuQ+ojmfxjTtE0z9Y8pa62iA/OJ58qjP6j27uyW4kUF4jl/jd6sw==",
- "requires": {
- "@babel/runtime": "^7.9.2"
- }
- },
- "reflect.ownkeys": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/reflect.ownkeys/-/reflect.ownkeys-0.2.0.tgz",
- "integrity": "sha512-qOLsBKHCpSOFKK1NUOCGC5VyeufB6lEsFe92AL2bhIJsacZS1qdoOZSbPk3MYKuT2cFlRDnulKXuuElIrMjGUg==",
- "dev": true
- },
- "regenerator-runtime": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
- "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw=="
- },
- "regexp.prototype.flags": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz",
- "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "set-function-name": "^2.0.0"
- }
- },
- "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
- },
- "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.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
- "dev": true,
- "requires": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "resolve-cwd": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz",
- "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==",
- "dev": true,
- "requires": {
- "resolve-from": "^5.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
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "rfdc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
- "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==",
- "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"
- }
- },
- "rst-selector-parser": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
- "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==",
- "dev": true,
- "requires": {
- "lodash.flattendeep": "^4.4.0",
- "nearley": "^2.7.10"
- }
- },
- "safe-array-concat": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz",
- "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "has-symbols": "^1.0.3",
- "isarray": "^2.0.5"
- }
- },
- "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
- },
- "safe-regex-test": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
- "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
- "is-regex": "^1.1.4"
- }
- },
- "safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true
- },
- "sass": {
- "version": "1.43.4",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.43.4.tgz",
- "integrity": "sha512-/ptG7KE9lxpGSYiXn7Ar+lKOv37xfWsZRtFYal2QHNigyVQDx685VFT/h7ejVr+R8w7H4tmUgtulsKl5YpveOg==",
- "dev": true,
- "requires": {
- "chokidar": ">=3.0.0 <4.0.0"
- }
- },
- "scheduler": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
- "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
- "schema-utils": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz",
- "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.5",
- "ajv": "^6.12.4",
- "ajv-keywords": "^3.5.2"
- }
- },
- "semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true
- },
- "serialize-javascript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz",
- "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "set-function-length": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
- "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
- "dev": true,
- "requires": {
- "define-data-property": "^1.1.1",
- "get-intrinsic": "^1.2.1",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.0"
- }
- },
- "set-function-name": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz",
- "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==",
- "dev": true,
- "requires": {
- "define-data-property": "^1.0.1",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.0"
- }
- },
- "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": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
- "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": "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
- },
- "sinon": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-12.0.1.tgz",
- "integrity": "sha512-iGu29Xhym33ydkAT+aNQFBINakjq69kKO6ByPvTsm3yyIACfyQttRTP03aBP/I8GfhFmLzrnKwNNkr0ORb1udg==",
- "dev": true,
- "requires": {
- "@sinonjs/commons": "^1.8.3",
- "@sinonjs/fake-timers": "^8.1.0",
- "@sinonjs/samsam": "^6.0.2",
- "diff": "^5.0.0",
- "nise": "^5.1.0",
- "supports-color": "^7.2.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": "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"
- }
- }
- }
- },
- "socket.io": {
- "version": "4.7.3",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.3.tgz",
- "integrity": "sha512-SE+UIQXBQE+GPG2oszWMlsEmWtHVqw/h1VrYJGK5/MC7CH5p58N448HwIrtREcvR4jfdOJAY4ieQfxMr55qbbw==",
- "dev": true,
- "requires": {
- "accepts": "~1.3.4",
- "base64id": "~2.0.0",
- "cors": "~2.8.5",
- "debug": "~4.3.2",
- "engine.io": "~6.5.2",
- "socket.io-adapter": "~2.5.2",
- "socket.io-parser": "~4.2.4"
- }
- },
- "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,
- "requires": {
- "ws": "~8.11.0"
- }
- },
- "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,
- "requires": {
- "@socket.io/component-emitter": "~3.1.0",
- "debug": "~4.3.1"
- }
- },
- "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
- },
- "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"
- }
- },
- "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.16",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz",
- "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==",
- "dev": true
- },
- "sprintf-js": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
- "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
- },
- "stream-browserify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
- "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
- "dev": true,
- "requires": {
- "inherits": "~2.0.4",
- "readable-stream": "^3.5.0"
- }
- },
- "streamroller": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
- "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==",
- "dev": true,
- "requires": {
- "date-format": "^4.0.14",
- "debug": "^4.3.4",
- "fs-extra": "^8.1.0"
- }
- },
- "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"
- },
- "dependencies": {
- "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
- },
- "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"
- }
- }
- }
- },
- "string.prototype.padend": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz",
- "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "string.prototype.trim": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz",
- "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz",
- "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz",
- "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.2.0",
- "es-abstract": "^1.22.1"
- }
- },
- "strip-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
- "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==",
- "dev": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- },
- "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
- },
- "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
- },
- "tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true
- },
- "terser": {
- "version": "5.26.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz",
- "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==",
- "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.10",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz",
- "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==",
- "dev": true,
- "requires": {
- "@jridgewell/trace-mapping": "^0.3.20",
- "jest-worker": "^27.4.5",
- "schema-utils": "^3.1.1",
- "serialize-javascript": "^6.0.1",
- "terser": "^5.26.0"
- },
- "dependencies": {
- "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"
- }
- },
- "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"
- }
- }
- }
- },
- "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"
- }
- },
- "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
- },
- "tv4": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/tv4/-/tv4-1.3.0.tgz",
- "integrity": "sha512-afizzfpJgvPr+eDkREK4MxJ/+r8nEEHcmitwgnPUqpaP+FpwQyadnxNoSACbgc/b1LsZYtODGoPiFxQrgJgjvw==",
- "dev": true
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "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-array-buffer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz",
- "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.2.1",
- "is-typed-array": "^1.1.10"
- }
- },
- "typed-array-byte-length": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz",
- "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
- }
- },
- "typed-array-byte-offset": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz",
- "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==",
- "dev": true,
- "requires": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "has-proto": "^1.0.1",
- "is-typed-array": "^1.1.10"
- }
- },
- "typed-array-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
- "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
- }
- },
- "ua-parser-js": {
- "version": "0.7.37",
- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.37.tgz",
- "integrity": "sha512-xV8kqRKM+jhMvcHWUKthV9fNebIzrNy//2O9ZwWcfiBFR5f25XVZPLlEajk/sf3Ra15V92isyQqnIEXRDaZWEA==",
- "dev": true
- },
- "unbox-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
- "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.0.3",
- "which-boxed-primitive": "^1.0.2"
- }
- },
- "undici-types": {
- "version": "5.26.5",
- "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
- "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
- "dev": true
- },
- "universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "dev": true
- },
- "update-browserslist-db": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
- "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
- "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
- },
- "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"
- }
- },
- "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
- },
- "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
- },
- "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"
- }
- },
- "webpack": {
- "version": "5.56.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.56.0.tgz",
- "integrity": "sha512-pJ7esw2AGkpZL0jqsEAKnDEfRZdrc9NVjAWA+d1mFkwj68ng9VQ6+Wnrl+kS5dlDHvrat5ASK5vd7wp6I7f53Q==",
- "dev": true,
- "requires": {
- "@types/eslint-scope": "^3.7.0",
- "@types/estree": "^0.0.50",
- "@webassemblyjs/ast": "1.11.1",
- "@webassemblyjs/wasm-edit": "1.11.1",
- "@webassemblyjs/wasm-parser": "1.11.1",
- "acorn": "^8.4.1",
- "acorn-import-assertions": "^1.7.6",
- "browserslist": "^4.14.5",
- "chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.8.3",
- "es-module-lexer": "^0.9.0",
- "eslint-scope": "5.1.1",
- "events": "^3.2.0",
- "glob-to-regexp": "^0.4.1",
- "graceful-fs": "^4.2.4",
- "json-parse-better-errors": "^1.0.2",
- "loader-runner": "^4.2.0",
- "mime-types": "^2.1.27",
- "neo-async": "^2.6.2",
- "schema-utils": "^3.1.0",
- "tapable": "^2.1.1",
- "terser-webpack-plugin": "^5.1.3",
- "watchpack": "^2.2.0",
- "webpack-sources": "^3.2.0"
- },
- "dependencies": {
- "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-cli": {
- "version": "4.9.1",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz",
- "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==",
- "dev": true,
- "requires": {
- "@discoveryjs/json-ext": "^0.5.0",
- "@webpack-cli/configtest": "^1.1.0",
- "@webpack-cli/info": "^1.4.0",
- "@webpack-cli/serve": "^1.6.0",
- "colorette": "^2.0.14",
- "commander": "^7.0.0",
- "execa": "^5.0.0",
- "fastest-levenshtein": "^1.0.12",
- "import-local": "^3.0.2",
- "interpret": "^2.2.0",
- "rechoir": "^0.7.0",
- "webpack-merge": "^5.7.3"
- },
- "dependencies": {
- "commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
- "dev": true
- },
- "webpack-merge": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz",
- "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==",
- "dev": true,
- "requires": {
- "clone-deep": "^4.0.1",
- "flat": "^5.0.2",
- "wildcard": "^2.0.0"
- }
- }
- }
- },
- "webpack-merge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz",
- "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.15"
- }
- },
- "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
- },
- "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"
- }
- },
- "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-typed-array": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
- "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
- "dev": true,
- "requires": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.4",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "has-tostringtag": "^1.0.0"
- }
- },
- "wildcard": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz",
- "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==",
- "dev": true
- },
- "workerpool": {
- "version": "6.1.5",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz",
- "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==",
- "dev": true
- },
- "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-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": "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
- },
- "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"
- }
- }
- }
- },
- "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.11.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
- "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
- "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
- },
- "yamljs": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz",
- "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==",
- "dev": true,
- "requires": {
- "argparse": "^1.0.7",
- "glob": "^7.0.5"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "yamscripts": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yamscripts/-/yamscripts-0.1.0.tgz",
- "integrity": "sha512-i4ThS58KwsK83qSrrc8YZiBqgdl3WewWcWZ4fPdrh7A+qiRU9kXMcIKzngOC7VpJ2nTsWvHG6TcK3JHXpBxACA==",
- "dev": true,
- "requires": {
- "colors": "^1.3.2",
- "fs-extra": "^7.0.0",
- "minimist": "^1.2.0",
- "yamljs": "^0.3.0"
- },
- "dependencies": {
- "fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- }
- }
- }
- },
- "yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "requires": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- }
- },
- "yargs-parser": {
- "version": "20.2.4",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz",
- "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==",
- "dev": true
- },
- "yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "requires": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.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
- }
}
}
diff --git a/browser/components/asrouter/package.json b/browser/components/asrouter/package.json
index 8bd8da7b54..17bc8f7364 100644
--- a/browser/components/asrouter/package.json
+++ b/browser/components/asrouter/package.json
@@ -4,23 +4,22 @@
"version": "1.0.0",
"author": "Mozilla (https://mozilla.org/)",
"dependencies": {
- "@fluent/bundle": "0.17.1",
- "@fluent/react": "0.15.0",
+ "@fluent/bundle": "0.18.0",
+ "@fluent/react": "0.15.2",
"react": "16.13.1",
"react-dom": "16.13.1",
"react-redux": "7.2.6",
"redux": "4.1.2"
},
"devDependencies": {
- "@babel/preset-react": "7.16.0",
+ "@babel/preset-react": "7.23.3",
"@jsdevtools/coverage-istanbul-loader": "^3.0.5",
- "babel-loader": "8.2.3",
- "babel-plugin-jsm-to-esmodules": "0.6.0",
+ "babel-loader": "9.1.3",
"chai": "4.3.4",
"chai-json-schema": "1.5.1",
"enzyme": "3.11.0",
- "enzyme-adapter-react-16": "1.15.6",
- "karma": "6.3.8",
+ "enzyme-adapter-react-16": "1.15.8",
+ "karma": "6.4.2",
"karma-chai": "0.1.0",
"karma-coverage-istanbul-reporter": "3.0.3",
"karma-firefox-launcher": "2.1.2",
@@ -28,23 +27,22 @@
"karma-mocha": "2.0.1",
"karma-mocha-reporter": "2.2.5",
"karma-sinon": "1.0.5",
- "karma-sourcemap-loader": "0.3.8",
- "karma-webpack": "5.0.0",
- "mocha": "9.1.3",
+ "karma-sourcemap-loader": "0.4.0",
+ "karma-webpack": "5.0.1",
+ "mocha": "10.3.0",
"npm-run-all": "4.1.5",
"raw-loader": "4.0.2",
- "sass": "1.43.4",
- "sinon": "12.0.1",
- "stream-browserify": "3.0.0",
- "webpack": "5.56.0",
- "webpack-cli": "4.9.1",
+ "sass": "1.71.1",
+ "sinon": "17.0.1",
+ "webpack": "5.90.3",
+ "webpack-cli": "5.1.4",
"yamscripts": "0.1.0"
},
"engines": {
- "firefox": ">=45.0 <=*",
+ "firefox": ">=122.0 <=*",
"//": "when changing node versions, also edit .nvmrc",
- "node": "16.19.*",
- "npm": "8.19.3"
+ "node": "18.19.*",
+ "npm": "10.2.*"
},
"license": "MPL-2.0",
"config": {
diff --git a/browser/components/asrouter/tests/browser/browser_asrouter_cfr.js b/browser/components/asrouter/tests/browser/browser_asrouter_cfr.js
index 0cab79994e..e29771c24f 100644
--- a/browser/components/asrouter/tests/browser/browser_asrouter_cfr.js
+++ b/browser/components/asrouter/tests/browser/browser_asrouter_cfr.js
@@ -183,7 +183,8 @@ add_setup(async function () {
// Store it in order to restore to the original value
const { _fetchLatestAddonVersion } = CFRPageActions;
// Prevent fetching the real addon url and making a network request
- CFRPageActions._fetchLatestAddonVersion = x => "http://example.com";
+ CFRPageActions._fetchLatestAddonVersion = () => "http://example.com";
+ Services.fog.testResetFOG();
registerCleanupFunction(() => {
CFRPageActions._fetchLatestAddonVersion = _fetchLatestAddonVersion;
@@ -193,20 +194,10 @@ add_setup(async function () {
});
add_task(async function test_cfr_notification_show() {
- registerCleanupFunction(() => {
- Services.prefs.clearUserPref(
- "browser.newtabpage.activity-stream.telemetry"
- );
- // Reset fog to clear pings here for private window test later.
- Services.fog.testResetFOG();
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.newtabpage.activity-stream.telemetry", true]],
});
- Services.prefs.setBoolPref(
- "browser.newtabpage.activity-stream.telemetry",
- true
- );
-
- Services.fog.testResetFOG();
let pingSubmitted = false;
GleanPings.messagingSystem.testBeforeNextSubmit(() => {
pingSubmitted = true;
@@ -266,6 +257,7 @@ add_task(async function test_cfr_notification_show() {
);
Assert.ok(pingSubmitted, "Recorded an event");
+ Services.fog.testResetFOG();
});
add_task(async function test_cfr_notification_show() {
@@ -332,6 +324,7 @@ add_task(async function test_cfr_notification_show() {
0,
"Should have removed the notification"
);
+ Services.fog.testResetFOG();
});
add_task(async function test_cfr_notification_minimize() {
@@ -379,6 +372,7 @@ add_task(async function test_cfr_notification_minimize() {
.getElementById("contextual-feature-recommendation-notification")
.button.click();
await hidePanel;
+ Services.fog.testResetFOG();
});
add_task(async function test_cfr_notification_minimize_2() {
@@ -441,6 +435,7 @@ add_task(async function test_cfr_notification_minimize_2() {
clearNotifications();
CFRPageActions.clearRecommendations();
+ Services.fog.testResetFOG();
});
add_task(async function test_cfr_addon_install() {
@@ -500,6 +495,7 @@ add_task(async function test_cfr_addon_install() {
);
clearNotifications();
+ Services.fog.testResetFOG();
});
add_task(
@@ -551,6 +547,7 @@ add_task(
await hidePanel;
await SpecialPowers.popPrefEnv();
clearNotifications();
+ Services.fog.testResetFOG();
}
);
@@ -642,6 +639,7 @@ add_task(async function test_cfr_addon_and_features_show() {
0,
"Should have removed the notification"
);
+ Services.fog.testResetFOG();
});
add_task(async function test_onLocationChange_cb() {
@@ -678,9 +676,8 @@ add_task(async function test_onLocationChange_cb() {
Assert.equal(count, 2, "We moved to a new document");
- registerCleanupFunction(() => {
- ASRouterTriggerListeners.get("openURL").uninit();
- });
+ ASRouterTriggerListeners.get("openURL").uninit();
+ Services.fog.testResetFOG();
});
add_task(async function test_matchPattern() {
@@ -730,9 +727,8 @@ add_task(async function test_matchPattern() {
"www.example.com is a different host that also matches the pattern."
);
- registerCleanupFunction(() => {
- ASRouterTriggerListeners.get("frequentVisits").uninit();
- });
+ ASRouterTriggerListeners.get("frequentVisits").uninit();
+ Services.fog.testResetFOG();
});
add_task(async function test_providerNames() {
@@ -741,11 +737,11 @@ add_task(async function test_providerNames() {
const cfrProviderPrefs = Services.prefs.getChildList(providersBranch);
for (const prefName of cfrProviderPrefs) {
const prefValue = JSON.parse(Services.prefs.getStringPref(prefName));
- if (prefValue && prefValue.id) {
+ if (prefValue?.id) {
Assert.equal(
prefValue.id,
prefName.slice(providersBranch.length),
- "Provider id and pref name do not match"
+ "Provider id and pref name should match"
);
}
}
@@ -804,6 +800,7 @@ add_task(async function test_cfr_notification_keyboard() {
.getElementById("contextual-feature-recommendation-notification")
.button.click();
await hidePanel;
+ Services.fog.testResetFOG();
});
add_task(function test_updateCycleForProviders() {
@@ -811,19 +808,18 @@ add_task(function test_updateCycleForProviders() {
.getChildList("browser.newtabpage.activity-stream.asrouter.providers.")
.forEach(provider => {
const prefValue = JSON.parse(Services.prefs.getStringPref(provider, ""));
- if (prefValue && prefValue.type === "remote-settings") {
- Assert.ok(prefValue.updateCycleInMs);
+ if (prefValue?.type === "remote-settings") {
+ is(
+ typeof prefValue.updateCycleInMs,
+ "number",
+ "updateCycleInMs is set"
+ );
}
});
});
add_task(async function test_heartbeat_tactic_2() {
clearNotifications();
- registerCleanupFunction(() => {
- // Remove the tab opened by clicking the heartbeat message
- gBrowser.removeCurrentTab();
- clearNotifications();
- });
const msg = (await CFRMessageProvider.getMessages()).find(
m => m.id === "HEARTBEAT_TACTIC_2"
@@ -858,18 +854,15 @@ add_task(async function test_heartbeat_tactic_2() {
document.getElementById("contextual-feature-recommendation").click();
await newTabPromise;
+ gBrowser.removeCurrentTab();
+ clearNotifications();
+ Services.fog.testResetFOG();
});
add_task(async function test_cfr_doorhanger_in_private_window() {
- registerCleanupFunction(() => {
- Services.prefs.clearUserPref(
- "browser.newtabpage.activity-stream.telemetry"
- );
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.newtabpage.activity-stream.telemetry", true]],
});
- Services.prefs.setBoolPref(
- "browser.newtabpage.activity-stream.telemetry",
- true
- );
let pingSubmitted = false;
GleanPings.messagingSystem.testBeforeNextSubmit(() => {
@@ -929,4 +922,5 @@ add_task(async function test_cfr_doorhanger_in_private_window() {
Assert.ok(pingSubmitted, "Submitted a CFR messaging system ping");
await BrowserTestUtils.closeWindow(win);
+ Services.fog.testResetFOG();
});
diff --git a/browser/components/asrouter/tests/browser/browser_asrouter_experimentsAPILoader.js b/browser/components/asrouter/tests/browser/browser_asrouter_experimentsAPILoader.js
index 14f4dda54f..88f284719e 100644
--- a/browser/components/asrouter/tests/browser/browser_asrouter_experimentsAPILoader.js
+++ b/browser/components/asrouter/tests/browser/browser_asrouter_experimentsAPILoader.js
@@ -444,7 +444,7 @@ add_task(async function test_emptyMessage() {
);
// Clear all messages
- ASRouter.setState(state => ({
+ ASRouter.setState(() => ({
messages: [],
}));
diff --git a/browser/components/asrouter/tests/browser/browser_asrouter_targeting.js b/browser/components/asrouter/tests/browser/browser_asrouter_targeting.js
index 432b4b75a7..55f278fd7d 100644
--- a/browser/components/asrouter/tests/browser/browser_asrouter_targeting.js
+++ b/browser/components/asrouter/tests/browser/browser_asrouter_targeting.js
@@ -93,7 +93,7 @@ add_task(async function return_nothing_for_no_matching_message() {
add_task(async function check_other_error_handling() {
let called = false;
- function onError(...args) {
+ function onError() {
called = true;
}
diff --git a/browser/components/asrouter/tests/browser/browser_feature_callout_panel.js b/browser/components/asrouter/tests/browser/browser_feature_callout_panel.js
index 1f87c71ec7..af2bc99e63 100644
--- a/browser/components/asrouter/tests/browser/browser_feature_callout_panel.js
+++ b/browser/components/asrouter/tests/browser/browser_feature_callout_panel.js
@@ -186,7 +186,7 @@ add_task(async function panel_feature_callout_anchor_open_attr() {
win.document.querySelector(calloutDismissSelector).click();
},
- (win, calloutContainer) => {
+ () => {
ok(
!anchor.hasAttribute("open"),
"Callout container's anchor node should not have its [open] attribute set"
diff --git a/browser/components/asrouter/tests/browser/browser_trigger_listeners.js b/browser/components/asrouter/tests/browser/browser_trigger_listeners.js
index 7c86645221..d7fb15b308 100644
--- a/browser/components/asrouter/tests/browser/browser_trigger_listeners.js
+++ b/browser/components/asrouter/tests/browser/browser_trigger_listeners.js
@@ -16,10 +16,10 @@ const mockIdleService = {
},
QueryInterface: ChromeUtils.generateQI(["nsIUserIdleService"]),
idleTime: 1200000,
- addIdleObserver(observer, time) {
+ addIdleObserver(observer) {
this._observers.add(observer);
},
- removeIdleObserver(observer, time) {
+ removeIdleObserver(observer) {
this._observers.delete(observer);
},
};
diff --git a/browser/components/asrouter/tests/browser/head.js b/browser/components/asrouter/tests/browser/head.js
index dd5e451540..51cd975d75 100644
--- a/browser/components/asrouter/tests/browser/head.js
+++ b/browser/components/asrouter/tests/browser/head.js
@@ -11,9 +11,7 @@ ChromeUtils.defineESModuleGetters(this, {
"resource:///modules/asrouter/FeatureCalloutMessages.sys.mjs",
PlacesTestUtils: "resource://testing-common/PlacesTestUtils.sys.mjs",
-});
-XPCOMUtils.defineLazyModuleGetters(this, {
- QueryCache: "resource:///modules/asrouter/ASRouterTargeting.jsm",
+ QueryCache: "resource:///modules/asrouter/ASRouterTargeting.sys.mjs",
});
const { FxAccounts } = ChromeUtils.importESModule(
"resource://gre/modules/FxAccounts.sys.mjs"
diff --git a/browser/components/asrouter/tests/unit/ASRouterChild.test.js b/browser/components/asrouter/tests/unit/ASRouterChild.test.js
index 41fdd79ea2..b73e56d510 100644
--- a/browser/components/asrouter/tests/unit/ASRouterChild.test.js
+++ b/browser/components/asrouter/tests/unit/ASRouterChild.test.js
@@ -1,22 +1,12 @@
/*eslint max-nested-callbacks: ["error", 10]*/
import { ASRouterChild } from "actors/ASRouterChild.sys.mjs";
import { MESSAGE_TYPE_HASH as msg } from "modules/ActorConstants.sys.mjs";
-import { GlobalOverrider } from "test/unit/utils";
describe("ASRouterChild", () => {
let asRouterChild = null;
- let globals = null;
- let overrider = null;
let sandbox = null;
beforeEach(() => {
sandbox = sinon.createSandbox();
- globals = {
- Cu: {
- cloneInto: sandbox.stub().returns(Promise.resolve()),
- },
- };
- overrider = new GlobalOverrider();
- overrider.set(globals);
asRouterChild = new ASRouterChild();
asRouterChild.telemetry = {
sendTelemetry: sandbox.stub(),
@@ -26,7 +16,6 @@ describe("ASRouterChild", () => {
});
afterEach(() => {
sandbox.restore();
- overrider.restore();
asRouterChild = null;
});
describe("asRouterMessage", () => {
diff --git a/browser/components/asrouter/tests/unit/ASRouterTargeting.test.js b/browser/components/asrouter/tests/unit/ASRouterTargeting.test.js
index 610b488b47..392fa59aed 100644
--- a/browser/components/asrouter/tests/unit/ASRouterTargeting.test.js
+++ b/browser/components/asrouter/tests/unit/ASRouterTargeting.test.js
@@ -32,11 +32,11 @@ describe("#CachedTargetingGetter", () => {
globals.set(
"TargetingContext",
class {
- static combineContexts(...args) {
+ static combineContexts() {
return sinon.stub();
}
- evalWithDefault(expr) {
+ evalWithDefault() {
return sinon.stub();
}
}
diff --git a/browser/components/asrouter/tests/unit/CFRPageActions.test.js b/browser/components/asrouter/tests/unit/CFRPageActions.test.js
index 31970eb43a..92dfa43d92 100644
--- a/browser/components/asrouter/tests/unit/CFRPageActions.test.js
+++ b/browser/components/asrouter/tests/unit/CFRPageActions.test.js
@@ -554,7 +554,7 @@ describe("CFRPageActions", () => {
);
const htmlFooterEl = fakeRemoteL10n.createElement.args.find(
/* eslint-disable-next-line max-nested-callbacks */
- ([doc, el, args]) =>
+ ([, , args]) =>
args && args.content === fakeRecommendation.content.text
);
assert.ok(htmlFooterEl);
@@ -849,7 +849,7 @@ describe("CFRPageActions", () => {
);
const [, , headerElementArgs] = fakeRemoteL10n.createElement.args.find(
/* eslint-disable-next-line max-nested-callbacks */
- ([doc, el, args]) => args && args.content && args.attributes
+ ([, , args]) => args && args.content && args.attributes
);
assert.equal(
headerElementArgs.content.string_id,
@@ -872,7 +872,7 @@ describe("CFRPageActions", () => {
);
const [, , headerElementArgs] = fakeRemoteL10n.createElement.args.find(
/* eslint-disable-next-line max-nested-callbacks */
- ([doc, el, args]) => args && args.content && args.attributes
+ ([, , args]) => args && args.content && args.attributes
);
assert.equal(
headerElementArgs.content.string_id,
diff --git a/browser/components/asrouter/tests/unit/TargetingDocs.test.js b/browser/components/asrouter/tests/unit/TargetingDocs.test.js
index d00f971453..536049e64b 100644
--- a/browser/components/asrouter/tests/unit/TargetingDocs.test.js
+++ b/browser/components/asrouter/tests/unit/TargetingDocs.test.js
@@ -50,7 +50,7 @@ describe("ASRTargeting docs", () => {
describe("All targeting params documented in targeting-attributes.md", () => {
for (const targetingParam of ASRTargetingAttributes) {
- // If this test is failing, you probably forgot to add docs to content-src/asrouter/targeting-attributes.md
+ // If this test is failing, you probably forgot to add docs to asrouter/docs/targeting-attributes.md
// for a new targeting attribute, or you forgot to put it in the table of contents up top.
it(`should have docs and table of contents entry for ${targetingParam}`, () => {
assert.include(
diff --git a/browser/components/asrouter/tests/unit/ToolbarPanelHub.test.js b/browser/components/asrouter/tests/unit/ToolbarPanelHub.test.js
index 64cb8243b7..1755f62308 100644
--- a/browser/components/asrouter/tests/unit/ToolbarPanelHub.test.js
+++ b/browser/components/asrouter/tests/unit/ToolbarPanelHub.test.js
@@ -392,14 +392,13 @@ describe("ToolbarPanelHub", () => {
for (let message of messages) {
assert.ok(
fakeRemoteL10n.createElement.args.find(
- ([doc, el, args]) =>
- args && args.classList === "whatsNew-message-title"
+ ([, , args]) => args && args.classList === "whatsNew-message-title"
)
);
if (message.content.layout === "tracking-protections") {
assert.ok(
fakeRemoteL10n.createElement.args.find(
- ([doc, el, args]) =>
+ ([, , args]) =>
args && args.classList === "whatsNew-message-subtitle"
)
);
@@ -407,13 +406,13 @@ describe("ToolbarPanelHub", () => {
if (message.id === "WHATS_NEW_FINGERPRINTER_COUNTER_72") {
assert.ok(
fakeRemoteL10n.createElement.args.find(
- ([doc, el, args]) => el === "h2" && args.content === 3
+ ([, el, args]) => el === "h2" && args.content === 3
)
);
}
assert.ok(
fakeRemoteL10n.createElement.args.find(
- ([doc, el, args]) =>
+ ([, , args]) =>
args && args.classList === "whatsNew-message-content"
)
);
@@ -456,10 +455,9 @@ describe("ToolbarPanelHub", () => {
// value as the `order` field of the message
const titleEls = fakeRemoteL10n.createElement.args
.filter(
- ([doc, el, args]) =>
- args && args.classList === "whatsNew-message-title"
+ ([, , args]) => args && args.classList === "whatsNew-message-title"
)
- .map(([doc, el, args]) => args.content);
+ .map(([, , args]) => args.content);
assert.deepEqual(titleEls, [1, 2, 3]);
});
it("should accept string for image attributes", async () => {
@@ -488,7 +486,7 @@ describe("ToolbarPanelHub", () => {
await instance.renderMessages(fakeWindow, fakeDocument, "container-id");
const [, , args] = fakeRemoteL10n.createElement.args.find(
- ([doc, el, elArgs]) => elArgs && elArgs.attributes
+ ([, , elArgs]) => elArgs && elArgs.attributes
);
assert.ok(args);
// Currently this.state.contentArguments has 8 different entries
@@ -510,7 +508,7 @@ describe("ToolbarPanelHub", () => {
await instance.renderMessages(fakeWindow, fakeDocument, "container-id");
const dateElements = fakeRemoteL10n.createElement.args.filter(
- ([doc, el, args]) =>
+ ([, el, args]) =>
el === "p" && args.classList === "whatsNew-message-date"
);
assert.lengthOf(dateElements, uniqueDates.length);
diff --git a/browser/components/asrouter/tests/unit/asrouter-utils.test.js b/browser/components/asrouter/tests/unit/asrouter-utils.test.js
index 553c9608ed..81252b4d50 100644
--- a/browser/components/asrouter/tests/unit/asrouter-utils.test.js
+++ b/browser/components/asrouter/tests/unit/asrouter-utils.test.js
@@ -1,30 +1,22 @@
-import { ASRouterUtils } from "content-src/asrouter-utils";
-import { GlobalOverrider } from "test/unit/utils";
+import { ASRouterUtils } from "../../content-src/asrouter-utils.mjs";
describe("ASRouterUtils", () => {
- let globals = null;
- let overrider = null;
let sandbox = null;
beforeEach(() => {
sandbox = sinon.createSandbox();
- globals = {
- ASRouterMessage: sandbox.stub().resolves({}),
- };
- overrider = new GlobalOverrider();
- overrider.set(globals);
+ globalThis.ASRouterMessage = sandbox.stub().resolves({});
});
afterEach(() => {
sandbox.restore();
- overrider.restore();
});
describe("sendMessage", () => {
it("default", () => {
ASRouterUtils.sendMessage({ foo: "bar" });
- assert.calledOnce(globals.ASRouterMessage);
- assert.calledWith(globals.ASRouterMessage, { foo: "bar" });
+ assert.calledOnce(globalThis.ASRouterMessage);
+ assert.calledWith(globalThis.ASRouterMessage, { foo: "bar" });
});
it("throws if ASRouterMessage is not defined", () => {
- overrider.set("ASRouterMessage", undefined);
+ globalThis.ASRouterMessage = null;
assert.throws(() => ASRouterUtils.sendMessage({ foo: "bar" }));
});
it("can accept the legacy NEWTAB_MESSAGE_REQUEST message without throwing", async () => {
@@ -41,7 +33,7 @@ describe("ASRouterUtils", () => {
it("default", () => {
ASRouterUtils.blockById(1, { foo: "bar" });
assert.calledWith(
- globals.ASRouterMessage,
+ globalThis.ASRouterMessage,
sinon.match({ data: { foo: "bar", id: 1 } })
);
});
@@ -50,7 +42,7 @@ describe("ASRouterUtils", () => {
it("default", () => {
ASRouterUtils.modifyMessageJson({ foo: "bar" });
assert.calledWith(
- globals.ASRouterMessage,
+ globalThis.ASRouterMessage,
sinon.match({ data: { content: { foo: "bar" } } })
);
});
@@ -59,7 +51,7 @@ describe("ASRouterUtils", () => {
it("default", () => {
ASRouterUtils.executeAction({ foo: "bar" });
assert.calledWith(
- globals.ASRouterMessage,
+ globalThis.ASRouterMessage,
sinon.match({ data: { foo: "bar" } })
);
});
@@ -68,7 +60,7 @@ describe("ASRouterUtils", () => {
it("default", () => {
ASRouterUtils.unblockById(2);
assert.calledWith(
- globals.ASRouterMessage,
+ globalThis.ASRouterMessage,
sinon.match({ data: { id: 2 } })
);
});
@@ -77,7 +69,7 @@ describe("ASRouterUtils", () => {
it("default", () => {
ASRouterUtils.blockBundle(2);
assert.calledWith(
- globals.ASRouterMessage,
+ globalThis.ASRouterMessage,
sinon.match({ data: { bundle: 2 } })
);
});
@@ -86,7 +78,7 @@ describe("ASRouterUtils", () => {
it("default", () => {
ASRouterUtils.unblockBundle(2);
assert.calledWith(
- globals.ASRouterMessage,
+ globalThis.ASRouterMessage,
sinon.match({ data: { bundle: 2 } })
);
});
@@ -95,7 +87,7 @@ describe("ASRouterUtils", () => {
it("default", () => {
ASRouterUtils.overrideMessage(12);
assert.calledWith(
- globals.ASRouterMessage,
+ globalThis.ASRouterMessage,
sinon.match({ data: { id: 12 } })
);
});
@@ -104,7 +96,7 @@ describe("ASRouterUtils", () => {
it("default", () => {
ASRouterUtils.editState("foo", "bar");
assert.calledWith(
- globals.ASRouterMessage,
+ globalThis.ASRouterMessage,
sinon.match({ data: { foo: "bar" } })
);
});
@@ -112,7 +104,7 @@ describe("ASRouterUtils", () => {
describe("sendTelemetry", () => {
it("default", () => {
ASRouterUtils.sendTelemetry({ foo: "bar" });
- assert.calledOnce(globals.ASRouterMessage);
+ assert.calledOnce(globalThis.ASRouterMessage);
});
});
});
diff --git a/browser/components/asrouter/tests/unit/unit-entry.js b/browser/components/asrouter/tests/unit/unit-entry.js
index b8b799e051..f2046a81cb 100644
--- a/browser/components/asrouter/tests/unit/unit-entry.js
+++ b/browser/components/asrouter/tests/unit/unit-entry.js
@@ -105,8 +105,8 @@ const TEST_GLOBAL = {
JSWindowActorParent,
JSWindowActorChild,
AboutReaderParent: {
- addMessageListener: (messageName, listener) => {},
- removeMessageListener: (messageName, listener) => {},
+ addMessageListener: (_messageName, _listener) => {},
+ removeMessageListener: (_messageName, _listener) => {},
},
AboutWelcomeTelemetry: class {
submitGleanPingForPing() {}
@@ -289,8 +289,8 @@ const TEST_GLOBAL = {
},
dump() {},
EveryWindow: {
- registerCallback: (id, init, uninit) => {},
- unregisterCallback: id => {},
+ registerCallback: (_id, _init, _uninit) => {},
+ unregisterCallback: _id => {},
},
setTimeout: window.setTimeout.bind(window),
clearTimeout: window.clearTimeout.bind(window),
@@ -410,7 +410,7 @@ const TEST_GLOBAL = {
},
urlFormatter: { formatURL: str => str, formatURLPref: str => str },
mm: {
- addMessageListener: (msg, cb) => this.receiveMessage(),
+ addMessageListener: (_msg, _cb) => this.receiveMessage(),
removeMessageListener() {},
},
obs: {
@@ -420,7 +420,7 @@ const TEST_GLOBAL = {
},
telemetry: {
setEventRecordingEnabled: () => {},
- recordEvent: eventDetails => {},
+ recordEvent: _eventDetails => {},
scalarSet: () => {},
keyedScalarAdd: () => {},
},
@@ -578,7 +578,7 @@ const TEST_GLOBAL = {
finish: () => {},
},
Sampling: {
- ratioSample(seed, ratios) {
+ ratioSample(_seed, _ratios) {
return Promise.resolve(0);
},
},
diff --git a/browser/components/asrouter/webpack.asrouter-admin.config.js b/browser/components/asrouter/webpack.asrouter-admin.config.js
index a8eb54d43d..d051b42a62 100644
--- a/browser/components/asrouter/webpack.asrouter-admin.config.js
+++ b/browser/components/asrouter/webpack.asrouter-admin.config.js
@@ -25,7 +25,7 @@ module.exports = Object.assign({}, config(), {
plugins: [new webpack.BannerPlugin(banner)],
// This resolve config allows us to import with paths relative to the root directory
resolve: {
- extensions: [".js", ".jsx"],
+ extensions: [".js", ".jsx", ".mjs"],
alias: {
newtab: absolute("../newtab"),
common: absolute("../newtab/common"),
diff --git a/browser/components/backup/.eslintrc.js b/browser/components/backup/.eslintrc.js
new file mode 100644
index 0000000000..9aafb4a214
--- /dev/null
+++ b/browser/components/backup/.eslintrc.js
@@ -0,0 +1,9 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+"use strict";
+
+module.exports = {
+ extends: ["plugin:mozilla/require-jsdoc"],
+};
diff --git a/browser/components/backup/BackupResources.sys.mjs b/browser/components/backup/BackupResources.sys.mjs
new file mode 100644
index 0000000000..276fabefdf
--- /dev/null
+++ b/browser/components/backup/BackupResources.sys.mjs
@@ -0,0 +1,15 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+// Remove this import after BackupResource is referenced elsewhere.
+// eslint-disable-next-line no-unused-vars
+import { BackupResource } from "resource:///modules/backup/BackupResource.sys.mjs";
+
+/**
+ * Classes exported here are registered as a resource that can be
+ * backed up and restored in the BackupService.
+ *
+ * They must extend the BackupResource base class.
+ */
+export {};
diff --git a/browser/components/backup/BackupService.sys.mjs b/browser/components/backup/BackupService.sys.mjs
new file mode 100644
index 0000000000..853f4768ce
--- /dev/null
+++ b/browser/components/backup/BackupService.sys.mjs
@@ -0,0 +1,103 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import * as BackupResources from "resource:///modules/backup/BackupResources.sys.mjs";
+
+const lazy = {};
+
+ChromeUtils.defineLazyGetter(lazy, "logConsole", function () {
+ return console.createInstance({
+ prefix: "BackupService",
+ maxLogLevel: Services.prefs.getBoolPref("browser.backup.log", false)
+ ? "Debug"
+ : "Warn",
+ });
+});
+
+/**
+ * The BackupService class orchestrates the scheduling and creation of profile
+ * backups. It also does most of the heavy lifting for the restoration of a
+ * profile backup.
+ */
+export class BackupService {
+ /**
+ * The BackupService singleton instance.
+ *
+ * @static
+ * @type {BackupService|null}
+ */
+ static #instance = null;
+
+ /**
+ * Map of instantiated BackupResource classes.
+ *
+ * @type {Map<string, BackupResource>}
+ */
+ #resources = new Map();
+
+ /**
+ * Returns a reference to a BackupService singleton. If this is the first time
+ * that this getter is accessed, this causes the BackupService singleton to be
+ * be instantiated.
+ *
+ * @static
+ * @type {BackupService}
+ */
+ static init() {
+ if (this.#instance) {
+ return this.#instance;
+ }
+ this.#instance = new BackupService(BackupResources);
+ this.#instance.takeMeasurements();
+
+ return this.#instance;
+ }
+
+ /**
+ * Create a BackupService instance.
+ *
+ * @param {object} [backupResources=BackupResources] - Object containing BackupResource classes to associate with this service.
+ */
+ constructor(backupResources = BackupResources) {
+ lazy.logConsole.debug("Instantiated");
+
+ for (const resourceName in backupResources) {
+ let resource = BackupResources[resourceName];
+ this.#resources.set(resource.key, resource);
+ }
+ }
+
+ /**
+ * Take measurements of the current profile state for Telemetry.
+ *
+ * @returns {Promise<undefined>}
+ */
+ async takeMeasurements() {
+ lazy.logConsole.debug("Taking Telemetry measurements");
+
+ // Note: We're talking about kilobytes here, not kibibytes. That means
+ // 1000 bytes, and not 1024 bytes.
+ const BYTES_IN_KB = 1000;
+ const BYTES_IN_MB = 1000000;
+
+ // We'll start by measuring the available disk space on the storage
+ // device that the profile directory is on.
+ let profileDir = await IOUtils.getFile(PathUtils.profileDir);
+
+ let profDDiskSpaceBytes = profileDir.diskSpaceAvailable;
+
+ // Make the measurement fuzzier by rounding to the nearest 10MB.
+ let profDDiskSpaceMB =
+ Math.round(profDDiskSpaceBytes / BYTES_IN_MB / 100) * 100;
+
+ // And then record the value in kilobytes, since that's what everything
+ // else is going to be measured in.
+ Glean.browserBackup.profDDiskSpace.set(profDDiskSpaceMB * BYTES_IN_KB);
+
+ // Measure the size of each file we are going to backup.
+ for (let resourceClass of this.#resources.values()) {
+ await new resourceClass().measure(PathUtils.profileDir);
+ }
+ }
+}
diff --git a/browser/components/backup/docs/backup-service.rst b/browser/components/backup/docs/backup-service.rst
new file mode 100644
index 0000000000..fe363b46b4
--- /dev/null
+++ b/browser/components/backup/docs/backup-service.rst
@@ -0,0 +1,8 @@
+========================
+Backup Service Reference
+========================
+
+.. js::autoattribute:: BackupService#instance
+.. js:autoclass:: BackupService
+ :members:
+ :private-members:
diff --git a/browser/components/backup/docs/index.rst b/browser/components/backup/docs/index.rst
new file mode 100644
index 0000000000..1e201f8f1c
--- /dev/null
+++ b/browser/components/backup/docs/index.rst
@@ -0,0 +1,13 @@
+.. _components/backup:
+
+================
+Backup Component
+================
+
+The Backup Component is responsible for creating backups of user profile data
+into a single file that can be easily restored from.
+
+.. toctree::
+ :maxdepth: 3
+
+ backup-service
diff --git a/browser/components/backup/metrics.yaml b/browser/components/backup/metrics.yaml
new file mode 100644
index 0000000000..6d6a16a178
--- /dev/null
+++ b/browser/components/backup/metrics.yaml
@@ -0,0 +1,30 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+# Adding a new metric? We have docs for that!
+# https://firefox-source-docs.mozilla.org/toolkit/components/glean/user/new_definitions_file.html
+
+---
+$schema: moz://mozilla.org/schemas/glean/metrics/2-0-0
+$tags:
+ - 'Firefox :: Profiles'
+
+browser.backup:
+ prof_d_disk_space:
+ type: quantity
+ unit: kilobyte
+ description: >
+ The total disk space available on the storage device that the profile
+ directory is stored on. To reduce fingerprintability, we round to the
+ nearest 10 megabytes and return the result in kilobytes.
+ bugs:
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1884407
+ data_reviews:
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1884407
+ data_sensitivity:
+ - technical
+ notification_emails:
+ - mconley@mozilla.com
+ expires: never
+ telemetry_mirror: BROWSER_BACKUP_PROF_D_DISK_SPACE
diff --git a/browser/components/backup/moz.build b/browser/components/backup/moz.build
new file mode 100644
index 0000000000..0ea7d66b7d
--- /dev/null
+++ b/browser/components/backup/moz.build
@@ -0,0 +1,18 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+with Files("**"):
+ BUG_COMPONENT = ("Firefox", "Profiles")
+
+SPHINX_TREES["docs"] = "docs"
+
+XPCSHELL_TESTS_MANIFESTS += ["tests/xpcshell/xpcshell.toml"]
+
+EXTRA_JS_MODULES.backup += [
+ "BackupResources.sys.mjs",
+ "BackupService.sys.mjs",
+ "resources/BackupResource.sys.mjs",
+]
diff --git a/browser/components/backup/resources/BackupResource.sys.mjs b/browser/components/backup/resources/BackupResource.sys.mjs
new file mode 100644
index 0000000000..bde3f0669c
--- /dev/null
+++ b/browser/components/backup/resources/BackupResource.sys.mjs
@@ -0,0 +1,109 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+// Convert from bytes to kilobytes (not kibibytes).
+const BYTES_IN_KB = 1000;
+
+/**
+ * An abstract class representing a set of data within a user profile
+ * that can be persisted to a separate backup archive file, and restored
+ * to a new user profile from that backup archive file.
+ */
+export class BackupResource {
+ /**
+ * This must be overridden to return a simple string identifier for the
+ * resource, for example "places" or "extensions". This key is used as
+ * a unique identifier for the resource.
+ *
+ * @type {string}
+ */
+ static get key() {
+ throw new Error("BackupResource::key needs to be overridden.");
+ }
+
+ /**
+ * Get the size of a file.
+ *
+ * @param {string} filePath - path to a file.
+ * @returns {Promise<number|null>} - the size of the file in kilobytes, or null if the
+ * file does not exist, the path is a directory or the size is unknown.
+ */
+ static async getFileSize(filePath) {
+ if (!(await IOUtils.exists(filePath))) {
+ return null;
+ }
+
+ let { size } = await IOUtils.stat(filePath);
+
+ if (size < 0) {
+ return null;
+ }
+
+ let sizeInKb = Math.ceil(size / BYTES_IN_KB);
+ // Make the measurement fuzzier by rounding to the nearest 10kb.
+ let nearestTenthKb = Math.round(sizeInKb / 10) * 10;
+
+ return Math.max(nearestTenthKb, 1);
+ }
+
+ /**
+ * Get the total size of a directory.
+ *
+ * @param {string} directoryPath - path to a directory.
+ * @returns {Promise<number|null>} - the size of all descendants of the directory in kilobytes, or null if the
+ * directory does not exist, the path is not a directory or the size is unknown.
+ */
+ static async getDirectorySize(directoryPath) {
+ if (!(await IOUtils.exists(directoryPath))) {
+ return null;
+ }
+
+ let { type } = await IOUtils.stat(directoryPath);
+
+ if (type != "directory") {
+ return null;
+ }
+
+ let children = await IOUtils.getChildren(directoryPath, {
+ ignoreAbsent: true,
+ });
+
+ let size = 0;
+ for (const childFilePath of children) {
+ let { size: childSize, type: childType } = await IOUtils.stat(
+ childFilePath
+ );
+
+ if (childSize >= 0) {
+ let sizeInKb = Math.ceil(childSize / BYTES_IN_KB);
+ // Make the measurement fuzzier by rounding to the nearest 10kb.
+ let nearestTenthKb = Math.round(sizeInKb / 10) * 10;
+ size += Math.max(nearestTenthKb, 1);
+ }
+
+ if (childType == "directory") {
+ let childDirectorySize = await this.getDirectorySize(childFilePath);
+ if (Number.isInteger(childDirectorySize)) {
+ size += childDirectorySize;
+ }
+ }
+ }
+
+ return size;
+ }
+
+ constructor() {}
+
+ /**
+ * This must be overridden to record telemetry on the size of any
+ * data associated with this BackupResource.
+ *
+ * @param {string} profilePath - path to a profile directory.
+ * @returns {Promise<undefined>}
+ */
+ // eslint-disable-next-line no-unused-vars
+ async measure(profilePath) {
+ throw new Error("BackupResource::measure needs to be overridden.");
+ }
+}
diff --git a/browser/components/backup/tests/xpcshell/data/test_xulstore.json b/browser/components/backup/tests/xpcshell/data/test_xulstore.json
new file mode 100644
index 0000000000..0d0890ab16
--- /dev/null
+++ b/browser/components/backup/tests/xpcshell/data/test_xulstore.json
@@ -0,0 +1,18 @@
+{
+ "chrome://browser/content/browser.xhtml": {
+ "PersonalToolbar": { "collapsed": "false" },
+ "main-window": {
+ "screenX": "852",
+ "screenY": "125",
+ "width": "1484",
+ "height": "1256",
+ "sizemode": "normal"
+ },
+ "sidebar-box": {
+ "sidebarcommand": "viewBookmarksSidebar",
+ "width": "323",
+ "style": "width: 323px;"
+ },
+ "sidebar-title": { "value": "Bookmarks" }
+ }
+}
diff --git a/browser/components/backup/tests/xpcshell/test_BrowserResource.js b/browser/components/backup/tests/xpcshell/test_BrowserResource.js
new file mode 100644
index 0000000000..23c8e077a5
--- /dev/null
+++ b/browser/components/backup/tests/xpcshell/test_BrowserResource.js
@@ -0,0 +1,63 @@
+/* Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { BackupResource } = ChromeUtils.importESModule(
+ "resource:///modules/backup/BackupResource.sys.mjs"
+);
+
+const EXPECTED_KILOBYTES_FOR_XULSTORE = 1;
+
+add_setup(() => {
+ do_get_profile();
+});
+
+/**
+ * Tests that BackupService.getFileSize will get the size of a file in kilobytes.
+ */
+add_task(async function test_getFileSize() {
+ let file = do_get_file("data/test_xulstore.json");
+
+ let testFilePath = PathUtils.join(PathUtils.profileDir, "test_xulstore.json");
+
+ await IOUtils.copy(file.path, PathUtils.profileDir);
+
+ let size = await BackupResource.getFileSize(testFilePath);
+
+ Assert.equal(
+ size,
+ EXPECTED_KILOBYTES_FOR_XULSTORE,
+ "Size of the test_xulstore.json is rounded up to the nearest kilobyte."
+ );
+
+ await IOUtils.remove(testFilePath);
+});
+
+/**
+ * Tests that BackupService.getFileSize will get the total size of all the files in a directory and it's children in kilobytes.
+ */
+add_task(async function test_getDirectorySize() {
+ let file = do_get_file("data/test_xulstore.json");
+
+ // Create a test directory with the test json file in it.
+ let testDir = PathUtils.join(PathUtils.profileDir, "testDir");
+ await IOUtils.makeDirectory(testDir);
+ await IOUtils.copy(file.path, testDir);
+
+ // Create another test directory inside of that one.
+ let nestedTestDir = PathUtils.join(testDir, "testDir");
+ await IOUtils.makeDirectory(nestedTestDir);
+ await IOUtils.copy(file.path, nestedTestDir);
+
+ let size = await BackupResource.getDirectorySize(testDir);
+
+ Assert.equal(
+ size,
+ EXPECTED_KILOBYTES_FOR_XULSTORE * 2,
+ `Total size of the directory is rounded up to the nearest kilobyte
+ and is equal to twice the size of the test_xulstore.json file`
+ );
+
+ await IOUtils.remove(testDir, { recursive: true });
+});
diff --git a/browser/components/backup/tests/xpcshell/test_measurements.js b/browser/components/backup/tests/xpcshell/test_measurements.js
new file mode 100644
index 0000000000..e5726126b2
--- /dev/null
+++ b/browser/components/backup/tests/xpcshell/test_measurements.js
@@ -0,0 +1,40 @@
+/* Any copyright is dedicated to the Public Domain.
+http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { BackupService } = ChromeUtils.importESModule(
+ "resource:///modules/backup/BackupService.sys.mjs"
+);
+
+const { TelemetryTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/TelemetryTestUtils.sys.mjs"
+);
+
+add_setup(() => {
+ do_get_profile();
+ // FOG needs to be initialized in order for data to flow.
+ Services.fog.initializeFOG();
+ Services.telemetry.clearScalars();
+});
+
+/**
+ * Tests that we can measure the disk space available in the profile directory.
+ */
+add_task(async function test_profDDiskSpace() {
+ let bs = new BackupService();
+ await bs.takeMeasurements();
+ let measurement = Glean.browserBackup.profDDiskSpace.testGetValue();
+ TelemetryTestUtils.assertScalar(
+ TelemetryTestUtils.getProcessScalars("parent", false, true),
+ "browser.backup.prof_d_disk_space",
+ measurement
+ );
+
+ Assert.greater(
+ measurement,
+ 0,
+ "Should have collected a measurement for the profile directory storage " +
+ "device"
+ );
+});
diff --git a/browser/components/backup/tests/xpcshell/xpcshell.toml b/browser/components/backup/tests/xpcshell/xpcshell.toml
new file mode 100644
index 0000000000..fb6dcd6846
--- /dev/null
+++ b/browser/components/backup/tests/xpcshell/xpcshell.toml
@@ -0,0 +1,8 @@
+[DEFAULT]
+firefox-appdir = "browser"
+skip-if = ["os == 'android'"]
+
+["test_BrowserResource.js"]
+support-files = ["data/test_xulstore.json"]
+
+["test_measurements.js"]
diff --git a/browser/components/contentanalysis/content/ContentAnalysis.sys.mjs b/browser/components/contentanalysis/content/ContentAnalysis.sys.mjs
index c8a8545cf1..34f132a539 100644
--- a/browser/components/contentanalysis/content/ContentAnalysis.sys.mjs
+++ b/browser/components/contentanalysis/content/ContentAnalysis.sys.mjs
@@ -35,6 +35,13 @@ XPCOMUtils.defineLazyPreferenceGetter(
false
);
+XPCOMUtils.defineLazyPreferenceGetter(
+ lazy,
+ "agentName",
+ "browser.contentanalysis.agent_name",
+ "A DLP agent"
+);
+
/**
* A class that groups browsing contexts by their top-level one.
* This is necessary because if there may be a subframe that
@@ -149,6 +156,11 @@ class MapByTopBrowsingContext {
* @returns {MapByTopBrowsingContext} this
*/
setEntry(aBrowsingContext, aValue) {
+ if (!aValue.request) {
+ console.error(
+ "MapByTopBrowsingContext.setEntry() called with a value without a request!"
+ );
+ }
let topEntry = this.#map.get(aBrowsingContext.top);
if (!topEntry) {
topEntry = new Map();
@@ -157,6 +169,16 @@ class MapByTopBrowsingContext {
topEntry.set(aBrowsingContext, aValue);
return this;
}
+
+ getAllRequests() {
+ let requests = [];
+ this.#map.forEach(topEntry => {
+ for (let entry of topEntry.values()) {
+ requests.push(entry.request);
+ }
+ });
+ return requests;
+ }
}
export const ContentAnalysis = {
@@ -189,7 +211,7 @@ export const ContentAnalysis = {
ChromeUtils.defineLazyGetter(this, "l10n", function () {
return new Localization(
- ["toolkit/contentanalysis/contentanalysis.ftl"],
+ ["branding/brand.ftl", "toolkit/contentanalysis/contentanalysis.ftl"],
true
);
});
@@ -210,11 +232,54 @@ export const ContentAnalysis = {
Services.obs.addObserver(this, "dlp-request-made");
Services.obs.addObserver(this, "dlp-response");
Services.obs.addObserver(this, "quit-application");
+ Services.obs.addObserver(this, "quit-application-requested");
},
// nsIObserver
async observe(aSubj, aTopic, aData) {
switch (aTopic) {
+ case "quit-application-requested": {
+ let pendingRequests =
+ this.dlpBusyViewsByTopBrowsingContext.getAllRequests();
+ if (pendingRequests.length) {
+ let messageBody = this.l10n.formatValueSync(
+ "contentanalysis-inprogress-quit-message"
+ );
+ messageBody = messageBody + "\n\n";
+ for (const pendingRequest of pendingRequests) {
+ let name = this._getResourceNameFromNameOrOperationType(
+ this._getResourceNameOrOperationTypeFromRequest(
+ pendingRequest,
+ true
+ )
+ );
+ messageBody = messageBody + name + "\n";
+ }
+ let buttonSelected = Services.prompt.confirmEx(
+ null,
+ this.l10n.formatValueSync("contentanalysis-inprogress-quit-title"),
+ messageBody,
+ Ci.nsIPromptService.BUTTON_POS_0 *
+ Ci.nsIPromptService.BUTTON_TITLE_IS_STRING +
+ Ci.nsIPromptService.BUTTON_POS_1 *
+ Ci.nsIPromptService.BUTTON_TITLE_CANCEL +
+ Ci.nsIPromptService.BUTTON_POS_0_DEFAULT,
+ this.l10n.formatValueSync(
+ "contentanalysis-inprogress-quit-yesbutton"
+ ),
+ null,
+ null,
+ null,
+ { value: 0 }
+ );
+ if (buttonSelected === 0) {
+ lazy.gContentAnalysis.cancelAllRequests();
+ } else {
+ aSubj.data = true;
+ }
+ }
+ break;
+ }
case "quit-application": {
this.uninitialize();
break;
@@ -251,11 +316,11 @@ export const ContentAnalysis = {
"Got dlp-request-made message for a browsingContext that already has a busy view!"
);
}
- let resourceNameOrL10NId =
- this._getResourceNameOrL10NIdFromRequest(request);
+ let resourceNameOrOperationType =
+ this._getResourceNameOrOperationTypeFromRequest(request, false);
this.requestTokenToRequestInfo.set(request.requestToken, {
browsingContext,
- resourceNameOrL10NId,
+ resourceNameOrOperationType,
});
this.dlpBusyViewsByTopBrowsingContext.setEntry(browsingContext, {
timer: lazy.setTimeout(() => {
@@ -263,11 +328,13 @@ export const ContentAnalysis = {
notification: this._showSlowCAMessage(
operation,
request,
- resourceNameOrL10NId,
+ resourceNameOrOperationType,
browsingContext
),
+ request,
});
}, slowTimeoutMs),
+ request,
});
}
break;
@@ -279,10 +346,9 @@ export const ContentAnalysis = {
throw new Error("Got dlp-response message but no request was passed");
}
- let windowAndResourceNameOrL10NId = this.requestTokenToRequestInfo.get(
- request.requestToken
- );
- if (!windowAndResourceNameOrL10NId) {
+ let windowAndResourceNameOrOperationType =
+ this.requestTokenToRequestInfo.get(request.requestToken);
+ if (!windowAndResourceNameOrOperationType) {
// Perhaps this was cancelled just before the response came in from the
// DLP agent.
console.warn(
@@ -292,24 +358,24 @@ export const ContentAnalysis = {
}
this.requestTokenToRequestInfo.delete(request.requestToken);
let dlpBusyView = this.dlpBusyViewsByTopBrowsingContext.getEntry(
- windowAndResourceNameOrL10NId.browsingContext
+ windowAndResourceNameOrOperationType.browsingContext
);
if (dlpBusyView) {
this._disconnectFromView(dlpBusyView);
this.dlpBusyViewsByTopBrowsingContext.deleteEntry(
- windowAndResourceNameOrL10NId.browsingContext
+ windowAndResourceNameOrOperationType.browsingContext
);
}
const responseResult =
request?.action ?? Ci.nsIContentAnalysisResponse.eUnspecified;
await this._showCAResult(
- windowAndResourceNameOrL10NId.resourceNameOrL10NId,
- windowAndResourceNameOrL10NId.browsingContext,
+ windowAndResourceNameOrOperationType.resourceNameOrOperationType,
+ windowAndResourceNameOrOperationType.browsingContext,
request.requestToken,
responseResult
);
this._showAnotherPendingDialog(
- windowAndResourceNameOrL10NId.browsingContext
+ windowAndResourceNameOrOperationType.browsingContext
);
break;
}
@@ -327,8 +393,9 @@ export const ContentAnalysis = {
notification: this._showSlowCABlockingMessage(
otherBrowsingContext,
args.requestToken,
- args.resourceNameOrL10NId
+ args.resourceNameOrOperationType
),
+ request: args.request,
});
}
},
@@ -400,39 +467,60 @@ export const ContentAnalysis = {
);
},
- // This function also transforms the nameOrL10NId so we won't have to
+ // This function also transforms the nameOrOperationType so we won't have to
// look it up again.
- _getResourceNameFromNameOrL10NId(nameOrL10NId) {
- if (nameOrL10NId.name) {
- return nameOrL10NId.name;
+ _getResourceNameFromNameOrOperationType(nameOrOperationType) {
+ if (!nameOrOperationType.name) {
+ let l10nId = undefined;
+ switch (nameOrOperationType.operationType) {
+ case Ci.nsIContentAnalysisRequest.eClipboard:
+ l10nId = "contentanalysis-operationtype-clipboard";
+ break;
+ case Ci.nsIContentAnalysisRequest.eDroppedText:
+ l10nId = "contentanalysis-operationtype-dropped-text";
+ break;
+ }
+ if (!l10nId) {
+ console.error(
+ "Unknown operationTypeForDisplay: " +
+ nameOrOperationType.operationType
+ );
+ return "";
+ }
+ nameOrOperationType.name = this.l10n.formatValueSync(l10nId);
}
- nameOrL10NId.name = this.l10n.formatValueSync(nameOrL10NId.l10nId);
- return nameOrL10NId.name;
+ return nameOrOperationType.name;
},
- _getResourceNameOrL10NIdFromRequest(aRequest) {
+ /**
+ * Gets a name or operation type from a request
+ *
+ * @param {object} aRequest The nsIContentAnalysisRequest
+ * @param {boolean} aStandalone Whether the message is going to be used on its own
+ * line. This is used to add more context to the message
+ * if a file is being uploaded rather than just the name
+ * of the file.
+ * @returns {object} An object with either a name property that can be used as-is, or
+ * an operationType property.
+ */
+ _getResourceNameOrOperationTypeFromRequest(aRequest, aStandalone) {
if (
aRequest.operationTypeForDisplay ==
Ci.nsIContentAnalysisRequest.eCustomDisplayString
) {
+ if (aStandalone) {
+ return {
+ name: this.l10n.formatValueSync(
+ "contentanalysis-customdisplaystring-description",
+ {
+ filename: aRequest.operationDisplayString,
+ }
+ ),
+ };
+ }
return { name: aRequest.operationDisplayString };
}
- let l10nId;
- switch (aRequest.operationTypeForDisplay) {
- case Ci.nsIContentAnalysisRequest.eClipboard:
- l10nId = "contentanalysis-operationtype-clipboard";
- break;
- case Ci.nsIContentAnalysisRequest.eDroppedText:
- l10nId = "contentanalysis-operationtype-dropped-text";
- break;
- }
- if (!l10nId) {
- console.error(
- "Unknown operationTypeForDisplay: " + aRequest.operationTypeForDisplay
- );
- return { name: "" };
- }
- return { l10nId };
+ return { operationType: aRequest.operationTypeForDisplay };
},
/**
@@ -442,14 +530,12 @@ export const ContentAnalysis = {
_showSlowCAMessage(
aOperation,
aRequest,
- aResourceNameOrL10NId,
+ aResourceNameOrOperationType,
aBrowsingContext
) {
if (!this._shouldShowBlockingNotification(aOperation)) {
return this._showMessage(
- this.l10n.formatValueSync("contentanalysis-slow-agent-notification", {
- content: this._getResourceNameFromNameOrL10NId(aResourceNameOrL10NId),
- }),
+ this._getSlowDialogMessage(aResourceNameOrOperationType),
aBrowsingContext
);
}
@@ -471,7 +557,7 @@ export const ContentAnalysis = {
return {
requestToken: aRequest.requestToken,
dialogBrowsingContextArgs: {
- resourceNameOrL10NId: aResourceNameOrL10NId,
+ resourceNameOrOperationType: aResourceNameOrOperationType,
},
};
}
@@ -479,24 +565,54 @@ export const ContentAnalysis = {
return this._showSlowCABlockingMessage(
aBrowsingContext,
aRequest.requestToken,
- aResourceNameOrL10NId
+ aResourceNameOrOperationType
);
},
+ _getSlowDialogMessage(aResourceNameOrOperationType) {
+ if (aResourceNameOrOperationType.name) {
+ return this.l10n.formatValueSync(
+ "contentanalysis-slow-agent-dialog-body-file",
+ {
+ agent: lazy.agentName,
+ filename: aResourceNameOrOperationType.name,
+ }
+ );
+ }
+ let l10nId = undefined;
+ switch (aResourceNameOrOperationType.operationType) {
+ case Ci.nsIContentAnalysisRequest.eClipboard:
+ l10nId = "contentanalysis-slow-agent-dialog-body-clipboard";
+ break;
+ case Ci.nsIContentAnalysisRequest.eDroppedText:
+ l10nId = "contentanalysis-slow-agent-dialog-body-dropped-text";
+ break;
+ }
+ if (!l10nId) {
+ console.error(
+ "Unknown operationTypeForDisplay: " + aResourceNameOrOperationType
+ );
+ return "";
+ }
+ return this.l10n.formatValueSync(l10nId, {
+ agent: lazy.agentName,
+ });
+ },
+
_showSlowCABlockingMessage(
aBrowsingContext,
aRequestToken,
- aResourceNameOrL10NId
+ aResourceNameOrOperationType
) {
+ let bodyMessage = this._getSlowDialogMessage(aResourceNameOrOperationType);
let promise = Services.prompt.asyncConfirmEx(
aBrowsingContext,
Ci.nsIPromptService.MODAL_TYPE_TAB,
- this.l10n.formatValueSync("contentanalysis-slow-agent-dialog-title"),
- this.l10n.formatValueSync("contentanalysis-slow-agent-dialog-body", {
- content: this._getResourceNameFromNameOrL10NId(aResourceNameOrL10NId),
- }),
+ this.l10n.formatValueSync("contentanalysis-slow-agent-dialog-header"),
+ bodyMessage,
Ci.nsIPromptService.BUTTON_POS_0 *
Ci.nsIPromptService.BUTTON_TITLE_CANCEL +
+ Ci.nsIPromptService.BUTTON_POS_1_DEFAULT +
Ci.nsIPromptService.SHOW_SPINNER,
null,
null,
@@ -536,7 +652,7 @@ export const ContentAnalysis = {
* @returns {object} a notification object (if shown)
*/
async _showCAResult(
- aResourceNameOrL10NId,
+ aResourceNameOrOperationType,
aBrowsingContext,
aRequestToken,
aCAResult
@@ -552,8 +668,8 @@ export const ContentAnalysis = {
message = await this.l10n.formatValue(
"contentanalysis-genericresponse-message",
{
- content: this._getResourceNameFromNameOrL10NId(
- aResourceNameOrL10NId
+ content: this._getResourceNameFromNameOrOperationType(
+ aResourceNameOrOperationType
),
response: "REPORT_ONLY",
}
@@ -566,8 +682,8 @@ export const ContentAnalysis = {
Ci.nsIPromptService.MODAL_TYPE_TAB,
await this.l10n.formatValue("contentanalysis-warndialogtitle"),
await this.l10n.formatValue("contentanalysis-warndialogtext", {
- content: this._getResourceNameFromNameOrL10NId(
- aResourceNameOrL10NId
+ content: this._getResourceNameFromNameOrOperationType(
+ aResourceNameOrOperationType
),
}),
Ci.nsIPromptService.BUTTON_POS_0 *
@@ -590,13 +706,17 @@ export const ContentAnalysis = {
return null;
case Ci.nsIContentAnalysisResponse.eBlock:
message = await this.l10n.formatValue("contentanalysis-block-message", {
- content: this._getResourceNameFromNameOrL10NId(aResourceNameOrL10NId),
+ content: this._getResourceNameFromNameOrOperationType(
+ aResourceNameOrOperationType
+ ),
});
timeoutMs = this._RESULT_NOTIFICATION_TIMEOUT_MS;
break;
case Ci.nsIContentAnalysisResponse.eUnspecified:
message = await this.l10n.formatValue("contentanalysis-error-message", {
- content: this._getResourceNameFromNameOrL10NId(aResourceNameOrL10NId),
+ content: this._getResourceNameFromNameOrOperationType(
+ aResourceNameOrOperationType
+ ),
});
timeoutMs = this._RESULT_NOTIFICATION_TIMEOUT_MS;
break;
diff --git a/browser/components/contextualidentity/test/browser/browser_saveLink.js b/browser/components/contextualidentity/test/browser/browser_saveLink.js
index 65f60f7eef..175be43bf2 100644
--- a/browser/components/contextualidentity/test/browser/browser_saveLink.js
+++ b/browser/components/contextualidentity/test/browser/browser_saveLink.js
@@ -6,7 +6,7 @@ const URI =
"/browser/browser/components/contextualidentity/test/browser/saveLink.sjs";
let MockFilePicker = SpecialPowers.MockFilePicker;
-MockFilePicker.init(window);
+MockFilePicker.init(window.browsingContext);
add_setup(async function () {
info("Setting the prefs.");
diff --git a/browser/components/controlcenter/content/protectionsPanel.inc.xhtml b/browser/components/controlcenter/content/protectionsPanel.inc.xhtml
index 2992713918..707105f520 100644
--- a/browser/components/controlcenter/content/protectionsPanel.inc.xhtml
+++ b/browser/components/controlcenter/content/protectionsPanel.inc.xhtml
@@ -49,18 +49,6 @@
<html:moz-toggle id="protections-popup-tp-switch" data-l10n-attrs="label, description"></html:moz-toggle>
</vbox>
</hbox>
- <hbox id="protections-popup-tp-switch-section-footer">
- <toolbarbutton id="protections-popup-tp-switch-breakage-link"
- oncommand="gProtectionsHandler.showSiteNotWorkingView(); gProtectionsHandler.recordClick('sitenotworking_link');"
- class="subviewbutton subviewbutton-nav" align="center" flex="1">
- <label flex="1" class="toolbarbutton-text" data-l10n-id="protections-panel-site-not-working"></label>
- </toolbarbutton>
- <toolbarbutton id="protections-popup-tp-switch-breakage-fixed-link"
- oncommand="gProtectionsHandler.showSendReportView(); gProtectionsHandler.recordClick('sitenotworking_link', 'sitefixed');"
- class="subviewbutton subviewbutton-nav" align="center" flex="1">
- <label flex="1" class="toolbarbutton-text" data-l10n-id="protections-panel-sitefixedsendreport-label"></label>
- </toolbarbutton>
- </hbox>
</vbox>
<toolbarseparator observes="cmd_reportBrokenSite"></toolbarseparator>
@@ -184,36 +172,6 @@
</vbox>
</panelview>
- <!-- Site Not Working? SubView -->
- <panelview id="protections-popup-siteNotWorkingView"
- class="PanelUI-subView"
- role="document"
- data-l10n-id="protections-panel-site-not-working-view">
- <hbox id="protections-popup-siteNotWorkingView-header">
- <vbox class="protections-popup-tp-switch-box" flex="1" align="stretch">
- <html:moz-toggle id="protections-popup-siteNotWorking-tp-switch" data-l10n-attrs="label, description"></html:moz-toggle>
- </vbox>
- </hbox>
- <toolbarseparator></toolbarseparator>
- <vbox id="protections-popup-siteNotWorkingView-body" class="panel-subview-body" align="start">
- <label role="heading" aria-level="2" data-l10n-id="protections-panel-site-not-working-view-header"></label>
- <label>
- <html:ul id="protections-popup-siteNotWorkingView-body-issue-list">
- <html:li data-l10n-id="protections-panel-site-not-working-view-issue-list-login-fields"></html:li>
- <html:li data-l10n-id="protections-panel-site-not-working-view-issue-list-forms"></html:li>
- <html:li data-l10n-id="protections-panel-site-not-working-view-issue-list-payments"></html:li>
- <html:li data-l10n-id="protections-panel-site-not-working-view-issue-list-comments"></html:li>
- <html:li data-l10n-id="protections-panel-site-not-working-view-issue-list-videos"></html:li>
- <html:li data-l10n-id="protections-panel-site-not-working-view-issue-list-fonts"
- id="protections-panel-site-not-working-view-issue-list-fonts"></html:li>
- </html:ul>
- </label>
- <label id="protections-popup-siteNotWorkingView-sendReport"
- onclick="gProtectionsHandler.showSendReportView(); gProtectionsHandler.recordClick('send_report_link');"
- class="text-link" data-l10n-id="protections-panel-site-not-working-view-send-report"></label>
- </vbox>
- </panelview>
-
<!-- Trackers SubView -->
<panelview id="protections-popup-trackersView"
class="PanelUI-subView"
@@ -351,46 +309,6 @@
oncommand="gProtectionsHandler.openPreferences(); gProtectionsHandler.recordClick('subview_settings', 'cryptominers');"/>
</panelview>
- <!-- Send Report SubView -->
- <panelview id="protections-popup-sendReportView"
- class="PanelUI-subView"
- data-l10n-id="protections-panel-content-blocking-breakage-report-view">
- <vbox id="protections-popup-sendReportView-heading">
- <description id="protections-popup-sendReportView-description">
- <label data-l10n-id="protections-panel-content-blocking-breakage-report-view-description2"/>
- <html:a id="protections-popup-sendReportView-learn-more"
- is="moz-support-link"
- support-page="blocking-breakage" />
- </description>
- </vbox>
- <toolbarseparator></toolbarseparator>
- <vbox id="protections-popup-sendReportView-body" class="panel-view-body-unscrollable">
- <vbox class="protections-popup-sendReportView-collection-section">
- <label control="protections-popup-sendReportView-collection-url" data-l10n-id="protections-panel-content-blocking-breakage-report-view-collection-url"></label>
- <html:input readonly="readonly" id="protections-popup-sendReportView-collection-url" data-l10n-id="protections-panel-content-blocking-breakage-report-view-collection-url-label"/>
- </vbox>
- <vbox class="protections-popup-sendReportView-collection-section">
- <label control="protections-popup-sendReportView-collection-comments" data-l10n-id="protections-panel-content-blocking-breakage-report-view-collection-comments"></label>
- <html:textarea id="protections-popup-sendReportView-collection-comments" data-l10n-id="protections-panel-content-blocking-breakage-report-view-collection-comments-label"/>
- </vbox>
- <label id="protections-popup-sendReportView-report-error"
- data-l10n-id="protections-panel-sendreportview-error"
- hidden="true" role="alert"></label>
- </vbox>
- <html:moz-button-group id="protections-popup-sendReportView-footer"
- class="panel-footer">
- <button id="protections-popup-sendReportView-cancel"
- class="footer-button"
- data-l10n-id="protections-panel-content-blocking-breakage-report-view-cancel"
- oncommand="gProtectionsHandler._protectionsPopupMultiView.goBack();"/>
- <button id="protections-popup-sendReportView-submit"
- class="footer-button"
- default="true"
- data-l10n-id="protections-panel-content-blocking-breakage-report-view-send-report"
- oncommand="gProtectionsHandler.onSendReportClicked(); gProtectionsHandler.recordClick('send_report_submit');"/>
- </html:moz-button-group>
- </panelview>
-
<!-- Cookie Banner SubView -->
<panelview id="protections-popup-cookieBannerView"
class="PanelUI-subView"
diff --git a/browser/components/customizableui/CustomizableUI.sys.mjs b/browser/components/customizableui/CustomizableUI.sys.mjs
index d748b93a92..5b09402dc1 100644
--- a/browser/components/customizableui/CustomizableUI.sys.mjs
+++ b/browser/components/customizableui/CustomizableUI.sys.mjs
@@ -1251,8 +1251,8 @@ var CustomizableUIInternal = {
},
addPanelCloseListeners(aPanel) {
- Services.els.addSystemEventListener(aPanel, "click", this, false);
- Services.els.addSystemEventListener(aPanel, "keypress", this, false);
+ aPanel.addEventListener("click", this, { mozSystemGroup: true });
+ aPanel.addEventListener("keypress", this, { mozSystemGroup: true });
let win = aPanel.ownerGlobal;
if (!gPanelsForWindow.has(win)) {
gPanelsForWindow.set(win, new Set());
@@ -1261,8 +1261,8 @@ var CustomizableUIInternal = {
},
removePanelCloseListeners(aPanel) {
- Services.els.removeSystemEventListener(aPanel, "click", this, false);
- Services.els.removeSystemEventListener(aPanel, "keypress", this, false);
+ aPanel.removeEventListener("click", this, { mozSystemGroup: true });
+ aPanel.removeEventListener("keypress", this, { mozSystemGroup: true });
let win = aPanel.ownerGlobal;
let panels = gPanelsForWindow.get(win);
if (panels) {
@@ -5483,7 +5483,10 @@ class OverflowableToolbar {
let mainViewId = multiview.getAttribute("mainViewId");
let mainView = doc.getElementById(mainViewId);
let contextMenu = doc.getElementById(mainView.getAttribute("context"));
- Services.els.addSystemEventListener(contextMenu, "command", this, true);
+ contextMenu.addEventListener("command", this, {
+ capture: true,
+ mozSystemGroup: true,
+ });
let anchor = this.#defaultListButton.icon;
let popupshown = false;
@@ -6082,12 +6085,10 @@ class OverflowableToolbar {
let contextMenuId = this.#defaultListPanel.getAttribute("context");
if (contextMenuId) {
let contextMenu = doc.getElementById(contextMenuId);
- Services.els.removeSystemEventListener(
- contextMenu,
- "command",
- this,
- true
- );
+ contextMenu.removeEventListener("command", this, {
+ capture: true,
+ mozSystemGroup: true,
+ });
}
}
diff --git a/browser/components/customizableui/PanelMultiView.sys.mjs b/browser/components/customizableui/PanelMultiView.sys.mjs
index a97889f08a..e390bf7bf8 100644
--- a/browser/components/customizableui/PanelMultiView.sys.mjs
+++ b/browser/components/customizableui/PanelMultiView.sys.mjs
@@ -412,7 +412,6 @@ export var PanelMultiView = class extends AssociatedToNode {
this.openViews = [];
this._panel.addEventListener("popupshowing", this);
- this._panel.addEventListener("popuppositioned", this);
this._panel.addEventListener("popuphidden", this);
this._panel.addEventListener("popupshown", this);
@@ -434,7 +433,6 @@ export var PanelMultiView = class extends AssociatedToNode {
this._panel.removeEventListener("mousemove", this);
this._panel.removeEventListener("popupshowing", this);
- this._panel.removeEventListener("popuppositioned", this);
this._panel.removeEventListener("popupshown", this);
this._panel.removeEventListener("popuphidden", this);
this.document.documentElement.removeEventListener("keydown", this, true);
@@ -1181,47 +1179,6 @@ export var PanelMultiView = class extends AssociatedToNode {
}
}
- _calculateMaxHeight(aEvent) {
- // While opening the panel, we have to limit the maximum height of any
- // view based on the space that will be available. We cannot just use
- // window.screen.availTop and availHeight because these may return an
- // incorrect value when the window spans multiple screens.
- let anchor = this._panel.anchorNode;
- let anchorRect = anchor.getBoundingClientRect();
- let screen = anchor.screen;
-
- // GetAvailRect returns screen-device pixels, which we can convert to CSS
- // pixels here.
- let availTop = {},
- availHeight = {};
- screen.GetAvailRect({}, availTop, {}, availHeight);
- let cssAvailTop = availTop.value / screen.defaultCSSScaleFactor;
-
- // The distance from the anchor to the available margin of the screen is
- // based on whether the panel will open towards the top or the bottom.
- let maxHeight;
- if (aEvent.alignmentPosition.startsWith("before_")) {
- maxHeight = anchor.screenY - cssAvailTop;
- } else {
- let anchorScreenBottom = anchor.screenY + anchorRect.height;
- let cssAvailHeight = availHeight.value / screen.defaultCSSScaleFactor;
- maxHeight = cssAvailTop + cssAvailHeight - anchorScreenBottom;
- }
-
- // To go from the maximum height of the panel to the maximum height of
- // the view stack, we need to subtract the height of the arrow and the
- // height of the opposite margin, but we cannot get their actual values
- // because the panel is not visible yet. However, we know that this is
- // currently 11px on Mac, 13px on Windows, and 13px on Linux. We also
- // want an extra margin, both for visual reasons and to prevent glitches
- // due to small rounding errors. So, we just use a value that makes
- // sense for all platforms. If the arrow visuals change significantly,
- // this value will be easy to adjust.
- const EXTRA_MARGIN_PX = 20;
- maxHeight -= EXTRA_MARGIN_PX;
- return maxHeight;
- }
-
handleEvent(aEvent) {
// Only process actual popup events from the panel or events we generate
// ourselves, but not from menus being shown from within the panel.
@@ -1262,14 +1219,6 @@ export var PanelMultiView = class extends AssociatedToNode {
}
break;
}
- case "popuppositioned": {
- if (this._panel.state == "showing") {
- let maxHeight = this._calculateMaxHeight(aEvent);
- this._viewStack.style.maxHeight = maxHeight + "px";
- this._offscreenViewStack.style.maxHeight = maxHeight + "px";
- }
- break;
- }
case "popupshown":
// The main view is always open and visible when the panel is first
// shown, so we can check the height of the description elements it
diff --git a/browser/components/customizableui/test/browser_1856572_ensure_Fluent_works_in_customizeMode.js b/browser/components/customizableui/test/browser_1856572_ensure_Fluent_works_in_customizeMode.js
index 0f89bd5d1c..7187effdb1 100644
--- a/browser/components/customizableui/test/browser_1856572_ensure_Fluent_works_in_customizeMode.js
+++ b/browser/components/customizableui/test/browser_1856572_ensure_Fluent_works_in_customizeMode.js
@@ -10,12 +10,21 @@ const {
"resource://testing-common/FirefoxViewTestUtils.sys.mjs"
);
+/**
+ * Bug 1856572 - This test is to ensure that fluent strings in Firefox View
+ * can be updated after opening Customize Mode
+ * **/
add_task(async function test_data_l10n_customize_mode() {
FirefoxViewTestUtilsInit(this);
await withFirefoxView({ win: window }, async function (browser) {
/**
* Bug 1856572, Bug 1857622: Without requesting two animation frames
* the "missing Fluent strings" issue will not reproduce.
+ *
+ * Given the precondition that we open Firefox View, then open Customize Mode, then
+ * navigate back to Firefox View in a quick succession, as long as Fluent
+ * controlled strings can be updated by changing their Fluent IDs then this
+ * test is valid.
*/
await new Promise(r =>
requestAnimationFrame(() => requestAnimationFrame(r))
@@ -23,39 +32,47 @@ add_task(async function test_data_l10n_customize_mode() {
await startCustomizing();
await endCustomizing();
await openFirefoxViewTab(window);
-
const { document } = browser.contentWindow;
- let header = document.querySelector("h1");
- document.l10n.setAttributes(header, "firefoxview-overview-header");
+ let secondPageNavButton = document.querySelectorAll(
+ "moz-page-nav-button"
+ )[0];
+ document.l10n.setAttributes(
+ secondPageNavButton,
+ "firefoxview-overview-header"
+ );
let previousText = await document.l10n.formatValue(
- "firefoxview-page-title"
+ "firefoxview-opentabs-nav"
+ );
+ let translatedText = await window.content.document.l10n.formatValue(
+ "firefoxview-overview-header"
);
/**
* This should be replaced with
- * BrowserTestUtils.waitForMutationCondition(header, {characterData: true}, ...)
+ * BrowserTestUtils.waitForMutationCondition(secondPageNavButton, {characterData: true}, ...)
* but apparently Fluent manipulation of textContent doesn't result
* in a characterData mutation occurring.
*/
await BrowserTestUtils.waitForCondition(() => {
- return header.textContent != previousText;
+ return (
+ secondPageNavButton.textContent !== previousText &&
+ secondPageNavButton.textContent === translatedText
+ );
}, "waiting for text content to change");
Assert.equal(
- header.getAttribute("data-l10n-id"),
+ secondPageNavButton.getAttribute("data-l10n-id"),
"firefoxview-overview-header",
"data-l10n-id should be updated"
);
Assert.notEqual(
previousText,
- header.textContent,
- "The header's text content should be updated"
- );
- let translatedText = await window.content.document.l10n.formatValue(
- "firefoxview-overview-header"
+ secondPageNavButton.textContent,
+ "The second page-nav button text content should be updated"
);
+
Assert.equal(
translatedText,
- header.textContent,
+ secondPageNavButton.textContent,
"The changed text should be the translated value of 'firefoxview-overview-header"
);
});
diff --git a/browser/components/downloads/DownloadsCommon.sys.mjs b/browser/components/downloads/DownloadsCommon.sys.mjs
index a0cbd2f8d8..776d219ae7 100644
--- a/browser/components/downloads/DownloadsCommon.sys.mjs
+++ b/browser/components/downloads/DownloadsCommon.sys.mjs
@@ -696,7 +696,7 @@ export var DownloadsCommon = {
message = s.unblockTypePotentiallyUnwanted2;
break;
case lazy.Downloads.Error.BLOCK_VERDICT_INSECURE:
- message = s.unblockInsecure2;
+ message = s.unblockInsecure3;
break;
default:
// Assume Downloads.Error.BLOCK_VERDICT_MALWARE
@@ -1166,7 +1166,7 @@ const DownloadsViewPrototype = {
*
* @note Subclasses should override this.
*/
- onDownloadStateChanged(download) {
+ onDownloadStateChanged() {
throw Components.Exception("", Cr.NS_ERROR_NOT_IMPLEMENTED);
},
diff --git a/browser/components/downloads/DownloadsViewUI.sys.mjs b/browser/components/downloads/DownloadsViewUI.sys.mjs
index 9c6bd17d63..ffcd3b61fa 100644
--- a/browser/components/downloads/DownloadsViewUI.sys.mjs
+++ b/browser/components/downloads/DownloadsViewUI.sys.mjs
@@ -888,7 +888,7 @@ DownloadsViewUI.DownloadElementShell.prototype = {
case lazy.Downloads.Error.BLOCK_VERDICT_INSECURE:
return [
s.blockedPotentiallyInsecure,
- [s.unblockInsecure2, s.unblockTip2],
+ [s.unblockInsecure3, s.unblockTip2],
];
case lazy.Downloads.Error.BLOCK_VERDICT_POTENTIALLY_UNWANTED:
return [
diff --git a/browser/components/downloads/DownloadsViewableInternally.sys.mjs b/browser/components/downloads/DownloadsViewableInternally.sys.mjs
index f9c77168b1..47250c0159 100644
--- a/browser/components/downloads/DownloadsViewableInternally.sys.mjs
+++ b/browser/components/downloads/DownloadsViewableInternally.sys.mjs
@@ -67,7 +67,7 @@ export let DownloadsViewableInternally = {
this._updateAllHandlers();
// Register the check for use in DownloadIntegration
- lazy.Integration.downloads.register(base => ({
+ lazy.Integration.downloads.register(() => ({
shouldViewDownloadInternally:
this._shouldViewDownloadInternally.bind(this),
}));
diff --git a/browser/components/downloads/content/allDownloadsView.js b/browser/components/downloads/content/allDownloadsView.js
index b42e4ec118..08f8bfcb5f 100644
--- a/browser/components/downloads/content/allDownloadsView.js
+++ b/browser/components/downloads/content/allDownloadsView.js
@@ -734,7 +734,7 @@ DownloadsPlacesView.prototype = {
goUpdateCommand("downloadsCmd_clearDownloads");
},
- onContextMenu(aEvent) {
+ onContextMenu() {
let element = this._richlistbox.selectedItem;
if (!element || !element._shell) {
return false;
@@ -910,7 +910,7 @@ function goUpdateDownloadCommands() {
document.addEventListener("DOMContentLoaded", function () {
let richListBox = document.getElementById("downloadsListBox");
- richListBox.addEventListener("scroll", function (event) {
+ richListBox.addEventListener("scroll", function () {
return this._placesView.onScroll();
});
richListBox.addEventListener("keypress", function (event) {
@@ -938,7 +938,7 @@ document.addEventListener("DOMContentLoaded", function () {
dropNode.addEventListener("drop", function (event) {
richListBox._placesView.onDrop(event);
});
- richListBox.addEventListener("select", function (event) {
+ richListBox.addEventListener("select", function () {
this._placesView.onSelect();
});
richListBox.addEventListener("focus", goUpdateDownloadCommands);
diff --git a/browser/components/downloads/content/contentAreaDownloadsView.js b/browser/components/downloads/content/contentAreaDownloadsView.js
index 62c81fc147..3f9c4ad956 100644
--- a/browser/components/downloads/content/contentAreaDownloadsView.js
+++ b/browser/components/downloads/content/contentAreaDownloadsView.js
@@ -29,7 +29,7 @@ var ContentAreaDownloadsView = {
{ once: true }
);
let view = new DownloadsPlacesView(box, true, suppressionFlag);
- document.addEventListener("visibilitychange", aEvent => {
+ document.addEventListener("visibilitychange", () => {
let indicator = DownloadsCommon.getIndicatorData(window);
if (document.visibilityState === "visible") {
indicator.attentionSuppressed |= suppressionFlag;
diff --git a/browser/components/downloads/content/downloads.js b/browser/components/downloads/content/downloads.js
index 778b995e93..b420d48db6 100644
--- a/browser/components/downloads/content/downloads.js
+++ b/browser/components/downloads/content/downloads.js
@@ -528,7 +528,10 @@ var DownloadsPanel = {
},
_startWatchingForSpammyDownloadActivation() {
- Services.els.addSystemEventListener(window, "keydown", this, true);
+ window.addEventListener("keydown", this, {
+ capture: true,
+ mozSystemGroup: true,
+ });
},
_lastBeepTime: 0,
@@ -546,7 +549,10 @@ var DownloadsPanel = {
},
_stopWatchingForSpammyDownloadActivation() {
- Services.els.removeSystemEventListener(window, "keydown", this, true);
+ window.removeEventListener("keydown", this, {
+ capture: true,
+ mozSystemGroup: true,
+ });
},
/**
@@ -1458,7 +1464,7 @@ var DownloadsSummary = {
* @param aEvent
* The click event being handled.
*/
- onClick(aEvent) {
+ onClick() {
DownloadsPanel.showDownloadsHistory();
},
diff --git a/browser/components/downloads/test/browser/browser_download_overwrite.js b/browser/components/downloads/test/browser/browser_download_overwrite.js
index 7be16aa565..b1de07b5ed 100644
--- a/browser/components/downloads/test/browser/browser_download_overwrite.js
+++ b/browser/components/downloads/test/browser/browser_download_overwrite.js
@@ -5,11 +5,11 @@
const TEST_ROOT = getRootDirectory(gTestPath).replace(
"chrome://mochitests/content",
- "http://example.com"
+ "https://example.com"
);
var MockFilePicker = SpecialPowers.MockFilePicker;
-MockFilePicker.init(window);
+MockFilePicker.init(window.browsingContext);
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/toolkit/content/tests/browser/common/mockTransfer.js",
@@ -31,7 +31,7 @@ add_setup(async function () {
let destDir = gTestTargetFile.parent;
MockFilePicker.displayDirectory = destDir;
- MockFilePicker.showCallback = function (fp) {
+ MockFilePicker.showCallback = function () {
MockFilePicker.setFiles([gTestTargetFile]);
return MockFilePicker.returnOK;
};
diff --git a/browser/components/downloads/test/browser/browser_downloads_panel_dontshow.js b/browser/components/downloads/test/browser/browser_downloads_panel_dontshow.js
index 28c7bc302f..240c90048e 100644
--- a/browser/components/downloads/test/browser/browser_downloads_panel_dontshow.js
+++ b/browser/components/downloads/test/browser/browser_downloads_panel_dontshow.js
@@ -2,7 +2,7 @@
// download occurs but not when a user manually saves a page.
let MockFilePicker = SpecialPowers.MockFilePicker;
-MockFilePicker.init(window);
+MockFilePicker.init(window.browsingContext);
async function promiseDownloadFinished(list) {
return new Promise(resolve => {
diff --git a/browser/components/downloads/test/browser/browser_downloads_panel_opens.js b/browser/components/downloads/test/browser/browser_downloads_panel_opens.js
index 7c44939e59..f8e034aaa5 100644
--- a/browser/components/downloads/test/browser/browser_downloads_panel_opens.js
+++ b/browser/components/downloads/test/browser/browser_downloads_panel_opens.js
@@ -2,7 +2,7 @@
* http://creativecommons.org/publicdomain/zero/1.0/ */
let { MockFilePicker } = SpecialPowers;
-MockFilePicker.init(window);
+MockFilePicker.init(window.browsingContext);
registerCleanupFunction(() => MockFilePicker.cleanup());
/**
diff --git a/browser/components/downloads/test/browser/browser_iframe_gone_mid_download.js b/browser/components/downloads/test/browser/browser_iframe_gone_mid_download.js
index a1b82fb9c2..0e4b51a1a6 100644
--- a/browser/components/downloads/test/browser/browser_iframe_gone_mid_download.js
+++ b/browser/components/downloads/test/browser/browser_iframe_gone_mid_download.js
@@ -22,7 +22,7 @@ function test_deleted_iframe(perSitePref, windowOptions = {}) {
ok(iframe.contentWindow, "iframe should have a window");
let gDownloadLastDir = new DownloadLastDir(iframe.contentWindow);
let cw = iframe.contentWindow;
- let promiseIframeWindowGone = new Promise((resolve, reject) => {
+ let promiseIframeWindowGone = new Promise(resolve => {
Services.obs.addObserver(function obs(subject, topic) {
if (subject == cw) {
Services.obs.removeObserver(obs, topic);
diff --git a/browser/components/downloads/test/browser/browser_image_mimetype_issues.js b/browser/components/downloads/test/browser/browser_image_mimetype_issues.js
index b893a26d89..0f6afef9b4 100644
--- a/browser/components/downloads/test/browser/browser_image_mimetype_issues.js
+++ b/browser/components/downloads/test/browser/browser_image_mimetype_issues.js
@@ -9,7 +9,7 @@ const TEST_ROOT = getRootDirectory(gTestPath).replace(
);
var MockFilePicker = SpecialPowers.MockFilePicker;
-MockFilePicker.init(window);
+MockFilePicker.init(window.browsingContext);
/*
* Popular websites implement image optimization as serving files with
@@ -98,7 +98,7 @@ add_task(async function test_save_link_webp_with_jpeg_extension() {
add_task(async function test_save_page_on_image_document() {
await BrowserTestUtils.withNewTab(
`${TEST_ROOT}/not-really-a-jpeg.jpeg?convert=webp`,
- async browser => {
+ async () => {
await new Promise(resolve => {
MockFilePicker.showCallback = function (fp) {
ok(
@@ -119,7 +119,7 @@ add_task(async function test_save_page_on_image_document() {
* get it replaced with .jpeg.
*/
add_task(async function test_save_page_on_JPEG_image_document() {
- await BrowserTestUtils.withNewTab(`${TEST_ROOT}/blank.JPG`, async browser => {
+ await BrowserTestUtils.withNewTab(`${TEST_ROOT}/blank.JPG`, async () => {
await new Promise(resolve => {
MockFilePicker.showCallback = function (fp) {
ok(
diff --git a/browser/components/downloads/test/browser/browser_library_clearall.js b/browser/components/downloads/test/browser/browser_library_clearall.js
index 022d1b6977..e96ea9d3e3 100644
--- a/browser/components/downloads/test/browser/browser_library_clearall.js
+++ b/browser/components/downloads/test/browser/browser_library_clearall.js
@@ -22,7 +22,7 @@ function waitForChildren(element, callback) {
});
}
-async function waitForChildrenLength(element, length, callback) {
+async function waitForChildrenLength(element, length) {
if (element.childElementCount != length) {
await waitForChildren(element, () => element.childElementCount == length);
}
diff --git a/browser/components/downloads/test/unit/test_DownloadsCommon_isFileOfType.js b/browser/components/downloads/test/unit/test_DownloadsCommon_isFileOfType.js
index d965ac264a..c07a44673c 100644
--- a/browser/components/downloads/test/unit/test_DownloadsCommon_isFileOfType.js
+++ b/browser/components/downloads/test/unit/test_DownloadsCommon_isFileOfType.js
@@ -120,7 +120,7 @@ for (let testData of TESTCASES) {
/**
* Sanity test the DownloadsCommon.isFileOfType method with test parameters
*/
-async function test_isFileOfType({ name, typeArg, downloadProps, expected }) {
+async function test_isFileOfType({ typeArg, downloadProps, expected }) {
let download, result;
if (downloadProps) {
let downloadData = {
diff --git a/browser/components/enterprisepolicies/Policies.sys.mjs b/browser/components/enterprisepolicies/Policies.sys.mjs
index 24f2f9d516..41fc89957c 100644
--- a/browser/components/enterprisepolicies/Policies.sys.mjs
+++ b/browser/components/enterprisepolicies/Policies.sys.mjs
@@ -43,7 +43,7 @@ ChromeUtils.defineLazyGetter(lazy, "log", () => {
"resource://gre/modules/Console.sys.mjs"
);
return new ConsoleAPI({
- prefix: "Policies.jsm",
+ prefix: "Policies",
// tip: set maxLogLevel to "debug" and use log.debug() to create detailed
// messages during development. See LOG_LEVELS in Console.sys.mjs for details.
maxLogLevel: "error",
@@ -233,12 +233,12 @@ export var Policies = {
return true;
},
- // No additional implementation needed here. UpdateService.jsm will check
+ // No additional implementation needed here. UpdateService.sys.mjs will check
// for this policy directly when determining the update URL.
},
AppUpdateURL: {
- // No implementation needed here. UpdateService.jsm will check for this
+ // No implementation needed here. UpdateService.sys.mjs will check for this
// policy directly when determining the update URL.
},
@@ -313,6 +313,18 @@ export var Policies = {
},
},
+ AutofillAddressEnabled: {
+ onBeforeAddons(manager, param) {
+ setAndLockPref("extensions.formautofill.addresses.enabled", param);
+ },
+ },
+
+ AutofillCreditCardEnabled: {
+ onBeforeAddons(manager, param) {
+ setAndLockPref("extensions.formautofill.creditCards.enabled", param);
+ },
+ },
+
AutoLaunchProtocolsFromOrigins: {
onBeforeAddons(manager, param) {
for (let info of param) {
@@ -497,10 +509,57 @@ export var Policies = {
},
ContentAnalysis: {
- onBeforeUIStartup(manager, param) {
+ onBeforeAddons(manager, param) {
+ if ("PipePathName" in param) {
+ setAndLockPref(
+ "browser.contentanalysis.pipe_path_name",
+ param.PipePathName
+ );
+ }
+ if ("AgentTimeout" in param) {
+ if (!Number.isInteger(param.AgentTimeout)) {
+ lazy.log.error(
+ `Non-integer value for AgentTimeout: ${param.AgentTimeout}`
+ );
+ } else {
+ setAndLockPref(
+ "browser.contentanalysis.agent_timeout",
+ param.AgentTimeout
+ );
+ }
+ }
+ if ("AllowUrlRegexList" in param) {
+ setAndLockPref(
+ "browser.contentanalysis.allow_url_regex_list",
+ param.AllowUrlRegexList
+ );
+ }
+ if ("DenyUrlRegexList" in param) {
+ setAndLockPref(
+ "browser.contentanalysis.deny_url_regex_list",
+ param.DenyUrlRegexList
+ );
+ }
+ let boolPrefs = [
+ ["IsPerUser", "is_per_user"],
+ ["ShowBlockedResult", "show_blocked_result"],
+ ["DefaultAllow", "default_allow"],
+ ];
+ for (let pref of boolPrefs) {
+ if (pref[0] in param) {
+ setAndLockPref(
+ `browser.contentanalysis.${pref[1]}`,
+ !!param[pref[0]]
+ );
+ }
+ }
if ("Enabled" in param) {
let enabled = !!param.Enabled;
setAndLockPref("browser.contentanalysis.enabled", enabled);
+ let ca = Cc["@mozilla.org/contentanalysis;1"].getService(
+ Ci.nsIContentAnalysis
+ );
+ ca.isSetByEnterprisePolicy = true;
}
},
},
@@ -618,8 +677,6 @@ export var Policies = {
"browser.download.dir",
replacePathVariables(param)
);
- // If a custom download directory is being used, just lock folder list to 2.
- setAndLockPref("browser.download.folderList", 2);
},
},
@@ -1061,7 +1118,7 @@ export var Policies = {
},
ExemptDomainFileTypePairsFromFileTypeDownloadWarnings: {
- // This policy is handled directly in EnterprisePoliciesParent.jsm
+ // This policy is handled directly in EnterprisePoliciesParent.sys.mjs
// and requires no validation (It's done by the schema).
},
diff --git a/browser/components/enterprisepolicies/content/aboutPolicies.js b/browser/components/enterprisepolicies/content/aboutPolicies.js
index 39b4fc067c..9cde085f3d 100644
--- a/browser/components/enterprisepolicies/content/aboutPolicies.js
+++ b/browser/components/enterprisepolicies/content/aboutPolicies.js
@@ -249,14 +249,14 @@ function generateErrors() {
const consoleEvents = storage.getEvents();
const prefixes = [
"Enterprise Policies",
- "JsonSchemaValidator.jsm",
- "Policies.jsm",
- "GPOParser.jsm",
+ "JsonSchemaValidator",
+ "Policies",
+ "WindowsGPOParser",
"Enterprise Policies Child",
- "BookmarksPolicies.jsm",
- "ProxyPolicies.jsm",
+ "BookmarksPolicies",
+ "ProxyPolicies",
"WebsiteFilter Policy",
- "macOSPoliciesParser.jsm",
+ "macOSPoliciesParser",
];
let new_cont = document.getElementById("errorsContent");
diff --git a/browser/components/enterprisepolicies/helpers/BookmarksPolicies.sys.mjs b/browser/components/enterprisepolicies/helpers/BookmarksPolicies.sys.mjs
index 616df38291..5fc70c31cf 100644
--- a/browser/components/enterprisepolicies/helpers/BookmarksPolicies.sys.mjs
+++ b/browser/components/enterprisepolicies/helpers/BookmarksPolicies.sys.mjs
@@ -50,9 +50,9 @@ ChromeUtils.defineLazyGetter(lazy, "log", () => {
"resource://gre/modules/Console.sys.mjs"
);
return new ConsoleAPI({
- prefix: "BookmarksPolicies.jsm",
+ prefix: "BookmarksPolicies",
// tip: set maxLogLevel to "debug" and use log.debug() to create detailed
- // messages during development. See LOG_LEVELS in Console.jsm for details.
+ // messages during development. See LOG_LEVELS in Console.sys.mjs for details.
maxLogLevel: "error",
maxLogLevelPref: PREF_LOGLEVEL,
});
diff --git a/browser/components/enterprisepolicies/helpers/ProxyPolicies.sys.mjs b/browser/components/enterprisepolicies/helpers/ProxyPolicies.sys.mjs
index 17c7806c50..393b9bb85e 100644
--- a/browser/components/enterprisepolicies/helpers/ProxyPolicies.sys.mjs
+++ b/browser/components/enterprisepolicies/helpers/ProxyPolicies.sys.mjs
@@ -11,7 +11,7 @@ ChromeUtils.defineLazyGetter(lazy, "log", () => {
"resource://gre/modules/Console.sys.mjs"
);
return new ConsoleAPI({
- prefix: "ProxyPolicies.jsm",
+ prefix: "ProxyPolicies",
// tip: set maxLogLevel to "debug" and use log.debug() to create detailed
// messages during development. See LOG_LEVELS in Console.sys.mjs for details.
maxLogLevel: "error",
diff --git a/browser/components/enterprisepolicies/schemas/policies-schema.json b/browser/components/enterprisepolicies/schemas/policies-schema.json
index cfb04e841f..a1ccaed74f 100644
--- a/browser/components/enterprisepolicies/schemas/policies-schema.json
+++ b/browser/components/enterprisepolicies/schemas/policies-schema.json
@@ -90,6 +90,14 @@
}
},
+ "AutofillAddressEnabled": {
+ "type": "boolean"
+ },
+
+ "AutofillCreditCardEnabled": {
+ "type": "boolean"
+ },
+
"AutoLaunchProtocolsFromOrigins": {
"type": ["array", "JSON"],
"items": {
@@ -227,6 +235,36 @@
}
},
+ "ContentAnalysis": {
+ "type": "object",
+ "properties": {
+ "Enabled": {
+ "type": "boolean"
+ },
+ "PipePathName": {
+ "type": "string"
+ },
+ "AgentTimeout": {
+ "type": "number"
+ },
+ "AllowUrlRegexList": {
+ "type": "string"
+ },
+ "DenyUrlRegexList": {
+ "type": "string"
+ },
+ "IsPerUser": {
+ "type": "boolean"
+ },
+ "ShowBlockedResult": {
+ "type": "boolean"
+ },
+ "DefaultAllow": {
+ "type": "boolean"
+ }
+ }
+ },
+
"Cookies": {
"type": "object",
"properties": {
diff --git a/browser/components/enterprisepolicies/tests/browser/browser_policy_allowfileselectiondialogs.js b/browser/components/enterprisepolicies/tests/browser/browser_policy_allowfileselectiondialogs.js
index 94f6bba631..4ba4a7cf25 100644
--- a/browser/components/enterprisepolicies/tests/browser/browser_policy_allowfileselectiondialogs.js
+++ b/browser/components/enterprisepolicies/tests/browser/browser_policy_allowfileselectiondialogs.js
@@ -154,7 +154,7 @@ add_task(async function test_cancel_event() {
add_task(async function test_nsIFilePicker_open() {
let picker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
- picker.init(window, "", Ci.nsIFilePicker.modeSave);
+ picker.init(window.browsingContext, "", Ci.nsIFilePicker.modeSave);
let result = await new Promise(resolve => picker.open(res => resolve(res)));
diff --git a/browser/components/enterprisepolicies/tests/xpcshell/test_policy_search_engine.js b/browser/components/enterprisepolicies/tests/xpcshell/test_policy_search_engine.js
index 5c602442f2..c8eb29982d 100644
--- a/browser/components/enterprisepolicies/tests/xpcshell/test_policy_search_engine.js
+++ b/browser/components/enterprisepolicies/tests/xpcshell/test_policy_search_engine.js
@@ -189,7 +189,7 @@ add_task(async function test_install_and_remove() {
Assert.notEqual(engine, null, "Specified search engine should be installed");
Assert.equal(
- engine.wrappedJSObject.getIconURL(),
+ await engine.wrappedJSObject.getIconURL(),
iconURL,
"Icon should be present"
);
diff --git a/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js b/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js
index 8ef8b831ef..82caee16a7 100644
--- a/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js
+++ b/browser/components/enterprisepolicies/tests/xpcshell/test_simple_pref_policies.js
@@ -1032,6 +1032,19 @@ const POLICIES_TESTS = [
"browser.newtabpage.activity-stream.asrouter.userprefs.cfr.features": true,
},
},
+
+ // POLICY: AutofillAddressEnabled, AutofillCreditCardEnabled
+
+ {
+ policies: {
+ AutofillAddressEnabled: false,
+ AutofillCreditCardEnabled: false,
+ },
+ lockedPrefs: {
+ "extensions.formautofill.addresses.enabled": false,
+ "extensions.formautofill.creditCards.enabled": false,
+ },
+ },
];
add_task(async function test_policy_simple_prefs() {
diff --git a/browser/components/extensions/ExtensionBrowsingData.sys.mjs b/browser/components/extensions/ExtensionBrowsingData.sys.mjs
index 24c6d86050..9ca3be643d 100644
--- a/browser/components/extensions/ExtensionBrowsingData.sys.mjs
+++ b/browser/components/extensions/ExtensionBrowsingData.sys.mjs
@@ -18,7 +18,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
export class BrowsingDataDelegate {
// Unused for now
- constructor(extension) {}
+ constructor() {}
// This method returns undefined for all data types that are _not_ handled by
// this delegate.
diff --git a/browser/components/extensions/ExtensionControlledPopup.sys.mjs b/browser/components/extensions/ExtensionControlledPopup.sys.mjs
index 270dd65827..b07a8214f3 100644
--- a/browser/components/extensions/ExtensionControlledPopup.sys.mjs
+++ b/browser/components/extensions/ExtensionControlledPopup.sys.mjs
@@ -155,7 +155,7 @@ export class ExtensionControlledPopup {
);
}
- observe(subject, topic, data) {
+ observe(subject) {
// Remove the observer here so we don't get multiple open() calls if we get
// multiple observer events in quick succession.
this.removeObserver();
diff --git a/browser/components/extensions/ExtensionPopups.sys.mjs b/browser/components/extensions/ExtensionPopups.sys.mjs
index 7549f3202c..dbd34697c7 100644
--- a/browser/components/extensions/ExtensionPopups.sys.mjs
+++ b/browser/components/extensions/ExtensionPopups.sys.mjs
@@ -28,7 +28,7 @@ function promisePopupShown(popup) {
} else {
popup.addEventListener(
"popupshown",
- function (event) {
+ function () {
resolve();
},
{ once: true }
@@ -385,7 +385,7 @@ export class BasePopup {
}
unblockParser() {
- this.browserReady.then(browser => {
+ this.browserReady.then(() => {
if (this.destroyed) {
return;
}
diff --git a/browser/components/extensions/child/ext-devtools.js b/browser/components/extensions/child/ext-devtools.js
index 219df7cb07..926c5e47c5 100644
--- a/browser/components/extensions/child/ext-devtools.js
+++ b/browser/components/extensions/child/ext-devtools.js
@@ -7,7 +7,7 @@
"use strict";
this.devtools = class extends ExtensionAPI {
- getAPI(context) {
+ getAPI() {
return {
devtools: {},
};
diff --git a/browser/components/extensions/child/ext-menus.js b/browser/components/extensions/child/ext-menus.js
index 6c3b7ae492..2ffbf57132 100644
--- a/browser/components/extensions/child/ext-menus.js
+++ b/browser/components/extensions/child/ext-menus.js
@@ -248,7 +248,7 @@ this.menusInternal = class extends ExtensionAPI {
}
pendingMenuEvent = {
webExtContextData,
- observe(subject, topic, data) {
+ observe(subject) {
pendingMenuEvent = null;
Services.obs.removeObserver(this, "on-prepare-contextmenu");
subject = subject.wrappedJSObject;
diff --git a/browser/components/extensions/parent/ext-browser.js b/browser/components/extensions/parent/ext-browser.js
index 355f4f0668..7b01d15101 100644
--- a/browser/components/extensions/parent/ext-browser.js
+++ b/browser/components/extensions/parent/ext-browser.js
@@ -108,7 +108,7 @@ global.clickModifiersFromEvent = event => {
global.waitForTabLoaded = (tab, url) => {
return new Promise(resolve => {
windowTracker.addListener("progress", {
- onLocationChange(browser, webProgress, request, locationURI, flags) {
+ onLocationChange(browser, webProgress, request, locationURI) {
if (
webProgress.isTopLevel &&
browser.ownerGlobal.gBrowser.getTabForBrowser(browser) == tab &&
diff --git a/browser/components/extensions/parent/ext-browserAction.js b/browser/components/extensions/parent/ext-browserAction.js
index 4122856104..521a1195bb 100644
--- a/browser/components/extensions/parent/ext-browserAction.js
+++ b/browser/components/extensions/parent/ext-browserAction.js
@@ -95,7 +95,7 @@ this.browserAction = class extends ExtensionAPIPersistent {
return browserActionMap.get(extension);
}
- async onManifestEntry(entryName) {
+ async onManifestEntry() {
let { extension } = this;
let options =
@@ -341,7 +341,7 @@ this.browserAction = class extends ExtensionAPIPersistent {
);
},
- onBeforeCommand: (event, node) => {
+ onBeforeCommand: event => {
this.lastClickInfo = {
button: event.button || 0,
modifiers: clickModifiersFromEvent(event),
diff --git a/browser/components/extensions/parent/ext-chrome-settings-overrides.js b/browser/components/extensions/parent/ext-chrome-settings-overrides.js
index 2e3a285014..1fbb794b51 100644
--- a/browser/components/extensions/parent/ext-chrome-settings-overrides.js
+++ b/browser/components/extensions/parent/ext-chrome-settings-overrides.js
@@ -259,7 +259,7 @@ this.chrome_settings_overrides = class extends ExtensionAPI {
await chrome_settings_overrides.removeEngine(id);
}
- async onManifestEntry(entryName) {
+ async onManifestEntry() {
let { extension } = this;
let { manifest } = extension;
let homepageUrl = manifest.chrome_settings_overrides.homepage;
diff --git a/browser/components/extensions/parent/ext-commands.js b/browser/components/extensions/parent/ext-commands.js
index 88e7dae307..328f05a802 100644
--- a/browser/components/extensions/parent/ext-commands.js
+++ b/browser/components/extensions/parent/ext-commands.js
@@ -42,7 +42,7 @@ this.commands = class extends ExtensionAPIPersistent {
return ExtensionShortcuts.removeCommandsFromStorage(extensionId);
}
- async onManifestEntry(entryName) {
+ async onManifestEntry() {
let shortcuts = new ExtensionShortcuts({
extension: this.extension,
onCommand: name => this.emit("command", name),
diff --git a/browser/components/extensions/parent/ext-devtools-panels.js b/browser/components/extensions/parent/ext-devtools-panels.js
index 9f0dba5c25..6b83ea5dbb 100644
--- a/browser/components/extensions/parent/ext-devtools-panels.js
+++ b/browser/components/extensions/parent/ext-devtools-panels.js
@@ -593,7 +593,7 @@ this.devtools_panels = class extends ExtensionAPI {
context,
name: "devtools.panels.elements.onSelectionChanged",
register: fire => {
- const listener = eventName => {
+ const listener = () => {
fire.async();
};
toolboxSelectionObserver.on("selectionChanged", listener);
diff --git a/browser/components/extensions/parent/ext-devtools.js b/browser/components/extensions/parent/ext-devtools.js
index 98efd25489..da6d1fdc2d 100644
--- a/browser/components/extensions/parent/ext-devtools.js
+++ b/browser/components/extensions/parent/ext-devtools.js
@@ -406,7 +406,7 @@ this.devtools = class extends ExtensionAPI {
this._uninitialize();
}
- getAPI(context) {
+ getAPI() {
return {
devtools: {},
};
diff --git a/browser/components/extensions/parent/ext-history.js b/browser/components/extensions/parent/ext-history.js
index b7e24aecaa..c47e1090dd 100644
--- a/browser/components/extensions/parent/ext-history.js
+++ b/browser/components/extensions/parent/ext-history.js
@@ -95,7 +95,7 @@ function executeAsyncQuery(historyQuery, options, resultConverter) {
)
);
},
- handleCompletion(reason) {
+ handleCompletion() {
resolve(results);
},
});
diff --git a/browser/components/extensions/parent/ext-menus.js b/browser/components/extensions/parent/ext-menus.js
index 74ce398b48..a5b27bff7d 100644
--- a/browser/components/extensions/parent/ext-menus.js
+++ b/browser/components/extensions/parent/ext-menus.js
@@ -312,7 +312,7 @@ var gMenuBuilder = {
return this.customizeElement(element, item, contextData);
},
- createMenuElement(doc, item) {
+ createMenuElement(doc) {
let element = doc.createXULElement("menu");
// Menu elements need to have a menupopup child for its menu items.
let menupopup = doc.createXULElement("menupopup");
@@ -1084,7 +1084,7 @@ const menuTracker = {
libraryTracker.uninit(this.cleanupLibrary);
},
- observe(subject, topic, data) {
+ observe(subject) {
subject = subject.wrappedJSObject;
gMenuBuilder.build(subject);
},
diff --git a/browser/components/extensions/parent/ext-omnibox.js b/browser/components/extensions/parent/ext-omnibox.js
index 363db67325..d8d5f64941 100644
--- a/browser/components/extensions/parent/ext-omnibox.js
+++ b/browser/components/extensions/parent/ext-omnibox.js
@@ -15,7 +15,7 @@ this.omnibox = class extends ExtensionAPIPersistent {
PERSISTENT_EVENTS = {
onInputStarted({ fire }) {
let { extension } = this;
- let listener = eventName => {
+ let listener = () => {
fire.sync();
};
extension.on(ExtensionSearchHandler.MSG_INPUT_STARTED, listener);
@@ -30,7 +30,7 @@ this.omnibox = class extends ExtensionAPIPersistent {
},
onInputCancelled({ fire }) {
let { extension } = this;
- let listener = eventName => {
+ let listener = () => {
fire.sync();
};
extension.on(ExtensionSearchHandler.MSG_INPUT_CANCELLED, listener);
@@ -90,7 +90,7 @@ this.omnibox = class extends ExtensionAPIPersistent {
},
};
- onManifestEntry(entryName) {
+ onManifestEntry() {
let { extension } = this;
let { manifest } = extension;
diff --git a/browser/components/extensions/parent/ext-pageAction.js b/browser/components/extensions/parent/ext-pageAction.js
index aa45be8256..7dd07bd282 100644
--- a/browser/components/extensions/parent/ext-pageAction.js
+++ b/browser/components/extensions/parent/ext-pageAction.js
@@ -27,7 +27,7 @@ let pageActionMap = new WeakMap();
class PageAction extends PageActionBase {
constructor(extension, buttonDelegate) {
- let tabContext = new TabContext(tab => this.getContextData(null));
+ let tabContext = new TabContext(() => this.getContextData(null));
super(tabContext, extension);
this.buttonDelegate = buttonDelegate;
}
@@ -72,7 +72,7 @@ this.pageAction = class extends ExtensionAPIPersistent {
BrowserUsageTelemetry.recordWidgetChange(makeWidgetId(id), null, "addon");
}
- async onManifestEntry(entryName) {
+ async onManifestEntry() {
let { extension } = this;
let options = extension.manifest.page_action;
@@ -120,7 +120,7 @@ this.pageAction = class extends ExtensionAPIPersistent {
iconURL: this.action.getProperty(null, "icon"),
pinnedToUrlbar: this.action.getPinned(),
disabled: !this.action.getProperty(null, "enabled"),
- onCommand: (event, buttonNode) => {
+ onCommand: event => {
this.handleClick(event.target.ownerGlobal, {
button: event.button || 0,
modifiers: clickModifiersFromEvent(event),
diff --git a/browser/components/extensions/parent/ext-search.js b/browser/components/extensions/parent/ext-search.js
index 4fe7a096f4..cd65335f48 100644
--- a/browser/components/extensions/parent/ext-search.js
+++ b/browser/components/extensions/parent/ext-search.js
@@ -40,7 +40,7 @@ this.search = class extends ExtensionAPI {
let defaultEngine = await Services.search.getDefault();
return Promise.all(
visibleEngines.map(async engine => {
- let favIconUrl = engine.getIconURL();
+ let favIconUrl = await engine.getIconURL();
// Convert moz-extension:-URLs to data:-URLs to make sure that
// extensions can see icons from other extensions, even if they
// are not web-accessible.
diff --git a/browser/components/extensions/parent/ext-sidebarAction.js b/browser/components/extensions/parent/ext-sidebarAction.js
index 648b34e557..197456abd9 100644
--- a/browser/components/extensions/parent/ext-sidebarAction.js
+++ b/browser/components/extensions/parent/ext-sidebarAction.js
@@ -28,7 +28,7 @@ this.sidebarAction = class extends ExtensionAPI {
return sidebarActionMap.get(extension);
}
- onManifestEntry(entryName) {
+ onManifestEntry() {
let { extension } = this;
extension.once("ready", this.onReady.bind(this));
diff --git a/browser/components/extensions/parent/ext-tabs.js b/browser/components/extensions/parent/ext-tabs.js
index 53d470e6f1..128a42439b 100644
--- a/browser/components/extensions/parent/ext-tabs.js
+++ b/browser/components/extensions/parent/ext-tabs.js
@@ -82,7 +82,7 @@ let tabListener = {
}
},
- onLocationChange(browser, webProgress, request, locationURI, flags) {
+ onLocationChange(browser, webProgress) {
if (webProgress.isTopLevel) {
let { gBrowser } = browser.ownerGlobal;
let nativeTab = gBrowser.getTabForBrowser(browser);
@@ -356,7 +356,7 @@ this.tabs = class extends ExtensionAPIPersistent {
return windowId;
}
- function matchFilters(tab, changed) {
+ function matchFilters(tab) {
if (!filterProps) {
return true;
}
@@ -663,7 +663,7 @@ this.tabs = class extends ExtensionAPIPersistent {
onReplaced: new EventManager({
context,
name: "tabs.onReplaced",
- register: fire => {
+ register: () => {
return () => {};
},
}).api(),
@@ -683,7 +683,7 @@ this.tabs = class extends ExtensionAPIPersistent {
}).api(),
create(createProperties) {
- return new Promise((resolve, reject) => {
+ return new Promise(resolve => {
let window =
createProperties.windowId !== null
? windowTracker.getWindow(createProperties.windowId, context)
@@ -695,7 +695,7 @@ this.tabs = class extends ExtensionAPIPersistent {
}
let { gBrowserInit } = window;
if (!gBrowserInit || !gBrowserInit.delayedStartupFinished) {
- let obs = (finishedWindow, topic, data) => {
+ let obs = finishedWindow => {
if (finishedWindow != window) {
return;
}
@@ -1364,7 +1364,11 @@ this.tabs = class extends ExtensionAPIPersistent {
}
filename = DownloadPaths.sanitize(filename);
- picker.init(activeTab.ownerGlobal, title, Ci.nsIFilePicker.modeSave);
+ picker.init(
+ activeTab.ownerGlobal.browsingContext,
+ title,
+ Ci.nsIFilePicker.modeSave
+ );
picker.appendFilter("PDF", "*.pdf");
picker.defaultExtension = "pdf";
picker.defaultString = filename;
diff --git a/browser/components/extensions/parent/ext-topSites.js b/browser/components/extensions/parent/ext-topSites.js
index 1400a7c236..6ef6a49287 100644
--- a/browser/components/extensions/parent/ext-topSites.js
+++ b/browser/components/extensions/parent/ext-topSites.js
@@ -19,7 +19,7 @@ const TOPSITES_FEED_PREF =
"browser.newtabpage.activity-stream.feeds.system.topsites";
this.topSites = class extends ExtensionAPI {
- getAPI(context) {
+ getAPI() {
return {
topSites: {
get: async function (options) {
diff --git a/browser/components/extensions/parent/ext-url-overrides.js b/browser/components/extensions/parent/ext-url-overrides.js
index cff36a8762..5be610a637 100644
--- a/browser/components/extensions/parent/ext-url-overrides.js
+++ b/browser/components/extensions/parent/ext-url-overrides.js
@@ -150,7 +150,7 @@ this.urlOverrides = class extends ExtensionAPI {
}
}
- async onManifestEntry(entryName) {
+ async onManifestEntry() {
let { extension } = this;
let { manifest } = extension;
diff --git a/browser/components/extensions/parent/ext-windows.js b/browser/components/extensions/parent/ext-windows.js
index 3691ecdf56..cd715c0a3e 100644
--- a/browser/components/extensions/parent/ext-windows.js
+++ b/browser/components/extensions/parent/ext-windows.js
@@ -112,7 +112,7 @@ this.windows = class extends ExtensionAPIPersistent {
// Keep track of the last windowId used to fire an onFocusChanged event
let lastOnFocusChangedWindowId;
- let listener = event => {
+ let listener = () => {
// Wait a tick to avoid firing a superfluous WINDOW_ID_NONE
// event when switching focus between two Firefox windows.
Promise.resolve().then(() => {
diff --git a/browser/components/extensions/test/AppUiTestDelegate.sys.mjs b/browser/components/extensions/test/AppUiTestDelegate.sys.mjs
index f68392800d..6bfb36bfd9 100644
--- a/browser/components/extensions/test/AppUiTestDelegate.sys.mjs
+++ b/browser/components/extensions/test/AppUiTestDelegate.sys.mjs
@@ -112,7 +112,7 @@ async function promisePopupShown(popup) {
if (popup.state == "open") {
resolve();
} else {
- let onPopupShown = event => {
+ let onPopupShown = () => {
popup.removeEventListener("popupshown", onPopupShown);
resolve();
};
@@ -129,7 +129,7 @@ function awaitBrowserLoaded(browser) {
return Promise.resolve();
}
return new Promise(resolve => {
- const listener = ev => {
+ const listener = () => {
if (browser.currentURI.spec === "about:blank") {
return;
}
diff --git a/browser/components/extensions/test/browser/browser.toml b/browser/components/extensions/test/browser/browser.toml
index c185ebd4e7..417bad7e31 100644
--- a/browser/components/extensions/test/browser/browser.toml
+++ b/browser/components/extensions/test/browser/browser.toml
@@ -49,7 +49,7 @@ support-files = [
"../../../../../toolkit/components/reader/test/readerModeNonArticle.html",
"../../../../../toolkit/components/reader/test/readerModeArticle.html",
]
-skip-if = ["os == 'linux' && asan"] # Bug 1721945 - Software WebRender
+skip-if = ["os == 'linux' && os_version == '18.04' && asan"] # Bug 1721945 - Software WebRender
["browser_AMBrowserExtensionsImport.js"]
@@ -75,12 +75,12 @@ disabled = "bug 1438663 # same focus issue as Bug 1438663"
["browser_ext_browserAction_context.js"]
https_first_disabled = true
skip-if = [
- "os == 'linux' && debug", # Bug 1504096
- "os == 'linux' && socketprocess_networking",
+ "os == 'linux' && os_version == '18.04' && debug", # Bug 1504096
+ "os == 'linux' && os_version == '18.04' && socketprocess_networking",
]
["browser_ext_browserAction_contextMenu.js"]
-skip-if = ["os == 'linux'"] # bug 1369197
+skip-if = ["os == 'linux' && os_version == '18.04'"] # bug 1369197
["browser_ext_browserAction_disabled.js"]
@@ -132,8 +132,9 @@ skip-if = ["debug"] # Bug 1522164
["browser_ext_commands_execute_page_action.js"]
skip-if = [
- "verify && os == 'linux'",
- "verify && os == 'mac'",
+ "os == 'linux' && os_version == '18.04' && verify",
+ "apple_catalina && verify",
+ "apple_silicon && verify",
]
["browser_ext_commands_execute_sidebar_action.js"]
@@ -230,8 +231,9 @@ support-files = ["../../../../../devtools/client/inspector/extensions/test/head_
["browser_ext_find.js"]
https_first_disabled = true
skip-if = [
- "verify && os == 'linux'",
- "verify && os == 'mac'",
+ "os == 'linux' && os_version == '18.04' && verify",
+ "apple_catalina && verify",
+ "apple_silicon && verify",
]
["browser_ext_getViews.js"]
@@ -303,8 +305,9 @@ https_first_disabled = true
["browser_ext_openPanel.js"]
skip-if = [
- "verify && !debug && os == 'linux'",
- "verify && !debug && os == 'mac'",
+ "os == 'linux' && os_version == '18.04' && !debug && verify",
+ "apple_catalina && !debug && verify",
+ "apple_silicon && !debug && verify",
]
["browser_ext_optionsPage_activity.js"]
@@ -328,14 +331,17 @@ https_first_disabled = true
["browser_ext_pageAction_context.js"]
https_first_disabled = true
-skip-if = ["verify && !debug && os == 'linux'"]
+skip-if = ["os == 'linux' && os_version == '18.04' && !debug && verify"]
["browser_ext_pageAction_contextMenu.js"]
["browser_ext_pageAction_popup.js"]
["browser_ext_pageAction_popup_resize.js"]
-skip-if = ["verify && debug && os == 'mac'"]
+skip-if = [
+ "apple_catalina && debug && verify",
+ "apple_silicon && debug && verify",
+]
["browser_ext_pageAction_show_matches.js"]
https_first_disabled = true
@@ -487,8 +493,9 @@ https_first_disabled = true
["browser_ext_tabs_discard_reversed.js"]
https_first_disabled = true
skip-if = [
- "os == 'mac'", # Bug 1722607
- "os == 'linux' && debug", #Bug 1722607
+ "apple_silicon", # Bug 1722607
+ "apple_catalina", # Bug 1722607
+ "os == 'linux' && os_version == '18.04' && debug", #Bug 1722607
]
["browser_ext_tabs_discarded.js"]
@@ -641,7 +648,10 @@ https_first_disabled = true
["browser_ext_webRequest_error_after_stopped_or_closed.js"]
["browser_ext_webrtc.js"]
-skip-if = ["os == 'mac'"] # Bug 1565738
+skip-if = [
+ "apple_catalina", # Bug 1565738
+ "apple_silicon", # Bug 1565738
+]
["browser_ext_windows.js"]
https_first_disabled = true
@@ -650,7 +660,10 @@ https_first_disabled = true
https_first_disabled = true
["browser_ext_windows_create.js"]
-skip-if = ["verify && os == 'mac'"]
+skip-if = [
+ "apple_catalina && verify",
+ "apple_silicon && verify",
+]
tags = "fullscreen"
["browser_ext_windows_create_cookieStoreId.js"]
@@ -670,13 +683,15 @@ https_first_disabled = true
["browser_ext_windows_size.js"]
skip-if = [
- "os == 'mac'",
+ "apple_catalina",
+ "apple_silicon",
"os == 'linux' && os_version == '18.04' && debug", # Fails when windows are randomly opened in fullscreen mode, Bug 1638027
]
["browser_ext_windows_update.js"]
skip-if = [
- "verify && os == 'mac'",
+ "apple_catalina && verify",
+ "apple_silicon && verify",
"os == 'mac' && os_version == '10.15' && debug", # Bug 1780998
"os == 'linux' && os_version == '18.04'", # Bug 1533982 for linux1804
]
diff --git a/browser/components/extensions/test/browser/browser_AMBrowserExtensionsImport.js b/browser/components/extensions/test/browser/browser_AMBrowserExtensionsImport.js
index a680edb454..515875daac 100644
--- a/browser/components/extensions/test/browser/browser_AMBrowserExtensionsImport.js
+++ b/browser/components/extensions/test/browser/browser_AMBrowserExtensionsImport.js
@@ -43,7 +43,7 @@ const ADDON_SEARCH_RESULTS = {};
const mockAddonRepository = ({ addons = [] }) => {
return {
- async getMappedAddons(browserID, extensionIDs) {
+ async getMappedAddons() {
return Promise.resolve({
addons,
matchedIDs: [],
@@ -136,7 +136,7 @@ add_task(async function test_appmenu_notification() {
"expected a notification about the imported add-ons"
);
- const endedPromises = result.importedAddonIDs.map(id =>
+ const endedPromises = result.importedAddonIDs.map(() =>
AddonTestUtils.promiseInstallEvent("onInstallEnded")
);
const menuPanelHidden = BrowserTestUtils.waitForEvent(
diff --git a/browser/components/extensions/test/browser/browser_ExtensionControlledPopup.js b/browser/components/extensions/test/browser/browser_ExtensionControlledPopup.js
index 2e1e178215..11a3058444 100644
--- a/browser/components/extensions/test/browser/browser_ExtensionControlledPopup.js
+++ b/browser/components/extensions/test/browser/browser_ExtensionControlledPopup.js
@@ -13,7 +13,7 @@ ChromeUtils.defineESModuleGetters(this, {
"resource://gre/modules/ExtensionSettingsStore.sys.mjs",
});
-function createMarkup(doc, popup) {
+function createMarkup(doc) {
let panel = ExtensionControlledPopup._getAndMaybeCreatePanel(doc);
let popupnotification = doc.createXULElement("popupnotification");
let attributes = {
@@ -98,7 +98,7 @@ add_task(async function testExtensionControlledPopup() {
return popupShown;
}
- function closePopupWithAction(action, extensionId) {
+ function closePopupWithAction(action) {
let done;
if (action == "ignore") {
panel.hidePopup();
diff --git a/browser/components/extensions/test/browser/browser_ext_browserAction_click_types.js b/browser/components/extensions/test/browser/browser_ext_browserAction_click_types.js
index 6614bb62c2..e891901ed9 100644
--- a/browser/components/extensions/test/browser/browser_ext_browserAction_click_types.js
+++ b/browser/components/extensions/test/browser/browser_ext_browserAction_click_types.js
@@ -145,7 +145,7 @@ async function test_clickData_reset({ manifest_version }) {
browser.test.sendMessage("onClick", info);
}
- function onPageActionClicked(tab, info) {
+ function onPageActionClicked() {
browser.test.sendMessage("open-popup");
}
diff --git a/browser/components/extensions/test/browser/browser_ext_browserAction_context.js b/browser/components/extensions/test/browser/browser_ext_browserAction_context.js
index c1f8184c78..e5d315c5d2 100644
--- a/browser/components/extensions/test/browser/browser_ext_browserAction_context.js
+++ b/browser/components/extensions/test/browser/browser_ext_browserAction_context.js
@@ -258,7 +258,7 @@ let tabSwitchTestData = {
"2.png": imageBuffer,
},
- getTests: function (tabs, windows) {
+ getTests: function (tabs) {
let manifest = browser.runtime.getManifest();
let { manifest_version } = manifest;
const action = manifest_version < 3 ? "browserAction" : "action";
@@ -491,7 +491,7 @@ add_task(async function testDefaultTitle() {
"icon.png": imageBuffer,
},
- getTests: function (tabs, windows) {
+ getTests: function (tabs) {
let details = [
{
title: "Foo Extension",
diff --git a/browser/components/extensions/test/browser/browser_ext_browserAction_contextMenu.js b/browser/components/extensions/test/browser/browser_ext_browserAction_contextMenu.js
index 9544ed43a4..8e89457904 100644
--- a/browser/components/extensions/test/browser/browser_ext_browserAction_contextMenu.js
+++ b/browser/components/extensions/test/browser/browser_ext_browserAction_contextMenu.js
@@ -452,7 +452,7 @@ async function browseraction_contextmenu_remove_extension_helper() {
Services.prompt = prompt;
});
- async function testContextMenu(menuId, customizing) {
+ async function testContextMenu(menuId) {
info(`Open browserAction context menu in ${menuId}`);
let confirmArgs = promptService.confirmArgs();
let menu = await openContextMenu(menuId, buttonId);
diff --git a/browser/components/extensions/test/browser/browser_ext_browserAction_experiment.js b/browser/components/extensions/test/browser/browser_ext_browserAction_experiment.js
index d33553146e..dbf0b7efbd 100644
--- a/browser/components/extensions/test/browser/browser_ext_browserAction_experiment.js
+++ b/browser/components/extensions/test/browser/browser_ext_browserAction_experiment.js
@@ -49,7 +49,7 @@ let fooExperimentFiles = {
/* globals ExtensionAPI */
"parent.js": () => {
this.foo = class extends ExtensionAPI {
- getAPI(context) {
+ getAPI() {
return {
experiments: {
foo: {
@@ -65,7 +65,7 @@ let fooExperimentFiles = {
"child.js": () => {
this.foo = class extends ExtensionAPI {
- getAPI(context) {
+ getAPI() {
return {
experiments: {
foo: {
diff --git a/browser/components/extensions/test/browser/browser_ext_browserAction_pageAction_icon_permissions.js b/browser/components/extensions/test/browser/browser_ext_browserAction_pageAction_icon_permissions.js
index 5a94a0dde1..71f615c91d 100644
--- a/browser/components/extensions/test/browser/browser_ext_browserAction_pageAction_icon_permissions.js
+++ b/browser/components/extensions/test/browser/browser_ext_browserAction_pageAction_icon_permissions.js
@@ -21,7 +21,7 @@ add_task(async function testInvalidIconSizes() {
let promises = [];
for (let api of ["pageAction", "browserAction"]) {
// helper function to run setIcon and check if it fails
- let assertSetIconThrows = function (detail, error, message) {
+ let assertSetIconThrows = function (detail) {
detail.tabId = tabId;
browser.test.assertThrows(
() => browser[api].setIcon(detail),
@@ -203,7 +203,7 @@ add_task(async function testSecureManifestURLsDenied() {
for (let api of apis) {
info(`TEST ${api} icon url: ${url}`);
- let matchURLForbidden = url => ({
+ let matchURLForbidden = () => ({
message: new RegExp(`match the format "strictRelativeUrl"`),
});
diff --git a/browser/components/extensions/test/browser/browser_ext_browserAction_popup_preload.js b/browser/components/extensions/test/browser/browser_ext_browserAction_popup_preload.js
index 4c47c1b13b..c640f63ab7 100644
--- a/browser/components/extensions/test/browser/browser_ext_browserAction_popup_preload.js
+++ b/browser/components/extensions/test/browser/browser_ext_browserAction_popup_preload.js
@@ -136,7 +136,7 @@ add_task(async function testBrowserActionClickCanceled() {
widget.node,
"mouseup",
false,
- event => {
+ () => {
isnot(browserAction.pendingPopup, null, "Pending popup was not cleared");
isnot(
browserAction.pendingPopupTimeout,
@@ -279,7 +279,7 @@ add_task(async function testBrowserActionDisabled() {
widget.node,
"mouseup",
false,
- event => {
+ () => {
is(browserAction.pendingPopup, null, "Have no pending popup");
is(
browserAction.pendingPopupTimeout,
diff --git a/browser/components/extensions/test/browser/browser_ext_contextMenus.js b/browser/components/extensions/test/browser/browser_ext_contextMenus.js
index c816c89f82..77e4bf0827 100644
--- a/browser/components/extensions/test/browser/browser_ext_contextMenus.js
+++ b/browser/components/extensions/test/browser/browser_ext_contextMenus.js
@@ -391,7 +391,7 @@ add_task(async function () {
checkClickInfo(result);
// Select some text
- await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function (arg) {
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], async function () {
let doc = content.document;
let range = doc.createRange();
let selection = content.getSelection();
@@ -459,7 +459,7 @@ add_task(async function () {
checkClickInfo(result);
// Select a lot of text
- await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function (arg) {
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
let doc = content.document;
let range = doc.createRange();
let selection = content.getSelection();
@@ -501,7 +501,7 @@ add_task(async function () {
// Select a lot of text, excercise the editable element code path in
// the Browser:GetSelection handler.
- await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function (arg) {
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
let doc = content.document;
let node = doc.getElementById("editabletext");
// content.js handleContentContextMenu fails intermittently without focus.
diff --git a/browser/components/extensions/test/browser/browser_ext_contextMenus_bookmarks.js b/browser/components/extensions/test/browser/browser_ext_contextMenus_bookmarks.js
index 1e95899513..24411731f7 100644
--- a/browser/components/extensions/test/browser/browser_ext_contextMenus_bookmarks.js
+++ b/browser/components/extensions/test/browser/browser_ext_contextMenus_bookmarks.js
@@ -20,7 +20,7 @@ function bookmarkContextMenuExtension() {
{
title: CONTEXT_ENTRY_LABEL,
contexts: ["bookmark"],
- onclick: (info, tab) => {
+ onclick: info => {
browser.test.sendMessage(`clicked`, info.bookmarkId);
},
},
diff --git a/browser/components/extensions/test/browser/browser_ext_contextMenus_commands.js b/browser/components/extensions/test/browser/browser_ext_contextMenus_commands.js
index 5a8f1db208..d643dda663 100644
--- a/browser/components/extensions/test/browser/browser_ext_contextMenus_commands.js
+++ b/browser/components/extensions/test/browser/browser_ext_contextMenus_commands.js
@@ -25,7 +25,7 @@ add_task(async function test_actions_context_menu() {
contexts: ["all"],
command: "_execute_sidebar_action",
});
- browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
+ browser.tabs.onUpdated.addListener(tabId => {
browser.pageAction.show(tabId);
});
browser.contextMenus.onClicked.addListener(() => {
diff --git a/browser/components/extensions/test/browser/browser_ext_contextMenus_targetUrlPatterns.js b/browser/components/extensions/test/browser/browser_ext_contextMenus_targetUrlPatterns.js
index b28487064f..0f353600d7 100644
--- a/browser/components/extensions/test/browser/browser_ext_contextMenus_targetUrlPatterns.js
+++ b/browser/components/extensions/test/browser/browser_ext_contextMenus_targetUrlPatterns.js
@@ -72,7 +72,7 @@ add_task(async function unsupportedSchemes() {
},
];
- async function testScript(testcases) {
+ async function testScript() {
let testcase;
browser.contextMenus.onShown.addListener(({ menuIds, linkUrl }) => {
diff --git a/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow.js b/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow.js
index 0cfcb33ab3..55acbadad4 100644
--- a/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow.js
+++ b/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow.js
@@ -464,7 +464,7 @@ add_task(async function test_devtools_inspectedWindow_eval_target_lifecycle() {
);
function devtools_page() {
- browser.test.onMessage.addListener(async (msg, ...args) => {
+ browser.test.onMessage.addListener(async msg => {
if (msg !== "inspectedWindow-eval-requests") {
browser.test.fail(`Unexpected test message received: ${msg}`);
return;
diff --git a/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_eval_bindings.js b/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_eval_bindings.js
index a5f910e698..f0aeb891fd 100644
--- a/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_eval_bindings.js
+++ b/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_eval_bindings.js
@@ -231,7 +231,7 @@ add_task(async function test_devtools_inspectedWindow_eval_bindings() {
info("Waiting for the object properties to be displayed");
// If this is the case, we wait for the properties to be fetched and displayed.
await new Promise(resolve => {
- const observer = new MutationObserver(mutations => {
+ const observer = new MutationObserver(() => {
resolve();
observer.disconnect();
});
diff --git a/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_reload.js b/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_reload.js
index 9f7d452a2c..116d063f50 100644
--- a/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_reload.js
+++ b/browser/components/extensions/test/browser/browser_ext_devtools_inspectedWindow_reload.js
@@ -270,7 +270,7 @@ add_task(
background,
devtoolsPage,
closeToolbox: false,
- testCase: async function (extension, tab, toolbox) {
+ testCase: async function (extension, tab) {
info("Get the initial user agent");
const initialUserAgent = await SpecialPowers.spawn(
gBrowser.selectedBrowser,
diff --git a/browser/components/extensions/test/browser/browser_ext_devtools_page.js b/browser/components/extensions/test/browser/browser_ext_devtools_page.js
index 8f2700c657..492825965a 100644
--- a/browser/components/extensions/test/browser/browser_ext_devtools_page.js
+++ b/browser/components/extensions/test/browser/browser_ext_devtools_page.js
@@ -202,11 +202,11 @@ add_task(async function test_devtools_page_and_extension_tab_messaging() {
}
function devtools_page() {
- browser.runtime.onConnect.addListener(port => {
+ browser.runtime.onConnect.addListener(() => {
browser.test.sendMessage("devtools_page_onconnect");
});
- browser.runtime.onMessage.addListener((msg, sender) => {
+ browser.runtime.onMessage.addListener(() => {
browser.test.sendMessage("devtools_page_onmessage");
});
diff --git a/browser/components/extensions/test/browser/browser_ext_menus_accesskey.js b/browser/components/extensions/test/browser/browser_ext_menus_accesskey.js
index 88c89902ac..8424dc2813 100644
--- a/browser/components/extensions/test/browser/browser_ext_menus_accesskey.js
+++ b/browser/components/extensions/test/browser/browser_ext_menus_accesskey.js
@@ -185,7 +185,7 @@ add_task(async function accesskeys_selection() {
await extension.startup();
// Select all
- await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function (arg) {
+ await SpecialPowers.spawn(gBrowser.selectedBrowser, [], function () {
let doc = content.document;
let range = doc.createRange();
let selection = content.getSelection();
diff --git a/browser/components/extensions/test/browser/browser_ext_menus_targetElement.js b/browser/components/extensions/test/browser/browser_ext_menus_targetElement.js
index abfbf26a05..4fc9ebba82 100644
--- a/browser/components/extensions/test/browser/browser_ext_menus_targetElement.js
+++ b/browser/components/extensions/test/browser/browser_ext_menus_targetElement.js
@@ -29,7 +29,7 @@ async function loadExtensionAndTab() {
}
async function background() {
- browser.menus.onShown.addListener(async (info, tab) => {
+ browser.menus.onShown.addListener(async info => {
browser.test.sendMessage("onShownMenu", info.targetElementId);
});
await browser.tabs.executeScript({ file: "contentScript.js" });
@@ -79,7 +79,7 @@ add_task(async function required_permission() {
// Load another extension to verify that the permission from the first
// extension does not enable the "targetElementId" parameter.
function background() {
- browser.contextMenus.onShown.addListener((info, tab) => {
+ browser.contextMenus.onShown.addListener(info => {
browser.test.assertEq(
undefined,
info.targetElementId,
diff --git a/browser/components/extensions/test/browser/browser_ext_mousewheel_zoom.js b/browser/components/extensions/test/browser/browser_ext_mousewheel_zoom.js
index d558400a7e..9c5f447a76 100644
--- a/browser/components/extensions/test/browser/browser_ext_mousewheel_zoom.js
+++ b/browser/components/extensions/test/browser/browser_ext_mousewheel_zoom.js
@@ -40,7 +40,7 @@ async function test_mousewheel_zoom(test) {
function contentScript() {
// eslint-disable-next-line mozilla/balanced-listeners
- document.addEventListener("mousedown", e => {
+ document.addEventListener("mousedown", () => {
// Send the zoom level back as a "zoom" message.
const zoom = SpecialPowers.getFullZoom(window).toFixed(2);
browser.test.sendMessage("zoom", zoom);
@@ -49,7 +49,7 @@ async function test_mousewheel_zoom(test) {
function sidebarContentScript() {
// eslint-disable-next-line mozilla/balanced-listeners
- document.addEventListener("mousedown", e => {
+ document.addEventListener("mousedown", () => {
// Send the zoom level back as a "zoom" message.
const zoom = SpecialPowers.getFullZoom(window).toFixed(2);
browser.test.sendMessage("zoom", zoom);
diff --git a/browser/components/extensions/test/browser/browser_ext_openPanel.js b/browser/components/extensions/test/browser/browser_ext_openPanel.js
index 105cdc834b..ed96bf2520 100644
--- a/browser/components/extensions/test/browser/browser_ext_openPanel.js
+++ b/browser/components/extensions/test/browser/browser_ext_openPanel.js
@@ -4,7 +4,7 @@
add_task(async function test_openPopup_requires_user_interaction() {
async function backgroundScript() {
- browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tabInfo) => {
+ browser.tabs.onUpdated.addListener(async (tabId, changeInfo) => {
if (changeInfo.status != "complete") {
return;
}
diff --git a/browser/components/extensions/test/browser/browser_ext_optionsPage_modals.js b/browser/components/extensions/test/browser/browser_ext_optionsPage_modals.js
index 809a5605c0..0c3d150c91 100644
--- a/browser/components/extensions/test/browser/browser_ext_optionsPage_modals.js
+++ b/browser/components/extensions/test/browser/browser_ext_optionsPage_modals.js
@@ -2,6 +2,41 @@
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
+const { PromptTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/PromptTestUtils.sys.mjs"
+);
+
+async function waitForExtensionModalPrompt(extension) {
+ const dialog = await PromptTestUtils.waitForPrompt(gBrowser.selectedBrowser, {
+ modalType: Ci.nsIPrompt.MODAL_TYPE_CONTENT,
+ });
+ ok(dialog, "Got an active modal prompt dialog as expected");
+ Assert.equal(
+ dialog?.args.promptPrincipal.addonId,
+ extension.id,
+ "Got a prompt associated to the expected extension id"
+ );
+
+ const promptTitle = dialog?.ui.infoTitle.textContent;
+ ok(
+ /The page at TestExtName says:/.test(promptTitle),
+ `Got the expect title on the modal prompt dialog: "${promptTitle}"`
+ );
+
+ return {
+ async closeModalPrompt() {
+ info("Close the tab modal prompt");
+ await PromptTestUtils.handlePrompt(dialog);
+ },
+ assertClosedModalPrompt() {
+ ok(
+ !dialog.args.promptActive,
+ "modal prompt dialog has been closed as expected"
+ );
+ },
+ };
+}
+
add_task(async function test_tab_options_modals() {
function backgroundScript() {
browser.runtime.openOptionsPage();
@@ -26,6 +61,7 @@ add_task(async function test_tab_options_modals() {
options_ui: {
page: "options.html",
},
+ name: "TestExtName",
},
files: {
"options.html": `<!DOCTYPE html>
@@ -42,57 +78,15 @@ add_task(async function test_tab_options_modals() {
await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:addons");
+ const testPromptPromise = waitForExtensionModalPrompt(extension);
await extension.startup();
- const onceModalOpened = new Promise(resolve => {
- const aboutAddonsBrowser = gBrowser.selectedBrowser;
-
- aboutAddonsBrowser.addEventListener(
- "DOMWillOpenModalDialog",
- function onModalDialog(event) {
- // Wait for the next event tick to make sure the remaining part of the
- // testcase runs after the dialog gets opened.
- SimpleTest.executeSoon(resolve);
- },
- { once: true, capture: true }
- );
- });
-
info("Wait the options_ui modal to be opened");
- await onceModalOpened;
-
- const optionsBrowser = getInlineOptionsBrowser(gBrowser.selectedBrowser);
-
- // The stack that contains the tabmodalprompt elements is the parent of
- // the extensions options_ui browser element.
- let stack = optionsBrowser.parentNode;
-
- let dialogs = stack.querySelectorAll("tabmodalprompt");
- Assert.equal(
- dialogs.length,
- 1,
- "Expect a tab modal opened for the about addons tab"
- );
-
- // Verify that the expected stylesheets have been applied on the
- // tabmodalprompt element (See Bug 1550529).
- const tabmodalStyle = dialogs[0].ownerGlobal.getComputedStyle(dialogs[0]);
- is(
- tabmodalStyle["background-color"],
- "rgba(26, 26, 26, 0.5)",
- "Got the expected styles applied to the tabmodalprompt"
- );
-
- info("Close the tab modal prompt");
- dialogs[0].querySelector(".tabmodalprompt-button0").click();
+ const testModalPrompt = await testPromptPromise;
+ testModalPrompt.closeModalPrompt();
await extension.awaitFinish("options-ui-modals");
-
- Assert.equal(
- stack.querySelectorAll("tabmodalprompt").length,
- 0,
- "Expect the tab modal to be closed"
- );
+ testModalPrompt.assertClosedModalPrompt();
BrowserTestUtils.removeTab(gBrowser.selectedTab);
diff --git a/browser/components/extensions/test/browser/browser_ext_pageAction_click_types.js b/browser/components/extensions/test/browser/browser_ext_pageAction_click_types.js
index 0168ea0ab2..0ca9be6bfa 100644
--- a/browser/components/extensions/test/browser/browser_ext_pageAction_click_types.js
+++ b/browser/components/extensions/test/browser/browser_ext_pageAction_click_types.js
@@ -146,7 +146,7 @@ async function test_clickData_reset(testAsNonPersistent = false) {
files: {
"background.js": async function background() {
- function onBrowserActionClicked(tab, info) {
+ function onBrowserActionClicked() {
// openPopup requires user interaction, such as a browser action click.
browser.pageAction.openPopup();
}
diff --git a/browser/components/extensions/test/browser/browser_ext_popup_focus.js b/browser/components/extensions/test/browser/browser_ext_popup_focus.js
index 4cf46f2be5..16e4f05dbb 100644
--- a/browser/components/extensions/test/browser/browser_ext_popup_focus.js
+++ b/browser/components/extensions/test/browser/browser_ext_popup_focus.js
@@ -22,7 +22,7 @@ add_task(async function testPageActionFocus() {
"popup.js": function () {
window.addEventListener(
"focus",
- event => {
+ () => {
browser.test.log("extension popup received focus event");
browser.test.assertEq(
true,
@@ -63,7 +63,7 @@ add_task(async function testBrowserActionFocus() {
"popup.js": function () {
window.addEventListener(
"focus",
- event => {
+ () => {
browser.test.log("extension popup received focus event");
browser.test.assertEq(
true,
diff --git a/browser/components/extensions/test/browser/browser_ext_search_favicon.js b/browser/components/extensions/test/browser/browser_ext_search_favicon.js
index 4e48dd55fa..474ab37e20 100644
--- a/browser/components/extensions/test/browser/browser_ext_search_favicon.js
+++ b/browser/components/extensions/test/browser/browser_ext_search_favicon.js
@@ -25,18 +25,18 @@ server.registerPathHandler("/ico.png", (request, response) => {
response.write(atob(HTTP_ICON_DATA));
});
-function promiseEngineIconLoaded(engineName) {
- return TestUtils.topicObserved(
+async function promiseEngineIconLoaded(engineName) {
+ await TestUtils.topicObserved(
"browser-search-engine-modified",
(engine, verb) => {
engine.QueryInterface(Ci.nsISearchEngine);
- return (
- verb == "engine-changed" &&
- engine.name == engineName &&
- engine.getIconURL()
- );
+ return verb == "engine-changed" && engine.name == engineName;
}
);
+ Assert.ok(
+ await Services.search.getEngineByName(engineName).getIconURL(),
+ "Should have a valid icon URL"
+ );
}
add_task(async function test_search_favicon() {
diff --git a/browser/components/extensions/test/browser/browser_ext_sessions_getRecentlyClosed_tabs.js b/browser/components/extensions/test/browser/browser_ext_sessions_getRecentlyClosed_tabs.js
index 4a513f5131..71c30ccf5b 100644
--- a/browser/components/extensions/test/browser/browser_ext_sessions_getRecentlyClosed_tabs.js
+++ b/browser/components/extensions/test/browser/browser_ext_sessions_getRecentlyClosed_tabs.js
@@ -247,7 +247,7 @@ add_task(
info("Open the non web controlled page in _blank target");
let onNewTabOpened = new Promise(resolve =>
win.gBrowser.addTabsProgressListener({
- onStateChange(browser, webProgress, request, stateFlags, status) {
+ onStateChange(browser, webProgress, request, stateFlags) {
if (stateFlags & Ci.nsIWebProgressListener.STATE_START) {
win.gBrowser.removeTabsProgressListener(this);
resolve(win.gBrowser.getTabForBrowser(browser));
diff --git a/browser/components/extensions/test/browser/browser_ext_sessions_restore.js b/browser/components/extensions/test/browser/browser_ext_sessions_restore.js
index 39057519ed..1006fab89a 100644
--- a/browser/components/extensions/test/browser/browser_ext_sessions_restore.js
+++ b/browser/components/extensions/test/browser/browser_ext_sessions_restore.js
@@ -27,7 +27,7 @@ add_task(async function test_sessions_restore() {
});
} else if (msg == "restore-reject") {
browser.sessions.restore("not-a-valid-session-id").then(
- sessions => {
+ () => {
browser.test.fail("restore rejected with an invalid sessionId");
},
error => {
diff --git a/browser/components/extensions/test/browser/browser_ext_sessions_restoreTab.js b/browser/components/extensions/test/browser/browser_ext_sessions_restoreTab.js
index 679e1fbd6c..c89e9d39dc 100644
--- a/browser/components/extensions/test/browser/browser_ext_sessions_restoreTab.js
+++ b/browser/components/extensions/test/browser/browser_ext_sessions_restoreTab.js
@@ -16,7 +16,7 @@ ChromeUtils.defineESModuleGetters(this, {
add_task(async function test_restoringModifiedTab() {
function background() {
browser.tabs.create({ url: "http://example.com/" });
- browser.test.onMessage.addListener((msg, filter) => {
+ browser.test.onMessage.addListener(msg => {
if (msg == "change-tab") {
browser.tabs.executeScript({ code: 'location.href += "?changedTab";' });
}
@@ -83,7 +83,7 @@ add_task(async function test_restoringModifiedTab() {
add_task(async function test_restoringClosedTabWithTooLargeIndex() {
function background() {
- browser.test.onMessage.addListener(async (msg, filter) => {
+ browser.test.onMessage.addListener(async msg => {
if (msg != "restoreTab") {
return;
}
diff --git a/browser/components/extensions/test/browser/browser_ext_sessions_window_tab_value.js b/browser/components/extensions/test/browser/browser_ext_sessions_window_tab_value.js
index b21b59fe8c..f6482ed709 100644
--- a/browser/components/extensions/test/browser/browser_ext_sessions_window_tab_value.js
+++ b/browser/components/extensions/test/browser/browser_ext_sessions_window_tab_value.js
@@ -134,7 +134,7 @@ add_task(async function test_sessions_tab_value_persistence() {
// Wait until the newly created tab has completed loading or it will still have
// about:blank url when it gets removed and will not appear in the removed tabs history.
browser.webNavigation.onCompleted.addListener(
- async function newTabListener(details) {
+ async function newTabListener() {
browser.webNavigation.onCompleted.removeListener(newTabListener);
let tabs = await browser.tabs.query({ currentWindow: true });
diff --git a/browser/components/extensions/test/browser/browser_ext_settings_overrides_default_search.js b/browser/components/extensions/test/browser/browser_ext_settings_overrides_default_search.js
index 74eaa6e634..083f6be393 100644
--- a/browser/components/extensions/test/browser/browser_ext_settings_overrides_default_search.js
+++ b/browser/components/extensions/test/browser/browser_ext_settings_overrides_default_search.js
@@ -7,6 +7,7 @@ ChromeUtils.defineESModuleGetters(this, {
AddonManager: "resource://gre/modules/AddonManager.sys.mjs",
AddonTestUtils: "resource://testing-common/AddonTestUtils.sys.mjs",
SearchTestUtils: "resource://testing-common/SearchTestUtils.sys.mjs",
+ SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
TelemetryTestUtils: "resource://testing-common/TelemetryTestUtils.sys.mjs",
});
@@ -21,14 +22,19 @@ SearchTestUtils.init(this);
const DEFAULT_ENGINE = {
id: "basic",
name: "basic",
- loadPath: "[addon]basic@search.mozilla.org",
- submissionUrl:
- "https://mochi.test:8888/browser/browser/components/search/test/browser/?search=&foo=1",
+ loadPath: SearchUtils.newSearchConfigEnabled
+ ? "[app]basic@search.mozilla.org"
+ : "[addon]basic@search.mozilla.org",
+ submissionUrl: SearchUtils.newSearchConfigEnabled
+ ? "https://mochi.test:8888/browser/browser/components/search/test/browser/?foo=1&search="
+ : "https://mochi.test:8888/browser/browser/components/search/test/browser/?search=&foo=1",
};
const ALTERNATE_ENGINE = {
id: "simple",
name: "Simple Engine",
- loadPath: "[addon]simple@search.mozilla.org",
+ loadPath: SearchUtils.newSearchConfigEnabled
+ ? "[app]simple@search.mozilla.org"
+ : "[addon]simple@search.mozilla.org",
submissionUrl: "https://example.com/?sourceId=Mozilla-search&search=",
};
const ALTERNATE2_ENGINE = {
@@ -97,7 +103,11 @@ add_setup(async function () {
await SearchTestUtils.useMochitestEngines(searchExtensions);
SearchTestUtils.useMockIdleService();
- let response = await fetch(`resource://search-extensions/engines.json`);
+ let response = await fetch(
+ SearchUtils.newSearchConfigEnabled
+ ? `resource://search-extensions/search-config-v2.json`
+ : `resource://search-extensions/engines.json`
+ );
let json = await response.json();
await SearchTestUtils.updateRemoteSettingsConfig(json.data);
diff --git a/browser/components/extensions/test/browser/browser_ext_sidebarAction.js b/browser/components/extensions/test/browser/browser_ext_sidebarAction.js
index afc1e4f9b9..8498f73071 100644
--- a/browser/components/extensions/test/browser/browser_ext_sidebarAction.js
+++ b/browser/components/extensions/test/browser/browser_ext_sidebarAction.js
@@ -204,14 +204,16 @@ add_task(async function sidebar_isOpen() {
});
add_task(async function testShortcuts() {
- function verifyShortcut(id, commandKey) {
+ function verifyShortcut(id, commandKey, win = window) {
+ const doc = win.document;
// We're just testing the command key since the modifiers have different
// icons on different platforms.
- let menuitem = document.getElementById(
+ let menuitem = doc.getElementById(
`sidebarswitcher_menu_${makeWidgetId(id)}-sidebar-action`
);
+ ok(menuitem, `Expect a menuitem for ${id}`);
ok(menuitem.hasAttribute("key"), "The menu item has a key specified");
- let key = document.getElementById(menuitem.getAttribute("key"));
+ let key = doc.getElementById(menuitem.getAttribute("key"));
ok(key, "The key attribute finds the related key element");
ok(
menuitem.getAttribute("acceltext").endsWith(commandKey),
@@ -219,6 +221,16 @@ add_task(async function testShortcuts() {
);
}
+ async function toggleSwitcherPanel(win = window) {
+ // Open and close the switcher panel to trigger shortcut content rendering.
+ let switcherPanelShown = promisePopupShown(win.SidebarUI._switcherPanel);
+ win.SidebarUI.showSwitcherPanel();
+ await switcherPanelShown;
+ let switcherPanelHidden = promisePopupHidden(win.SidebarUI._switcherPanel);
+ win.SidebarUI.hideSwitcherPanel();
+ await switcherPanelHidden;
+ }
+
let extension1 = ExtensionTestUtils.loadExtension(
getExtData({
commands: {
@@ -244,25 +256,48 @@ add_task(async function testShortcuts() {
await extension1.startup();
await extension1.awaitMessage("sidebar");
+ await extension2.startup();
+ await extension2.awaitMessage("sidebar");
- // Open and close the switcher panel to trigger shortcut content rendering.
- let switcherPanelShown = promisePopupShown(SidebarUI._switcherPanel);
- SidebarUI.showSwitcherPanel();
- await switcherPanelShown;
- let switcherPanelHidden = promisePopupHidden(SidebarUI._switcherPanel);
- SidebarUI.hideSwitcherPanel();
- await switcherPanelHidden;
+ info("Open a second window");
+ const win = await BrowserTestUtils.openNewBrowserWindow();
+ info("Wait for extension2 sidebar to be open in the new window");
+ await extension2.awaitMessage("sidebar");
+
+ info("Toggle switcher panel");
+ await toggleSwitcherPanel();
+ await toggleSwitcherPanel(win);
// Test that the key is set for the extension after the shortcuts are rendered.
verifyShortcut(extension1.id, "I");
-
- await extension2.startup();
- await extension2.awaitMessage("sidebar");
+ verifyShortcut(extension1.id, "I", win);
// Once the switcher panel has been opened new shortcuts should be added
// automatically.
verifyShortcut(extension2.id, "E");
+ verifyShortcut(extension2.id, "E", win);
+
+ // Regression test (see Bug 1881820).
+ info(
+ "Reload the addon and verify the sidebar shortcut still works as expected"
+ );
+ const addon = await AddonManager.getAddonByID(extension1.id);
+ await addon.reload();
+
+ const keysetId1 = `#ext-keyset-id-${makeWidgetId(extension1.id)}`;
+ Assert.equal(
+ window.document.querySelectorAll(keysetId1).length,
+ 1,
+ "Expect no keyset leaked in the 1st window after addon reload"
+ );
+ Assert.equal(
+ win.document.querySelectorAll(keysetId1).length,
+ 1,
+ "Expect no keyset leaked in the 2nd window after addon reload"
+ );
await extension1.unload();
await extension2.unload();
+
+ await BrowserTestUtils.closeWindow(win);
});
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_autoDiscardable.js b/browser/components/extensions/test/browser/browser_ext_tabs_autoDiscardable.js
index 74043e2a3a..acca3638a0 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_autoDiscardable.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_autoDiscardable.js
@@ -23,7 +23,7 @@ add_task(async function test_autoDiscardable() {
);
const { ExtensionError } = ExtensionUtils;
this.experiments = class extends ExtensionAPI {
- getAPI(context) {
+ getAPI() {
return {
experiments: {
async unload() {
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_discard_reversed.js b/browser/components/extensions/test/browser/browser_ext_tabs_discard_reversed.js
index 5fad30a6fb..753b9b67a6 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_discard_reversed.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_discard_reversed.js
@@ -44,7 +44,7 @@ add_task(async function tabs_discarded_load_and_discard() {
title: [],
url: [],
};
- function tabsOnUpdatedAfterLoad(tabId, changeInfo, tab) {
+ function tabsOnUpdatedAfterLoad(tabId, changeInfo) {
browser.test.assertEq(TAB_ID, tabId, "tabId for tabs.onUpdated");
for (let [prop, value] of Object.entries(changeInfo)) {
observedChanges[prop].push(value);
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_duplicate.js b/browser/components/extensions/test/browser/browser_ext_tabs_duplicate.js
index 50c56ea796..f45b285311 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_duplicate.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_duplicate.js
@@ -46,7 +46,7 @@ add_task(async function testDuplicateTab() {
add_task(async function testDuplicateTabLazily() {
async function background() {
let tabLoadComplete = new Promise(resolve => {
- browser.test.onMessage.addListener((message, tabId, result) => {
+ browser.test.onMessage.addListener((message, tabId) => {
if (message == "duplicate-tab-done") {
resolve(tabId);
}
@@ -55,11 +55,7 @@ add_task(async function testDuplicateTabLazily() {
function awaitLoad(tabId) {
return new Promise(resolve => {
- browser.tabs.onUpdated.addListener(function listener(
- tabId_,
- changed,
- tab
- ) {
+ browser.tabs.onUpdated.addListener(function listener(tabId_, changed) {
if (tabId == tabId_ && changed.status == "complete") {
browser.tabs.onUpdated.removeListener(listener);
resolve();
@@ -282,7 +278,7 @@ add_task(async function testDuplicateResolvePromiseRightAway() {
let resolvedRightAway = true;
browser.tabs.onUpdated.addListener(
- (tabId, changeInfo, tab) => {
+ () => {
resolvedRightAway = false;
},
{ urls: [source.url] }
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_events.js b/browser/components/extensions/test/browser/browser_ext_tabs_events.js
index fe9317b4a6..f323d1e55d 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_events.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_events.js
@@ -211,7 +211,7 @@ add_task(async function test_tab_events_incognito_monitored() {
// We have to explicitly wait for the event here, since its timing is
// not predictable.
let promiseAttached = new Promise(resolve => {
- browser.tabs.onAttached.addListener(function listener(tabId) {
+ browser.tabs.onAttached.addListener(function listener() {
browser.tabs.onAttached.removeListener(listener);
resolve();
});
@@ -427,11 +427,7 @@ add_task(async function testTabRemovalEvent() {
function awaitLoad(tabId) {
return new Promise(resolve => {
- browser.tabs.onUpdated.addListener(function listener(
- tabId_,
- changed,
- tab
- ) {
+ browser.tabs.onUpdated.addListener(function listener(tabId_, changed) {
if (tabId == tabId_ && changed.status == "complete") {
browser.tabs.onUpdated.removeListener(listener);
resolve();
@@ -440,7 +436,7 @@ add_task(async function testTabRemovalEvent() {
});
}
- chrome.tabs.onRemoved.addListener((tabId, info) => {
+ chrome.tabs.onRemoved.addListener(tabId => {
browser.test.assertEq(
0,
events.length,
@@ -466,7 +462,7 @@ add_task(async function testTabRemovalEvent() {
let tab = await browser.tabs.create({ url: url });
await awaitLoad(tab.id);
- chrome.tabs.onActivated.addListener(info => {
+ chrome.tabs.onActivated.addListener(() => {
browser.test.assertEq(
1,
events.length,
@@ -522,7 +518,7 @@ add_task(async function testTabCreateRelated() {
);
browser.test.fail("tabMoved was received");
});
- browser.tabs.onRemoved.addListener((tabId, info) => {
+ browser.tabs.onRemoved.addListener(tabId => {
browser.test.assertEq(created, tabId, "removed id same as created");
browser.test.sendMessage("tabRemoved");
});
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js
index c02aef3da9..f79b67f779 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript.js
@@ -77,7 +77,7 @@ add_task(async function testExecuteScript() {
code: "42",
})
.then(
- result => {
+ () => {
browser.test.fail(
"Expected not to be able to execute a script with both file and code"
);
@@ -208,7 +208,7 @@ add_task(async function testExecuteScript() {
code: "window",
})
.then(
- result => {
+ () => {
browser.test.fail(
"Expected error when returning non-structured-clonable object"
);
@@ -232,7 +232,7 @@ add_task(async function testExecuteScript() {
code: "Promise.resolve(window)",
})
.then(
- result => {
+ () => {
browser.test.fail(
"Expected error when returning non-structured-clonable object"
);
@@ -256,7 +256,7 @@ add_task(async function testExecuteScript() {
file: "script3.js",
})
.then(
- result => {
+ () => {
browser.test.fail(
"Expected error when returning non-structured-clonable object"
);
@@ -281,7 +281,7 @@ add_task(async function testExecuteScript() {
code: "42",
})
.then(
- result => {
+ () => {
browser.test.fail(
"Expected error when specifying invalid frame ID"
);
@@ -303,7 +303,7 @@ add_task(async function testExecuteScript() {
code: "42",
})
.then(
- result => {
+ () => {
browser.test.fail(
"Expected error when trying to execute on invalid domain"
);
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_good.js b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_good.js
index e9d008bf92..648a6f7e30 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_good.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_executeScript_good.js
@@ -8,7 +8,7 @@ async function testHasPermission(params) {
let contentSetup = params.contentSetup || (() => Promise.resolve());
async function background(contentSetup) {
- browser.runtime.onMessage.addListener((msg, sender) => {
+ browser.runtime.onMessage.addListener(msg => {
browser.test.assertEq(msg, "script ran", "script ran");
browser.test.notifyPass("executeScript");
});
@@ -158,7 +158,7 @@ add_task(async function testGoodPermissions() {
browser.contextMenus.create({ title: "activeTab", contexts: ["all"] });
return Promise.resolve();
},
- setup: async function (extension) {
+ setup: async function () {
let contextMenu = document.getElementById("contentAreaContextMenu");
let awaitPopupShown = BrowserTestUtils.waitForEvent(
contextMenu,
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_hide.js b/browser/components/extensions/test/browser/browser_ext_tabs_hide.js
index 89c50db692..cb7373451d 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_hide.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_hide.js
@@ -148,7 +148,7 @@ add_task(function test_doorhanger_disable() {
add_task(async function test_tabs_showhide() {
async function background() {
- browser.test.onMessage.addListener(async (msg, data) => {
+ browser.test.onMessage.addListener(async msg => {
switch (msg) {
case "hideall": {
let tabs = await browser.tabs.query({ hidden: false });
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_hide_update.js b/browser/components/extensions/test/browser/browser_ext_tabs_hide_update.js
index 7fbf185704..e840c0d640 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_hide_update.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_hide_update.js
@@ -28,7 +28,7 @@ function getExtension() {
let tabs = await browser.tabs.query({ url: "http://example.com/" });
let testTab = tabs[0];
- browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
+ browser.tabs.onUpdated.addListener((tabId, changeInfo) => {
if ("hidden" in changeInfo) {
browser.test.assertEq(tabId, testTab.id, "correct tab was hidden");
browser.test.assertTrue(changeInfo.hidden, "tab is hidden");
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_insertCSS.js b/browser/components/extensions/test/browser/browser_ext_tabs_insertCSS.js
index 1a4bbd0c74..374902f2f6 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_insertCSS.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_insertCSS.js
@@ -63,7 +63,7 @@ add_task(async function testExecuteScript() {
code: "* { background: rgb(100, 100, 100) !important }",
cssOrigin: "author",
})
- .then(r =>
+ .then(() =>
browser.tabs.insertCSS({
code: "* { background: rgb(43, 43, 43) !important }",
cssOrigin: "author",
@@ -81,7 +81,7 @@ add_task(async function testExecuteScript() {
code: "* { background: rgb(100, 100, 100) !important }",
cssOrigin: "user",
})
- .then(r =>
+ .then(() =>
browser.tabs.insertCSS({
code: "* { background: rgb(44, 44, 44) !important }",
cssOrigin: "author",
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_move_discarded.js b/browser/components/extensions/test/browser/browser_ext_tabs_move_discarded.js
index ebee4fbc90..5c7f7e7eb1 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_move_discarded.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_move_discarded.js
@@ -49,7 +49,7 @@ add_task(async function move_hidden_discarded_to_window() {
// Listener with "urls" filter, regression test for
// https://bugzilla.mozilla.org/show_bug.cgi?id=1695346
browser.tabs.onUpdated.addListener(
- (tabId, changeInfo, tab) => {
+ (tabId, changeInfo) => {
browser.test.assertTrue(changeInfo.hidden, "tab was hidden");
browser.test.sendMessage("onUpdated_urls_filter");
},
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_newtab_private.js b/browser/components/extensions/test/browser/browser_ext_tabs_newtab_private.js
index 19146fbe42..8855078faa 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_newtab_private.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_newtab_private.js
@@ -9,7 +9,7 @@ const NEWTAB_EXTENSION_CONTROLLED = "browser.newtab.extensionControlled";
const NEWTAB_URI = "webext-newtab-1.html";
function promisePrefChange(pref) {
- return new Promise((resolve, reject) => {
+ return new Promise(resolve => {
Services.prefs.addObserver(pref, function observer() {
Services.prefs.removeObserver(pref, observer);
resolve(arguments);
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_onCreated.js b/browser/components/extensions/test/browser/browser_ext_tabs_onCreated.js
index b48047abde..0004f60853 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_onCreated.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_onCreated.js
@@ -13,7 +13,7 @@ add_task(async function test_onCreated_active() {
browser.tabs.remove(tab.id);
browser.test.sendMessage("onCreated", tab);
});
- browser.tabs.onUpdated.addListener((tabId, changes, tab) => {
+ browser.tabs.onUpdated.addListener((tabId, changes) => {
browser.test.assertEq(
'["status"]',
JSON.stringify(Object.keys(changes)),
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated.js b/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated.js
index a59fa21f8a..65c8c349cf 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated.js
@@ -267,7 +267,7 @@ add_task(async function test_onUpdated_after_onRemoved() {
// If remove happens fast and we never receive onUpdated, that is ok, but
// we never want to receive onUpdated after onRemoved.
- browser.tabs.onUpdated.addListener(function onUpdated(tabId, changeInfo) {
+ browser.tabs.onUpdated.addListener(function onUpdated(tabId) {
if (!tab || tab.id !== tabId) {
return;
}
@@ -277,7 +277,7 @@ add_task(async function test_onUpdated_after_onRemoved() {
);
});
- browser.tabs.onRemoved.addListener((tabId, removedInfo) => {
+ browser.tabs.onRemoved.addListener(tabId => {
if (!tab || tab.id !== tabId) {
return;
}
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated_filter.js b/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated_filter.js
index 83d305e491..ed5cf6c525 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated_filter.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_onUpdated_filter.js
@@ -23,7 +23,7 @@ add_task(async function test_filter_url() {
let ext_perm = ExtensionTestUtils.loadExtension({
background() {
browser.tabs.onUpdated.addListener(
- (tabId, changeInfo) => {
+ () => {
browser.test.fail(
`received unexpected onUpdated event without tabs permission`
);
@@ -73,7 +73,7 @@ add_task(async function test_filter_url_activeTab() {
},
background() {
browser.tabs.onUpdated.addListener(
- (tabId, changeInfo) => {
+ () => {
browser.test.fail(
"should only have notification for activeTab, selectedTab is not activeTab"
);
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_query.js b/browser/components/extensions/test/browser/browser_ext_tabs_query.js
index 099588c701..30c05a4b83 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_query.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_query.js
@@ -283,7 +283,7 @@ add_task(async function () {
},
background: function () {
- browser.test.onMessage.addListener(async msg => {
+ browser.test.onMessage.addListener(async () => {
let tabs = await browser.tabs.query({ active: true });
browser.test.assertEq(tabs.length, 1, "should have one tab");
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_saveAsPDF.js b/browser/components/extensions/test/browser/browser_ext_tabs_saveAsPDF.js
index fdff1dddbf..7e33da8bed 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_saveAsPDF.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_saveAsPDF.js
@@ -30,7 +30,7 @@ async function testReturnStatus(expectedStatus) {
}
let MockFilePicker = SpecialPowers.MockFilePicker;
- MockFilePicker.init(window);
+ MockFilePicker.init(window.browsingContext);
if (expectedStatus == "replaced" || expectedStatus == "not_replaced") {
MockFilePicker.returnValue = MockFilePicker.returnReplace;
@@ -42,7 +42,7 @@ async function testReturnStatus(expectedStatus) {
MockFilePicker.displayDirectory = saveDir;
- MockFilePicker.showCallback = fp => {
+ MockFilePicker.showCallback = () => {
MockFilePicker.setFiles([saveFile]);
MockFilePicker.filterIndex = 0; // *.* - all file extensions
};
@@ -126,7 +126,7 @@ async function testFileName(expectedFileName) {
}
let MockFilePicker = SpecialPowers.MockFilePicker;
- MockFilePicker.init(window);
+ MockFilePicker.init(window.browsingContext);
MockFilePicker.returnValue = MockFilePicker.returnOK;
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_sendMessage.js b/browser/components/extensions/test/browser/browser_ext_tabs_sendMessage.js
index 8c420c2821..699ab8613a 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_sendMessage.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_sendMessage.js
@@ -19,7 +19,7 @@ add_task(async function tabsSendMessageReply() {
background: async function () {
let firstTab;
let promiseResponse = new Promise(resolve => {
- browser.runtime.onMessage.addListener((msg, sender, respond) => {
+ browser.runtime.onMessage.addListener((msg, sender) => {
if (msg == "content-script-ready") {
let tabId = sender.tab.id;
@@ -265,7 +265,7 @@ add_task(async function tabsSendHidden() {
background: async function () {
let resolveContent;
- browser.runtime.onMessage.addListener((msg, sender) => {
+ browser.runtime.onMessage.addListener(msg => {
if (msg[0] == "content-ready") {
resolveContent(msg[1]);
}
@@ -327,7 +327,7 @@ add_task(async function tabsSendHidden() {
// properties of the possibly-hidden content window.
let href = window.location.href;
- browser.runtime.onMessage.addListener((msg, sender) => {
+ browser.runtime.onMessage.addListener(msg => {
browser.test.assertEq(
href,
msg,
diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_sharingState.js b/browser/components/extensions/test/browser/browser_ext_tabs_sharingState.js
index 47f2006307..86e6af2d6e 100644
--- a/browser/components/extensions/test/browser/browser_ext_tabs_sharingState.js
+++ b/browser/components/extensions/test/browser/browser_ext_tabs_sharingState.js
@@ -59,7 +59,7 @@ add_task(async function test_tabs_mediaIndicators() {
tabs = await browser.tabs.query({ hidden: true });
browser.test.assertEq(tabs.length, 0, "unable to hide sharing tab");
- browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
+ browser.tabs.onUpdated.addListener(async (tabId, changeInfo) => {
if (testTab.id !== tabId) {
return;
}
diff --git a/browser/components/extensions/test/browser/browser_ext_webRequest_error_after_stopped_or_closed.js b/browser/components/extensions/test/browser/browser_ext_webRequest_error_after_stopped_or_closed.js
index 75d85dd3bf..e14a498cd3 100644
--- a/browser/components/extensions/test/browser/browser_ext_webRequest_error_after_stopped_or_closed.js
+++ b/browser/components/extensions/test/browser/browser_ext_webRequest_error_after_stopped_or_closed.js
@@ -88,7 +88,7 @@ async function runTest(stopLoadFunc) {
* our request.
*/
add_task(async function test_click_stop_button() {
- await runTest(async slowTab => {
+ await runTest(async () => {
// Stop the load
let stopButton = document.getElementById("stop-button");
await TestUtils.waitForCondition(() => {
diff --git a/browser/components/extensions/test/browser/browser_ext_windows_create_tabId.js b/browser/components/extensions/test/browser/browser_ext_windows_create_tabId.js
index 83fda199b7..9b7aea478a 100644
--- a/browser/components/extensions/test/browser/browser_ext_windows_create_tabId.js
+++ b/browser/components/extensions/test/browser/browser_ext_windows_create_tabId.js
@@ -34,8 +34,7 @@ add_task(async function testWindowCreate() {
return new Promise(resolve => {
browser.tabs.onUpdated.addListener(function listener(
tabId,
- changeInfo,
- tab
+ changeInfo
) {
if (changeInfo.url === expected) {
browser.tabs.onUpdated.removeListener(listener);
diff --git a/browser/components/extensions/test/browser/browser_ext_windows_update.js b/browser/components/extensions/test/browser/browser_ext_windows_update.js
index 7331b2c0cc..663f7a54d7 100644
--- a/browser/components/extensions/test/browser/browser_ext_windows_update.js
+++ b/browser/components/extensions/test/browser/browser_ext_windows_update.js
@@ -260,7 +260,7 @@ add_task(async function testPositionBoundaryCheck() {
const extension = ExtensionTestUtils.loadExtension({
async background() {
function waitMessage() {
- return new Promise((resolve, reject) => {
+ return new Promise(resolve => {
const onMessage = message => {
if (message == "continue") {
browser.test.onMessage.removeListener(onMessage);
@@ -309,7 +309,7 @@ add_task(async function testPositionBoundaryCheck() {
},
});
- const promisedWin = new Promise((resolve, reject) => {
+ const promisedWin = new Promise(resolve => {
const windowListener = (window, topic) => {
if (topic == "domwindowopened") {
Services.ww.unregisterNotification(windowListener);
diff --git a/browser/components/extensions/test/browser/browser_unified_extensions_overflowable_toolbar.js b/browser/components/extensions/test/browser/browser_unified_extensions_overflowable_toolbar.js
index 9758a96636..2082bc29a9 100644
--- a/browser/components/extensions/test/browser/browser_unified_extensions_overflowable_toolbar.js
+++ b/browser/components/extensions/test/browser/browser_unified_extensions_overflowable_toolbar.js
@@ -217,7 +217,7 @@ async function withWindowOverflowed(
return this._deferred.promise;
},
- onWidgetAdded(widgetID, area) {
+ onWidgetAdded(widgetID) {
if (widgetID.endsWith("-browser-action")) {
this._remainingBrowserActions--;
}
@@ -263,7 +263,7 @@ async function withWindowOverflowed(
return this._deferred.promise;
},
- onWidgetOverflow(widgetNode, areaNode) {
+ onWidgetOverflow() {
this._remainingOverflowables--;
if (!this._remainingOverflowables) {
this._deferred.resolve();
@@ -489,7 +489,7 @@ add_task(async function test_context_menu() {
let win = await BrowserTestUtils.openNewBrowserWindow();
await withWindowOverflowed(win, {
- whenOverflowed: async (defaultList, unifiedExtensionList, extensionIDs) => {
+ whenOverflowed: async (defaultList, unifiedExtensionList) => {
Assert.ok(
unifiedExtensionList.children.length,
"Should have items in the Unified Extension list."
@@ -587,7 +587,7 @@ add_task(async function test_message_deck() {
let win = await BrowserTestUtils.openNewBrowserWindow();
await withWindowOverflowed(win, {
- whenOverflowed: async (defaultList, unifiedExtensionList, extensionIDs) => {
+ whenOverflowed: async (defaultList, unifiedExtensionList) => {
Assert.ok(
unifiedExtensionList.children.length,
"Should have items in the Unified Extension list."
@@ -825,7 +825,7 @@ add_task(async function test_pinning_to_toolbar_when_overflowed() {
"expected no .toolbarbutton-1 CSS class on the menu button in the panel"
);
},
- whenOverflowed: async (defaultList, unifiedExtensionList, extensionIDs) => {
+ whenOverflowed: async (defaultList, unifiedExtensionList) => {
ok(
actionButton.classList.contains("subviewbutton"),
"expected .subviewbutton CSS class on the action button in the panel"
@@ -893,7 +893,7 @@ add_task(async function test_unpin_overflowed_widget() {
let extensionID;
await withWindowOverflowed(win, {
- whenOverflowed: async (defaultList, unifiedExtensionList, extensionIDs) => {
+ whenOverflowed: async (defaultList, unifiedExtensionList) => {
const firstExtensionWidget = unifiedExtensionList.children[0];
Assert.ok(firstExtensionWidget, "expected an extension widget");
extensionID = firstExtensionWidget.dataset.extensionid;
@@ -1120,7 +1120,7 @@ add_task(async function test_overflow_with_a_second_window() {
"expected no .subviewbutton CSS class on the menu button in the second window"
);
},
- whenOverflowed: async (defaultList, unifiedExtensionList, extensionIDs) => {
+ whenOverflowed: async () => {
// The DOM node should have been overflowed.
Assert.ok(
aNode.hasAttribute("overflowedItem"),
@@ -1356,7 +1356,7 @@ add_task(async function test_overflowed_extension_cannot_be_moved() {
let extensionID;
await withWindowOverflowed(win, {
- whenOverflowed: async (defaultList, unifiedExtensionList, extensionIDs) => {
+ whenOverflowed: async (defaultList, unifiedExtensionList) => {
const secondExtensionWidget = unifiedExtensionList.children[1];
Assert.ok(secondExtensionWidget, "expected an extension widget");
extensionID = secondExtensionWidget.dataset.extensionid;
diff --git a/browser/components/extensions/test/browser/head.js b/browser/components/extensions/test/browser/head.js
index 02f905d05c..344eb3cca7 100644
--- a/browser/components/extensions/test/browser/head.js
+++ b/browser/components/extensions/test/browser/head.js
@@ -169,7 +169,7 @@ function promiseAnimationFrame(win = window) {
function promisePopupHidden(popup) {
return new Promise(resolve => {
- let onPopupHidden = event => {
+ let onPopupHidden = () => {
popup.removeEventListener("popuphidden", onPopupHidden);
resolve();
};
@@ -323,7 +323,7 @@ var awaitExtensionPanel = function (extension, win = window, awaitLoad = true) {
return AppUiTestDelegate.awaitExtensionPanel(win, extension.id, awaitLoad);
};
-function getCustomizableUIPanelID(win = window) {
+function getCustomizableUIPanelID() {
return CustomizableUI.AREA_ADDONS;
}
@@ -605,7 +605,7 @@ async function openChromeContextMenu(menuId, target, win = window) {
return menu;
}
-async function openSubmenu(submenuItem, win = window) {
+async function openSubmenu(submenuItem) {
const submenu = submenuItem.menupopup;
const shown = BrowserTestUtils.waitForEvent(submenu, "popupshown");
submenuItem.openMenu(true);
@@ -763,7 +763,7 @@ function closePageAction(extension, win = window) {
}
function promisePrefChangeObserved(pref) {
- return new Promise((resolve, reject) =>
+ return new Promise(resolve =>
Preferences.observe(pref, function prefObserver() {
Preferences.ignore(pref, prefObserver);
resolve();
diff --git a/browser/components/extensions/test/browser/search-engines/search-config-v2.json b/browser/components/extensions/test/browser/search-engines/search-config-v2.json
new file mode 100644
index 0000000000..a696b26a75
--- /dev/null
+++ b/browser/components/extensions/test/browser/search-engines/search-config-v2.json
@@ -0,0 +1,97 @@
+{
+ "data": [
+ {
+ "recordType": "engine",
+ "identifier": "basic",
+ "base": {
+ "name": "basic",
+ "urls": {
+ "search": {
+ "base": "https://mochi.test:8888/browser/browser/components/search/test/browser/",
+ "params": [
+ {
+ "name": "foo",
+ "value": "1"
+ }
+ ],
+ "searchTermParamName": "search"
+ },
+ "suggestions": {
+ "base": "https://mochi.test:8888/browser/browser/modules/test/browser/usageTelemetrySearchSuggestions.sjs",
+ "searchTermParamName": "q"
+ }
+ }
+ },
+ "variants": [
+ {
+ "environment": { "allRegionsAndLocales": true }
+ }
+ ]
+ },
+ {
+ "recordType": "engine",
+ "identifier": "simple",
+ "base": {
+ "name": "Simple Engine",
+ "urls": {
+ "search": {
+ "base": "https://example.com",
+ "params": [
+ {
+ "name": "sourceId",
+ "value": "Mozilla-search"
+ }
+ ],
+ "searchTermParamName": "search"
+ },
+ "suggestions": {
+ "base": "https://example.com",
+ "searchTermParamName": "search"
+ }
+ }
+ },
+ "variants": [
+ {
+ "environment": { "allRegionsAndLocales": true }
+ }
+ ]
+ },
+ {
+ "recordType": "engine",
+ "identifier": "another",
+ "base": {
+ "name": "another",
+ "urls": {
+ "search": {
+ "base": "https://mochi.test:8888/browser/browser/components/search/test/browser/",
+ "params": [
+ {
+ "name": "bar",
+ "value": "1"
+ }
+ ],
+ "searchTermParamName": "search"
+ },
+ "suggestions": {
+ "base": "https://mochi.test:8888/browser/browser/modules/test/browser/usageTelemetrySearchSuggestions.sjs",
+ "searchTermParamName": "q"
+ }
+ }
+ },
+ "variants": [
+ {
+ "environment": { "allRegionsAndLocales": true }
+ }
+ ]
+ },
+ {
+ "recordType": "defaultEngines",
+ "globalDefault": "basic",
+ "specificDefaults": []
+ },
+ {
+ "recordType": "engineOrders",
+ "orders": []
+ }
+ ]
+}
diff --git a/browser/components/extensions/test/xpcshell/test_ext_browsingData_settings.js b/browser/components/extensions/test/xpcshell/test_ext_browsingData_settings.js
index 9d2241895c..843adfd0f1 100644
--- a/browser/components/extensions/test/xpcshell/test_ext_browsingData_settings.js
+++ b/browser/components/extensions/test/xpcshell/test_ext_browsingData_settings.js
@@ -18,7 +18,7 @@ const SETTINGS_LIST = [
add_task(async function testSettingsProperties() {
function background() {
- browser.test.onMessage.addListener(msg => {
+ browser.test.onMessage.addListener(() => {
browser.browsingData.settings().then(settings => {
browser.test.sendMessage("settings", settings);
});
@@ -108,7 +108,7 @@ add_task(async function testSettingsSince() {
};
function background() {
- browser.test.onMessage.addListener(msg => {
+ browser.test.onMessage.addListener(() => {
browser.browsingData.settings().then(settings => {
browser.test.sendMessage("settings", settings);
});
diff --git a/browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_update.js b/browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_update.js
index aac00a8023..b7b9deac0b 100644
--- a/browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_update.js
+++ b/browser/components/extensions/test/xpcshell/test_ext_chrome_settings_overrides_update.js
@@ -113,7 +113,7 @@ add_task(async function test_overrides_update_removal() {
// that is the default, we do not prompt for default.
let deferredPrompt = topicObservable(
"webextension-defaultsearch-prompt",
- (subject, message) => {
+ subject => {
if (subject.wrappedJSObject.id == extension.id) {
ok(false, "default override should not prompt");
}
@@ -243,7 +243,7 @@ add_task(async function test_overrides_update_adding() {
let deferredUpgradePrompt = topicObservable(
"webextension-defaultsearch-prompt",
- (subject, message) => {
+ subject => {
if (subject.wrappedJSObject.id == extension.id) {
ok(false, "should not prompt on update");
}
@@ -351,7 +351,7 @@ async function withHandlingDefaultSearchPrompt({ extensionId, respond }, cb) {
);
const prompted = TestUtils.topicObserved(
"webextension-defaultsearch-prompt",
- (subject, message) => {
+ subject => {
if (subject.wrappedJSObject.id == extensionId) {
return subject.wrappedJSObject.respond(respond);
}
@@ -364,7 +364,7 @@ async function withHandlingDefaultSearchPrompt({ extensionId, respond }, cb) {
async function assertUpdateDoNotPrompt(extension, updateExtensionInfo) {
let deferredUpgradePrompt = topicObservable(
"webextension-defaultsearch-prompt",
- (subject, message) => {
+ subject => {
if (subject.wrappedJSObject.id == extension.id) {
ok(false, "should not prompt on update");
}
diff --git a/browser/components/extensions/test/xpcshell/test_ext_history.js b/browser/components/extensions/test/xpcshell/test_ext_history.js
index c0f6c39be7..0ad6893484 100644
--- a/browser/components/extensions/test/xpcshell/test_ext_history.js
+++ b/browser/components/extensions/test/xpcshell/test_ext_history.js
@@ -251,7 +251,7 @@ add_task(async function test_search() {
function background(BGSCRIPT_REFERENCE_DATE) {
const futureTime = Date.now() + 24 * 60 * 60 * 1000;
- browser.test.onMessage.addListener(msg => {
+ browser.test.onMessage.addListener(() => {
browser.history
.search({ text: "" })
.then(results => {
@@ -295,7 +295,7 @@ add_task(async function test_search() {
});
})
.then(
- results => {
+ () => {
browser.test.fail(
"history.search rejects with startTime that is after the endTime"
);
diff --git a/browser/components/extensions/test/xpcshell/test_ext_homepage_overrides_private.js b/browser/components/extensions/test/xpcshell/test_ext_homepage_overrides_private.js
index 2d2bccc1e2..0fecc8c3e5 100644
--- a/browser/components/extensions/test/xpcshell/test_ext_homepage_overrides_private.js
+++ b/browser/components/extensions/test/xpcshell/test_ext_homepage_overrides_private.js
@@ -32,7 +32,7 @@ AddonTestUtils.overrideCertDB();
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
function promisePrefChange(pref) {
- return new Promise((resolve, reject) => {
+ return new Promise(resolve => {
Services.prefs.addObserver(pref, function observer() {
Services.prefs.removeObserver(pref, observer);
resolve(arguments);
diff --git a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_defaults.js b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_defaults.js
index dd24be3aff..05ba807fae 100644
--- a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_defaults.js
+++ b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_defaults.js
@@ -23,6 +23,124 @@ const { sinon } = ChromeUtils.importESModule(
"resource://testing-common/Sinon.sys.mjs"
);
+const CONFIG_V2 = [
+ {
+ recordType: "engine",
+ identifier: "test",
+ base: {
+ name: "MozParamsTest",
+ urls: {
+ search: {
+ base: "https://example.com/",
+ params: [
+ {
+ name: "test-0",
+ searchAccessPoint: {
+ contextmenu: "0",
+ },
+ },
+ {
+ name: "test-1",
+ searchAccessPoint: {
+ searchbar: "1",
+ },
+ },
+ {
+ name: "test-2",
+ searchAccessPoint: {
+ homepage: "2",
+ },
+ },
+ {
+ name: "test-3",
+ searchAccessPoint: {
+ addressbar: "3",
+ },
+ },
+ {
+ name: "test-4",
+ searchAccessPoint: {
+ newtab: "4",
+ },
+ },
+ {
+ name: "simple",
+ value: "5",
+ },
+ {
+ name: "term",
+ value: "{searchTerms}",
+ },
+ {
+ name: "lang",
+ value: "{language}",
+ },
+ {
+ name: "locale",
+ value: "{moz:locale}",
+ },
+ {
+ name: "prefval",
+ experimentConfig: "code",
+ },
+ {
+ name: "experimenter-1",
+ experimentConfig: "nimbus-key-1",
+ },
+ {
+ name: "experimenter-2",
+ experimentConfig: "nimbus-key-2",
+ },
+ ],
+ searchTermParamName: "q",
+ },
+ },
+ },
+ variants: [
+ {
+ environment: {
+ allRegionsAndLocales: true,
+ },
+ },
+ ],
+ },
+ {
+ recordType: "engine",
+ identifier: "test2",
+ base: {
+ name: "MozParamsTest2",
+ urls: {
+ search: {
+ base: "https://example.com/2/",
+ params: [
+ {
+ name: "simple2",
+ value: "5",
+ },
+ ],
+ searchTermParamName: "q",
+ },
+ },
+ },
+ variants: [
+ {
+ environment: {
+ allRegionsAndLocales: true,
+ },
+ },
+ ],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "test",
+ specificDefaults: [],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+];
+
const URLTYPE_SUGGEST_JSON = "application/x-suggestions+json";
AddonTestUtils.init(this);
@@ -43,29 +161,35 @@ add_task(async function setup() {
AddonTestUtils.usePrivilegedSignatures = false;
AddonTestUtils.overrideCertDB();
await AddonTestUtils.promiseStartupManager();
- await SearchTestUtils.useTestEngines("data", null, [
- {
- webExtension: {
- id: "test@search.mozilla.org",
- },
- appliesTo: [
- {
- included: { everywhere: true },
- default: "yes",
- },
- ],
- },
- {
- webExtension: {
- id: "test2@search.mozilla.org",
- },
- appliesTo: [
- {
- included: { everywhere: true },
- },
- ],
- },
- ]);
+ await SearchTestUtils.useTestEngines(
+ "data",
+ null,
+ SearchUtils.newSearchConfigEnabled
+ ? CONFIG_V2
+ : [
+ {
+ webExtension: {
+ id: "test@search.mozilla.org",
+ },
+ appliesTo: [
+ {
+ included: { everywhere: true },
+ default: "yes",
+ },
+ ],
+ },
+ {
+ webExtension: {
+ id: "test2@search.mozilla.org",
+ },
+ appliesTo: [
+ {
+ included: { everywhere: true },
+ },
+ ],
+ },
+ ]
+ );
await Services.search.init();
registerCleanupFunction(async () => {
await AddonTestUtils.promiseShutdownManager();
@@ -124,7 +248,9 @@ add_task(async function test_extension_changing_to_app_provided_default() {
assertEngineParameters({
name: "MozParamsTest2",
- searchURL: "https://example.com/2/?q={searchTerms}&simple2=5",
+ searchURL: SearchUtils.newSearchConfigEnabled
+ ? "https://example.com/2/?simple2=5&q={searchTerms}"
+ : "https://example.com/2/?q={searchTerms}&simple2=5",
messageSnippet: "left unchanged",
});
@@ -213,7 +339,9 @@ add_task(async function test_extension_overriding_app_provided_default() {
);
assertEngineParameters({
name: "MozParamsTest2",
- searchURL: "https://example.com/2/?q={searchTerms}&simple2=5",
+ searchURL: SearchUtils.newSearchConfigEnabled
+ ? "https://example.com/2/?simple2=5&q={searchTerms}"
+ : "https://example.com/2/?q={searchTerms}&simple2=5",
messageSnippet: "reverted",
});
@@ -256,7 +384,9 @@ add_task(async function test_extension_overriding_app_provided_default() {
assertEngineParameters({
name: "MozParamsTest2",
- searchURL: "https://example.com/2/?q={searchTerms}&simple2=5",
+ searchURL: SearchUtils.newSearchConfigEnabled
+ ? "https://example.com/2/?simple2=5&q={searchTerms}"
+ : "https://example.com/2/?q={searchTerms}&simple2=5",
messageSnippet: "reverted",
});
sinon.restore();
diff --git a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search.js b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search.js
index 10fed4d36b..e4e8fab79d 100644
--- a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search.js
+++ b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search.js
@@ -60,19 +60,19 @@ add_task(async function test_extension_adding_engine() {
let { baseURI } = ext1.extension;
equal(
- engine.getIconURL(),
+ await engine.getIconURL(),
baseURI.resolve("foo.ico"),
"16x16 icon path matches"
);
equal(
- engine.getIconURL(16),
+ await engine.getIconURL(16),
baseURI.resolve("foo.ico"),
"16x16 icon path matches"
);
// TODO: Bug 1871036 - Differently sized icons are currently incorrectly
// handled for add-ons.
// equal(
- // engine.getIconURL(32),
+ // await engine.getIconURL(32),
// baseURI.resolve("foo32.ico"),
// "32x32 icon path matches"
// );
diff --git a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js
index 3248c5cefa..5437d63d16 100644
--- a/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js
+++ b/browser/components/extensions/test/xpcshell/test_ext_settings_overrides_search_mozParam.js
@@ -15,6 +15,9 @@ const { NimbusFeatures } = ChromeUtils.importESModule(
const { sinon } = ChromeUtils.importESModule(
"resource://testing-common/Sinon.sys.mjs"
);
+const { SearchUtils } = ChromeUtils.importESModule(
+ "resource://gre/modules/SearchUtils.sys.mjs"
+);
AddonTestUtils.init(this);
AddonTestUtils.overrideCertDB();
@@ -51,23 +54,118 @@ const params = [
{ name: "prefval", condition: "pref", pref: "code" },
];
+const CONFIG = [
+ {
+ webExtension: {
+ id: "test@search.mozilla.org",
+ },
+ appliesTo: [
+ {
+ included: { everywhere: true },
+ default: "yes",
+ },
+ ],
+ },
+];
+const CONFIG_V2 = [
+ {
+ recordType: "engine",
+ identifier: "test",
+ base: {
+ name: "MozParamsTest",
+ urls: {
+ search: {
+ base: "https://example.com/",
+ params: [
+ {
+ name: "test-0",
+ searchAccessPoint: {
+ contextmenu: "0",
+ },
+ },
+ {
+ name: "test-1",
+ searchAccessPoint: {
+ searchbar: "1",
+ },
+ },
+ {
+ name: "test-2",
+ searchAccessPoint: {
+ homepage: "2",
+ },
+ },
+ {
+ name: "test-3",
+ searchAccessPoint: {
+ addressbar: "3",
+ },
+ },
+ {
+ name: "test-4",
+ searchAccessPoint: {
+ newtab: "4",
+ },
+ },
+ {
+ name: "simple",
+ value: "5",
+ },
+ {
+ name: "term",
+ value: "{searchTerms}",
+ },
+ {
+ name: "lang",
+ value: "{language}",
+ },
+ {
+ name: "locale",
+ value: "{moz:locale}",
+ },
+ {
+ name: "prefval",
+ experimentConfig: "code",
+ },
+ {
+ name: "experimenter-1",
+ experimentConfig: "nimbus-key-1",
+ },
+ {
+ name: "experimenter-2",
+ experimentConfig: "nimbus-key-2",
+ },
+ ],
+ searchTermParamName: "q",
+ },
+ },
+ },
+ variants: [
+ {
+ environment: { allRegionsAndLocales: true },
+ },
+ ],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "test",
+ specificDefaults: [],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+];
+
add_task(async function setup() {
let readyStub = sinon.stub(NimbusFeatures.search, "ready").resolves();
let updateStub = sinon.stub(NimbusFeatures.search, "onUpdate");
await promiseStartupManager();
- await SearchTestUtils.useTestEngines("data", null, [
- {
- webExtension: {
- id: "test@search.mozilla.org",
- },
- appliesTo: [
- {
- included: { everywhere: true },
- default: "yes",
- },
- ],
- },
- ]);
+ await SearchTestUtils.useTestEngines(
+ "data",
+ null,
+ SearchUtils.newSearchConfigEnabled ? CONFIG_V2 : CONFIG
+ );
await Services.search.init();
registerCleanupFunction(async () => {
await promiseShutdownManager();
@@ -107,7 +205,9 @@ add_task(async function test_extension_setting_moz_params() {
).uri.spec;
equal(
expectedURL,
- `https://example.com/?q=test&${p.name}=${p.value}&${paramStr}`,
+ SearchUtils.newSearchConfigEnabled
+ ? `https://example.com/?${p.name}=${p.value}&${paramStr}&q=test`
+ : `https://example.com/?q=test&${p.name}=${p.value}&${paramStr}`,
"search url is expected"
);
}
@@ -180,7 +280,9 @@ add_task(async function test_nimbus_params() {
).uri.spec;
equal(
expectedURL,
- `https://example.com/?q=test&${p.name}=${p.value}&${paramStr}`,
+ SearchUtils.newSearchConfigEnabled
+ ? `https://example.com/?${p.name}=${p.value}&${paramStr}&q=test`
+ : `https://example.com/?q=test&${p.name}=${p.value}&${paramStr}`,
"search url is expected"
);
}
diff --git a/browser/components/firefoxview/OpenTabs.sys.mjs b/browser/components/firefoxview/OpenTabs.sys.mjs
index ac247f5e8f..0771bf9e65 100644
--- a/browser/components/firefoxview/OpenTabs.sys.mjs
+++ b/browser/components/firefoxview/OpenTabs.sys.mjs
@@ -36,6 +36,8 @@ const TAB_RECENCY_CHANGE_EVENTS = Object.freeze([
"TabAttrModified",
"TabClose",
"TabOpen",
+ "TabPinned",
+ "TabUnpinned",
"TabSelect",
"TabAttrModified",
]);
@@ -329,17 +331,21 @@ class OpenTabsTarget extends EventTarget {
return [];
}
+ /**
+ * Get an aggregated list of tabs from all the same-privateness browser windows.
+ *
+ * @returns {MozTabbrowserTab[]}
+ */
+ getAllTabs() {
+ return this.currentWindows.flatMap(win => this.getTabsForWindow(win));
+ }
+
/*
* @returns {Array<Tab>}
* A by-recency-sorted, aggregated list of tabs from all the same-privateness browser windows.
*/
getRecentTabs() {
- const tabs = [];
- for (let win of this.currentWindows) {
- tabs.push(...this.getTabsForWindow(win));
- }
- tabs.sort(lastSeenActiveSort);
- return tabs;
+ return this.getAllTabs().sort(lastSeenActiveSort);
}
handleEvent({ detail, target, type }) {
diff --git a/browser/components/firefoxview/content/category-history.svg b/browser/components/firefoxview/content/view-history.svg
index a6dc259483..a6dc259483 100644
--- a/browser/components/firefoxview/content/category-history.svg
+++ b/browser/components/firefoxview/content/view-history.svg
diff --git a/browser/components/firefoxview/content/category-opentabs.svg b/browser/components/firefoxview/content/view-opentabs.svg
index 2172558a42..2172558a42 100644
--- a/browser/components/firefoxview/content/category-opentabs.svg
+++ b/browser/components/firefoxview/content/view-opentabs.svg
diff --git a/browser/components/firefoxview/content/category-recentbrowsing.svg b/browser/components/firefoxview/content/view-recentbrowsing.svg
index f4c523dafa..f4c523dafa 100644
--- a/browser/components/firefoxview/content/category-recentbrowsing.svg
+++ b/browser/components/firefoxview/content/view-recentbrowsing.svg
diff --git a/browser/components/firefoxview/content/category-recentlyclosed.svg b/browser/components/firefoxview/content/view-recentlyclosed.svg
index 7cac65ac58..7cac65ac58 100644
--- a/browser/components/firefoxview/content/category-recentlyclosed.svg
+++ b/browser/components/firefoxview/content/view-recentlyclosed.svg
diff --git a/browser/components/firefoxview/content/category-syncedtabs.svg b/browser/components/firefoxview/content/view-syncedtabs.svg
index bd9749743c..bd9749743c 100644
--- a/browser/components/firefoxview/content/category-syncedtabs.svg
+++ b/browser/components/firefoxview/content/view-syncedtabs.svg
diff --git a/browser/components/firefoxview/firefoxview.css b/browser/components/firefoxview/firefoxview.css
index 48cf5a9490..6811ca54c4 100644
--- a/browser/components/firefoxview/firefoxview.css
+++ b/browser/components/firefoxview/firefoxview.css
@@ -16,6 +16,7 @@
--fxview-text-color-hover: var(--newtab-text-primary-color);
--fxview-primary-action-background: var(--newtab-primary-action-background, #0061e0);
--fxview-border: var(--fc-border-light, #CFCFD8);
+ --fxview-indicator-stroke-color-hover: #DEDDDE;
/* ensure utility button hover states match those of the rest of the page */
--in-content-button-background-hover: var(--fxview-element-background-hover);
@@ -37,6 +38,7 @@
--fxview-element-background-hover: color-mix(in srgb, var(--fxview-background-color) 80%, white);
--fxview-element-background-active: color-mix(in srgb, var(--fxview-background-color) 60%, white);
--fxview-border: #8F8F9D;
+ --fxview-indicator-stroke-color-hover:#5D5C66;
/* copy over newtab colors from activity-stream-[os].css files */
--newtab-background-color: #2B2A33;
@@ -69,6 +71,10 @@ body {
grid-template-columns: var(--fxview-sidebar-width) 1fr;
background-color: var(--fxview-background-color);
color: var(--fxview-text-primary-color);
+
+ @media (max-width: 52rem) {
+ display: flex;
+ }
}
.main-container {
@@ -88,34 +94,6 @@ body {
margin: 0;
}
-fxview-category-button:focus-visible {
- outline-offset: var(--in-content-focus-outline-inset);
-}
-
-fxview-category-button[name="recentbrowsing"]::part(icon) {
- background-image: url("chrome://browser/content/firefoxview/category-recentbrowsing.svg");
-}
-fxview-category-button[name="opentabs"]::part(icon) {
- background-image: url("chrome://browser/content/firefoxview/category-opentabs.svg");
-}
-fxview-category-button[name="recentlyclosed"]::part(icon) {
- background-image: url("chrome://browser/content/firefoxview/category-recentlyclosed.svg");
-}
-fxview-category-button[name="syncedtabs"]::part(icon) {
- background-image: url("chrome://browser/content/firefoxview/category-syncedtabs.svg");
-}
-fxview-category-button[name="history"]::part(icon) {
- background-image: url("chrome://browser/content/firefoxview/category-history.svg");
-}
-
-fxview-tab-list.with-dismiss-button::part(secondary-button) {
- background-image: url("chrome://global/skin/icons/close.svg");
-}
-
-fxview-tab-list.with-context-menu::part(secondary-button) {
- background-image: url("chrome://global/skin/icons/more.svg");
-}
-
.sticky-container {
position: sticky;
top: 0;
@@ -170,18 +148,6 @@ panel-item::part(button):hover:active {
background-color: var(--fxview-element-background-active);
}
-panel-list {
- overflow-y: visible;
-}
-
-fxview-category-navigation {
- overflow-y: auto;
-}
-
-fxview-category-navigation h1 {
- margin-block: 0;
-}
-
fxview-empty-state:not([isSelectedTab]) button[slot="primary-action"] {
margin-inline-start: 0;
}
diff --git a/browser/components/firefoxview/firefoxview.html b/browser/components/firefoxview/firefoxview.html
index 1f53a1d0c9..6fa0f59a8f 100644
--- a/browser/components/firefoxview/firefoxview.html
+++ b/browser/components/firefoxview/firefoxview.html
@@ -15,8 +15,6 @@
<link rel="localization" href="branding/brand.ftl" />
<link rel="localization" href="toolkit/branding/accounts.ftl" />
<link rel="localization" href="browser/firefoxView.ftl" />
- <link rel="localization" href="branding/brand.ftl" />
- <link rel="localization" href="toolkit/branding/accounts.ftl" />
<link rel="localization" href="toolkit/branding/brandings.ftl" />
<link rel="localization" href="browser/migrationWizard.ftl" />
<link
@@ -41,54 +39,51 @@
></script>
<script
type="module"
- src="chrome://browser/content/firefoxview/fxview-category-navigation.mjs"
+ src="chrome://browser/content/firefoxview/syncedtabs.mjs"
></script>
<script
type="module"
- src="chrome://browser/content/firefoxview/syncedtabs.mjs"
+ src="chrome://global/content/elements/moz-page-nav.mjs"
></script>
<script src="chrome://browser/content/contentTheme.js"></script>
</head>
<body>
- <fxview-category-navigation>
- <h1 slot="category-nav-header" data-l10n-id="firefoxview-page-title"></h1>
- <fxview-category-button
- class="category"
- slot="category-button"
- name="recentbrowsing"
+ <moz-page-nav
+ data-l10n-id="firefoxview-page-heading"
+ data-l10n-attrs="heading"
+ >
+ <moz-page-nav-button
+ view="recentbrowsing"
data-l10n-id="firefoxview-overview-nav"
+ iconSrc="chrome://browser/content/firefoxview/view-recentbrowsing.svg"
>
- </fxview-category-button>
- <fxview-category-button
- class="category"
- slot="category-button"
- name="opentabs"
+ </moz-page-nav-button>
+ <moz-page-nav-button
+ view="opentabs"
data-l10n-id="firefoxview-opentabs-nav"
+ iconSrc="chrome://browser/content/firefoxview/view-opentabs.svg"
>
- </fxview-category-button>
- <fxview-category-button
- class="category"
- slot="category-button"
- name="recentlyclosed"
+ </moz-page-nav-button>
+ <moz-page-nav-button
+ view="recentlyclosed"
data-l10n-id="firefoxview-recently-closed-nav"
+ iconSrc="chrome://browser/content/firefoxview/view-recentlyclosed.svg"
>
- </fxview-category-button>
- <fxview-category-button
- class="category"
- slot="category-button"
- name="syncedtabs"
+ </moz-page-nav-button>
+ <moz-page-nav-button
+ view="syncedtabs"
data-l10n-id="firefoxview-synced-tabs-nav"
+ iconSrc="chrome://browser/content/firefoxview/view-syncedtabs.svg"
>
- </fxview-category-button>
- <fxview-category-button
- class="category"
- slot="category-button"
- name="history"
+ </moz-page-nav-button>
+ <moz-page-nav-button
+ view="history"
data-l10n-id="firefoxview-history-nav"
+ iconSrc="chrome://browser/content/firefoxview/view-history.svg"
>
- </fxview-category-button>
- </fxview-category-navigation>
+ </moz-page-nav-button>
+ </moz-page-nav>
<main id="pages" role="application" data-l10n-id="firefoxview-page-label">
<div class="main-container">
<named-deck>
diff --git a/browser/components/firefoxview/firefoxview.mjs b/browser/components/firefoxview/firefoxview.mjs
index 77f4c06cc7..3e61482cc0 100644
--- a/browser/components/firefoxview/firefoxview.mjs
+++ b/browser/components/firefoxview/firefoxview.mjs
@@ -3,35 +3,29 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
let pageList = [];
-let categoryPagesDeck = null;
-let categoryNavigation = null;
+let viewsDeck = null;
+let pageNav = null;
let activeComponent = null;
let searchKeyboardShortcut = null;
const { topChromeWindow } = window.browsingContext;
function onHashChange() {
- let page = document.location?.hash.substring(1);
- if (!page || !pageList.includes(page)) {
- page = "recentbrowsing";
+ let view = document.location?.hash.substring(1);
+ if (!view || !pageList.includes(view)) {
+ view = "recentbrowsing";
}
- changePage(page);
+ changeView(view);
}
-function changePage(page) {
- categoryPagesDeck.selectedViewName = page;
- categoryNavigation.currentCategory = page;
- if (categoryNavigation.categoryButtons.includes(document.activeElement)) {
- let currentCategoryButton = categoryNavigation.categoryButtons.find(
- categoryButton => categoryButton.name === page
- );
- (currentCategoryButton || categoryNavigation.categoryButtons[0]).focus();
- }
+function changeView(view) {
+ viewsDeck.selectedViewName = view;
+ pageNav.currentView = view;
}
-function onPagesDeckViewChange() {
- for (const child of categoryPagesDeck.children) {
- if (child.getAttribute("name") == categoryPagesDeck.selectedViewName) {
+function onViewsDeckViewChange() {
+ for (const child of viewsDeck.children) {
+ if (child.getAttribute("name") == viewsDeck.selectedViewName) {
child.enter();
activeComponent = child;
} else {
@@ -41,11 +35,11 @@ function onPagesDeckViewChange() {
}
function recordNavigationTelemetry(source, eventTarget) {
- let page = "recentbrowsing";
+ let view = "recentbrowsing";
if (source === "category-navigation") {
- page = eventTarget.parentNode.currentCategory;
+ view = eventTarget.parentNode.currentView;
} else if (source === "view-all") {
- page = eventTarget.shortPageName;
+ view = eventTarget.shortPageName;
}
// Record telemetry
Services.telemetry.recordEvent(
@@ -54,7 +48,7 @@ function recordNavigationTelemetry(source, eventTarget) {
"navigation",
null,
{
- page,
+ page: view,
source,
}
);
@@ -73,7 +67,7 @@ async function updateSearchTextboxSize() {
const placeholder = msg.attributes[0].value;
maxLength = Math.max(maxLength, placeholder.length);
}
- for (const child of categoryPagesDeck.children) {
+ for (const child of viewsDeck.children) {
child.searchTextboxSize = maxLength;
}
}
@@ -89,15 +83,15 @@ async function updateSearchKeyboardShortcut() {
window.addEventListener("DOMContentLoaded", async () => {
recordEnteredTelemetry();
- categoryNavigation = document.querySelector("fxview-category-navigation");
- categoryPagesDeck = document.querySelector("named-deck");
+ pageNav = document.querySelector("moz-page-nav");
+ viewsDeck = document.querySelector("named-deck");
- for (const item of categoryNavigation.categoryButtons) {
- pageList.push(item.getAttribute("name"));
+ for (const item of pageNav.pageNavButtons) {
+ pageList.push(item.getAttribute("view"));
}
window.addEventListener("hashchange", onHashChange);
- window.addEventListener("change-category", function (event) {
- location.hash = event.target.getAttribute("name");
+ window.addEventListener("change-view", function (event) {
+ location.hash = event.target.getAttribute("view");
window.scrollTo(0, 0);
recordNavigationTelemetry("category-navigation", event.target);
});
@@ -105,11 +99,11 @@ window.addEventListener("DOMContentLoaded", async () => {
recordNavigationTelemetry("view-all", event.originalTarget);
});
- categoryPagesDeck.addEventListener("view-changed", onPagesDeckViewChange);
+ viewsDeck.addEventListener("view-changed", onViewsDeckViewChange);
// set the initial state
onHashChange();
- onPagesDeckViewChange();
+ onViewsDeckViewChange();
await updateSearchTextboxSize();
await updateSearchKeyboardShortcut();
diff --git a/browser/components/firefoxview/fxview-category-button.css b/browser/components/firefoxview/fxview-category-button.css
deleted file mode 100644
index 1bce29f343..0000000000
--- a/browser/components/firefoxview/fxview-category-button.css
+++ /dev/null
@@ -1,125 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-:host {
- border-radius: 4px;
-}
-
-button {
- background-color: initial;
- border: 1px solid var(--in-content-primary-button-border-color);
- -moz-context-properties: fill, fill-opacity;
- fill: currentColor;
- display: grid;
- grid-template-columns: min-content 1fr;
- gap: 12px;
- align-items: center;
- font-size: inherit;
- width: 100%;
- font-weight: normal;
- border-radius: 4px;
- color: inherit;
- text-align: start;
- transition: background-color 150ms;
- padding: var(--fxviewcategorynav-button-padding);
-}
-
-button:hover {
- cursor: pointer;
-}
-
-@media not (prefers-contrast) {
- button {
- border-inline-start: 2px solid transparent;
- border-inline-end: none;
- border-block: none;
- }
-
- button:hover,
- button[selected]:hover {
- background-color: var(--in-content-button-background-hover);
- border-color: var(--in-content-button-border-color-hover);
- }
-
- button[selected]:hover {
- border-inline-start-color: inherit;
- }
-
- button[selected],
- button[selected]:hover {
- border-inline-start: 2px solid;
- }
-
- button[selected]:not(:focus-visible) {
- border-start-start-radius: 0;
- border-end-start-radius: 0;
- }
-
- button[selected]:not(:hover) {
- color: var(--in-content-accent-color);
- background-color: color-mix(in srgb, var(--fxview-primary-action-background) 5%, transparent);
- border-inline-start-color: var(--in-content-accent-color);
- }
-}
-
-@media (prefers-color-scheme: dark) {
- button[selected] {
- background-color: color-mix(in srgb, var(--fxview-primary-action-background) 12%, transparent);
- }
-}
-
-button:focus-visible,
-button[selected]:focus-visible {
- outline: var(--focus-outline);
- outline-offset: var(--focus-outline-offset);
-}
-
-.category-icon {
- background-color: initial;
- background-size: 20px;
- background-repeat: no-repeat;
- background-position: center;
- height: 20px;
- width: 20px;
- -moz-context-properties: fill;
- fill: currentColor;
-}
-
-@media (prefers-contrast) {
- button {
- transition: none;
- border-color: ButtonText;
- background-color: var(--in-content-button-background);
- }
-
- button:hover {
- color: SelectedItem;
- }
-
- button[selected] {
- color: SelectedItemText;
- background-color: SelectedItem;
- border-color: SelectedItem;
- }
-}
-
-slot {
- font-size: 1.13em;
- line-height: 1.4;
- margin: 0;
- padding-inline-start: 0;
- user-select: none;
-}
-
-@media (max-width: 52rem) {
- button {
- grid-template-columns: min-content;
- justify-content: center;
- margin-inline: 0;
- }
-
- slot {
- display: none;
- }
-}
diff --git a/browser/components/firefoxview/fxview-category-navigation.css b/browser/components/firefoxview/fxview-category-navigation.css
deleted file mode 100644
index 571059699b..0000000000
--- a/browser/components/firefoxview/fxview-category-navigation.css
+++ /dev/null
@@ -1,60 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-:host {
- --fxviewcategorynav-button-padding: 8px;
- margin-inline-start: 42px;
- position: sticky;
- top: 0;
- height: 100vh;
-}
-
-nav {
- display: grid;
- grid-template-rows: min-content 1fr auto;
- gap: 25px;
- margin-block-start: var(--fxview-margin-top);
-}
-
-.category-nav-header {
- /* Align the header text/icon with the category button icons */
- margin-inline-start: var(--fxviewcategorynav-button-padding);
-}
-
-.category-nav-buttons,
-::slotted(.category-nav-footer) {
- display: grid;
- grid-template-columns: 1fr;
- grid-auto-rows: min-content;
- gap: 4px;
-}
-
-@media (prefers-contrast) {
- .category-nav-buttons {
- gap: 8px;
- }
-}
-
-@media (prefers-reduced-motion) {
- /* (See Bug 1610081) Setting border-inline-end to add clear differentiation between side navigation and main content area */
- :host {
- border-inline-end: 1px solid var(--in-content-border-color);
- }
-}
-
-@media (max-width: 52rem) {
- :host {
- grid-template-rows: 1fr auto;
- }
-
- .category-nav-header {
- display: none;
- }
-
- .category-nav-buttons,
- ::slotted(.category-nav-footer) {
- justify-content: center;
- grid-template-columns: min-content;
- }
-}
diff --git a/browser/components/firefoxview/fxview-category-navigation.mjs b/browser/components/firefoxview/fxview-category-navigation.mjs
deleted file mode 100644
index abacd17df1..0000000000
--- a/browser/components/firefoxview/fxview-category-navigation.mjs
+++ /dev/null
@@ -1,150 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-import { html } from "chrome://global/content/vendor/lit.all.mjs";
-import { MozLitElement } from "chrome://global/content/lit-utils.mjs";
-
-export default class FxviewCategoryNavigation extends MozLitElement {
- static properties = {
- currentCategory: { type: String },
- };
-
- static queries = {
- categoryButtonsSlot: "slot[name=category-button]",
- };
-
- get categoryButtons() {
- return this.categoryButtonsSlot
- .assignedNodes()
- .filter(node => !node.hidden);
- }
-
- onChangeCategory(e) {
- this.currentCategory = e.target.name;
- }
-
- handleFocus(e) {
- if (e.key == "ArrowDown" || e.key == "ArrowRight") {
- e.preventDefault();
- this.focusNextCategory();
- } else if (e.key == "ArrowUp" || e.key == "ArrowLeft") {
- e.preventDefault();
- this.focusPreviousCategory();
- }
- }
-
- focusPreviousCategory() {
- let categoryButtons = this.categoryButtons;
- let currentIndex = categoryButtons.findIndex(b => b.selected);
- let prev = categoryButtons[currentIndex - 1];
- if (prev) {
- prev.activate();
- prev.focus();
- }
- }
-
- focusNextCategory() {
- let categoryButtons = this.categoryButtons;
- let currentIndex = categoryButtons.findIndex(b => b.selected);
- let next = categoryButtons[currentIndex + 1];
- if (next) {
- next.activate();
- next.focus();
- }
- }
-
- render() {
- return html`
- <link
- rel="stylesheet"
- href="chrome://browser/content/firefoxview/fxview-category-navigation.css"
- />
- <nav>
- <div class="category-nav-header">
- <slot name="category-nav-header"></slot>
- </div>
- <div
- class="category-nav-buttons"
- role="tablist"
- aria-orientation="vertical"
- >
- <slot
- name="category-button"
- @change-category=${this.onChangeCategory}
- @keydown=${this.handleFocus}
- ></slot>
- </div>
- <div class="category-nav-footer">
- <slot name="category-nav-footer"></slot>
- </div>
- </nav>
- `;
- }
-
- updated() {
- let categorySelected = false;
- let assignedCategories = this.categoryButtons;
- for (let button of assignedCategories) {
- button.selected = button.name == this.currentCategory;
- categorySelected = categorySelected || button.selected;
- }
- if (!categorySelected && assignedCategories.length) {
- // Current category has no matching category, reset to the first category.
- assignedCategories[0].activate();
- }
- }
-}
-customElements.define("fxview-category-navigation", FxviewCategoryNavigation);
-
-export class FxviewCategoryButton extends MozLitElement {
- static properties = {
- selected: { type: Boolean },
- };
-
- static queries = {
- buttonEl: "button",
- };
-
- connectedCallback() {
- super.connectedCallback();
- this.setAttribute("role", "tab");
- }
-
- get name() {
- return this.getAttribute("name");
- }
-
- activate() {
- this.dispatchEvent(
- new CustomEvent("change-category", {
- bubbles: true,
- composed: true,
- })
- );
- }
-
- render() {
- return html`
- <link
- rel="stylesheet"
- href="chrome://browser/content/firefoxview/fxview-category-button.css"
- />
- <button
- aria-hidden="true"
- tabindex="-1"
- ?selected=${this.selected}
- @click=${this.activate}
- >
- <span class="category-icon" part="icon"></span>
- <slot></slot>
- </button>
- `;
- }
-
- updated() {
- this.setAttribute("aria-selected", this.selected);
- this.setAttribute("tabindex", this.selected ? 0 : -1);
- }
-}
-customElements.define("fxview-category-button", FxviewCategoryButton);
diff --git a/browser/components/firefoxview/fxview-tab-list.css b/browser/components/firefoxview/fxview-tab-list.css
index d32d9c9c08..5a4bff023a 100644
--- a/browser/components/firefoxview/fxview-tab-list.css
+++ b/browser/components/firefoxview/fxview-tab-list.css
@@ -2,14 +2,33 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- .fxview-tab-list {
+:host {
display: grid;
- grid-template-columns: min-content 3fr min-content 2fr 1fr 1fr min-content min-content;
- gap: 6px;
+ row-gap: var(--space-xsmall);
}
-:host([compactRows]) .fxview-tab-list {
- grid-template-columns: min-content 1fr min-content min-content min-content;
+.fxview-tab-list {
+ display: grid;
+ grid-template-columns: min-content 3fr min-content 2fr 1fr 1fr min-content min-content;
+ gap: var(--space-xsmall);
+
+ &.pinned {
+ display: flex;
+ flex-wrap: wrap;
+
+ > virtual-list {
+ display: block;
+ }
+
+ > fxview-tab-row {
+ display: block;
+ margin-block-end: var(--space-xsmall);
+ }
+ }
+
+ :host([compactRows]) & {
+ grid-template-columns: min-content 1fr min-content min-content min-content;
+ }
}
virtual-list {
diff --git a/browser/components/firefoxview/fxview-tab-list.mjs b/browser/components/firefoxview/fxview-tab-list.mjs
index 055540722a..978ab79724 100644
--- a/browser/components/firefoxview/fxview-tab-list.mjs
+++ b/browser/components/firefoxview/fxview-tab-list.mjs
@@ -45,8 +45,11 @@ if (!window.IS_STORYBOOK) {
* @property {string} dateTimeFormat - Expected format for date and/or time
* @property {string} hasPopup - The aria-haspopup attribute for the secondary action, if required
* @property {number} maxTabsLength - The max number of tabs for the list
+ * @property {boolean} pinnedTabsGridView - Whether to show pinned tabs in a grid view
* @property {Array} tabItems - Items to show in the tab list
* @property {string} searchQuery - The query string to highlight, if provided.
+ * @property {string} secondaryActionClass - The class used to style the secondary action element
+ * @property {string} tertiaryActionClass - The class used to style the tertiary action element
*/
export default class FxviewTabList extends MozLitElement {
constructor() {
@@ -59,6 +62,9 @@ export default class FxviewTabList extends MozLitElement {
this.dateTimeFormat = "relative";
this.maxTabsLength = 25;
this.tabItems = [];
+ this.pinnedTabs = [];
+ this.pinnedTabsGridView = false;
+ this.unpinnedTabs = [];
this.compactRows = false;
this.updatesPaused = true;
this.#register();
@@ -71,9 +77,12 @@ export default class FxviewTabList extends MozLitElement {
dateTimeFormat: { type: String },
hasPopup: { type: String },
maxTabsLength: { type: Number },
+ pinnedTabsGridView: { type: Boolean },
tabItems: { type: Array },
updatesPaused: { type: Boolean },
searchQuery: { type: String },
+ secondaryActionClass: { type: String },
+ tertiaryActionClass: { type: String },
};
static queries = {
@@ -99,8 +108,20 @@ export default class FxviewTabList extends MozLitElement {
}
}
- if (this.maxTabsLength > 0) {
+ // Move pinned tabs to the beginning of the list
+ if (this.pinnedTabsGridView) {
// Can set maxTabsLength to -1 to have no max
+ this.unpinnedTabs = this.tabItems.filter(
+ tab => !tab.indicators?.includes("pinned")
+ );
+ this.pinnedTabs = this.tabItems.filter(tab =>
+ tab.indicators?.includes("pinned")
+ );
+ if (this.maxTabsLength > 0) {
+ this.unpinnedTabs = this.unpinnedTabs.slice(0, this.maxTabsLength);
+ }
+ this.tabItems = [...this.pinnedTabs, ...this.unpinnedTabs];
+ } else if (this.maxTabsLength > 0) {
this.tabItems = this.tabItems.slice(0, this.maxTabsLength);
}
}
@@ -176,56 +197,93 @@ export default class FxviewTabList extends MozLitElement {
if (e.code == "ArrowUp") {
// Focus either the link or button of the previous row based on this.currentActiveElementId
e.preventDefault();
- this.focusPrevRow();
+ if (
+ (this.pinnedTabsGridView &&
+ this.activeIndex >= this.pinnedTabs.length) ||
+ !this.pinnedTabsGridView
+ ) {
+ this.focusPrevRow();
+ }
} else if (e.code == "ArrowDown") {
// Focus either the link or button of the next row based on this.currentActiveElementId
e.preventDefault();
- this.focusNextRow();
+ if (
+ this.pinnedTabsGridView &&
+ this.activeIndex < this.pinnedTabs.length
+ ) {
+ this.focusIndex(this.pinnedTabs.length);
+ } else {
+ this.focusNextRow();
+ }
} else if (e.code == "ArrowRight") {
// Focus either the link or the button in the current row and
// set this.currentActiveElementId to that element's ID
e.preventDefault();
if (document.dir == "rtl") {
- if (
- (fxviewTabRow.soundPlaying || fxviewTabRow.muted) &&
- this.currentActiveElementId === "fxview-tab-row-secondary-button"
- ) {
- this.currentActiveElementId = fxviewTabRow.focusMediaButton();
- } else {
- this.currentActiveElementId = fxviewTabRow.focusLink();
- }
- } else if (
- (fxviewTabRow.soundPlaying || fxviewTabRow.muted) &&
- this.currentActiveElementId === "fxview-tab-row-main"
- ) {
- this.currentActiveElementId = fxviewTabRow.focusMediaButton();
+ this.moveFocusLeft(fxviewTabRow);
} else {
- this.currentActiveElementId = fxviewTabRow.focusButton();
+ this.moveFocusRight(fxviewTabRow);
}
} else if (e.code == "ArrowLeft") {
// Focus either the link or the button in the current row and
// set this.currentActiveElementId to that element's ID
e.preventDefault();
if (document.dir == "rtl") {
- if (
- (fxviewTabRow.soundPlaying || fxviewTabRow.muted) &&
- this.currentActiveElementId === "fxview-tab-row-main"
- ) {
- this.currentActiveElementId = fxviewTabRow.focusMediaButton();
- } else {
- this.currentActiveElementId = fxviewTabRow.focusButton();
- }
- } else if (
- (fxviewTabRow.soundPlaying || fxviewTabRow.muted) &&
- this.currentActiveElementId === "fxview-tab-row-secondary-button"
- ) {
- this.currentActiveElementId = fxviewTabRow.focusMediaButton();
+ this.moveFocusRight(fxviewTabRow);
} else {
- this.currentActiveElementId = fxviewTabRow.focusLink();
+ this.moveFocusLeft(fxviewTabRow);
}
}
}
+ moveFocusRight(fxviewTabRow) {
+ if (
+ this.pinnedTabsGridView &&
+ fxviewTabRow.indicators?.includes("pinned")
+ ) {
+ this.focusNextRow();
+ } else if (
+ (fxviewTabRow.indicators?.includes("soundplaying") ||
+ fxviewTabRow.indicators?.includes("muted")) &&
+ this.currentActiveElementId === "fxview-tab-row-main"
+ ) {
+ this.currentActiveElementId = fxviewTabRow.focusMediaButton();
+ } else if (
+ this.currentActiveElementId === "fxview-tab-row-media-button" ||
+ this.currentActiveElementId === "fxview-tab-row-main"
+ ) {
+ this.currentActiveElementId = fxviewTabRow.focusSecondaryButton();
+ } else if (
+ fxviewTabRow.tertiaryButtonEl &&
+ this.currentActiveElementId === "fxview-tab-row-secondary-button"
+ ) {
+ this.currentActiveElementId = fxviewTabRow.focusTertiaryButton();
+ }
+ }
+
+ moveFocusLeft(fxviewTabRow) {
+ if (
+ this.pinnedTabsGridView &&
+ (fxviewTabRow.indicators?.includes("pinned") ||
+ (this.currentActiveElementId === "fxview-tab-row-main" &&
+ this.activeIndex === this.pinnedTabs.length))
+ ) {
+ this.focusPrevRow();
+ } else if (
+ this.currentActiveElementId === "fxview-tab-row-tertiary-button"
+ ) {
+ this.currentActiveElementId = fxviewTabRow.focusSecondaryButton();
+ } else if (
+ (fxviewTabRow.indicators?.includes("soundplaying") ||
+ fxviewTabRow.indicators?.includes("muted")) &&
+ this.currentActiveElementId === "fxview-tab-row-secondary-button"
+ ) {
+ this.currentActiveElementId = fxviewTabRow.focusMediaButton();
+ } else {
+ this.currentActiveElementId = fxviewTabRow.focusLink();
+ }
+ }
+
focusPrevRow() {
this.focusIndex(this.activeIndex - 1);
}
@@ -236,12 +294,18 @@ export default class FxviewTabList extends MozLitElement {
async focusIndex(index) {
// Focus link or button of item
- if (lazy.virtualListEnabledPref) {
- let row = this.rootVirtualListEl.getItem(index);
+ if (
+ ((this.pinnedTabsGridView && index > this.pinnedTabs.length) ||
+ !this.pinnedTabsGridView) &&
+ lazy.virtualListEnabledPref
+ ) {
+ let row = this.rootVirtualListEl.getItem(index - this.pinnedTabs.length);
if (!row) {
return;
}
- let subList = this.rootVirtualListEl.getSubListForItem(index);
+ let subList = this.rootVirtualListEl.getSubListForItem(
+ index - this.pinnedTabs.length
+ );
if (!subList) {
return;
}
@@ -286,23 +350,30 @@ export default class FxviewTabList extends MozLitElement {
return html`
<fxview-tab-row
exportparts="secondary-button"
+ class=${classMap({
+ pinned:
+ this.pinnedTabsGridView && tabItem.indicators?.includes("pinned"),
+ })}
?active=${i == this.activeIndex}
?compact=${this.compactRows}
.hasPopup=${this.hasPopup}
- .containerObj=${tabItem.containerObj}
+ .containerObj=${ifDefined(tabItem.containerObj)}
.currentActiveElementId=${this.currentActiveElementId}
.dateTimeFormat=${this.dateTimeFormat}
.favicon=${tabItem.icon}
- .isBookmark=${ifDefined(tabItem.isBookmark)}
- .muted=${ifDefined(tabItem.muted)}
- .pinned=${ifDefined(tabItem.pinned)}
+ .indicators=${ifDefined(tabItem.indicators)}
+ .pinnedTabsGridView=${ifDefined(this.pinnedTabsGridView)}
.primaryL10nId=${tabItem.primaryL10nId}
.primaryL10nArgs=${ifDefined(tabItem.primaryL10nArgs)}
- role="listitem"
+ role=${this.pinnedTabsGridView && tabItem.indicators?.includes("pinned")
+ ? "none"
+ : "listitem"}
.secondaryL10nId=${tabItem.secondaryL10nId}
.secondaryL10nArgs=${ifDefined(tabItem.secondaryL10nArgs)}
- .attention=${ifDefined(tabItem.attention)}
- .soundPlaying=${ifDefined(tabItem.soundPlaying)}
+ .tertiaryL10nId=${ifDefined(tabItem.tertiaryL10nId)}
+ .tertiaryL10nArgs=${ifDefined(tabItem.tertiaryL10nArgs)}
+ .secondaryActionClass=${this.secondaryActionClass}
+ .tertiaryActionClass=${ifDefined(this.tertiaryActionClass)}
.sourceClosedId=${ifDefined(tabItem.sourceClosedId)}
.sourceWindowId=${ifDefined(tabItem.sourceWindowId)}
.closedId=${ifDefined(tabItem.closedId || tabItem.closedId)}
@@ -311,7 +382,6 @@ export default class FxviewTabList extends MozLitElement {
.time=${ifDefined(time)}
.timeMsPref=${ifDefined(this.timeMsPref)}
.title=${tabItem.title}
- .titleChanged=${ifDefined(tabItem.titleChanged)}
.url=${tabItem.url}
></fxview-tab-row>
`;
@@ -326,9 +396,26 @@ export default class FxviewTabList extends MozLitElement {
rel="stylesheet"
href="chrome://browser/content/firefoxview/fxview-tab-list.css"
/>
+ ${when(
+ this.pinnedTabsGridView && this.pinnedTabs.length,
+ () => html`
+ <div
+ id="fxview-tab-list"
+ class="fxview-tab-list pinned"
+ data-l10n-id="firefoxview-pinned-tabs"
+ role="tablist"
+ @keydown=${this.handleFocusElementInRow}
+ >
+ ${this.pinnedTabs.map((tabItem, i) =>
+ this.itemTemplate(tabItem, i)
+ )}
+ </div>
+ `
+ )}
<div
id="fxview-tab-list"
class="fxview-tab-list"
+ data-l10n-id="firefoxview-tabs"
role="list"
@keydown=${this.handleFocusElementInRow}
>
@@ -337,7 +424,12 @@ export default class FxviewTabList extends MozLitElement {
() => html`
<virtual-list
.activeIndex=${this.activeIndex}
- .items=${this.tabItems}
+ .pinnedTabsIndexOffset=${this.pinnedTabsGridView
+ ? this.pinnedTabs.length
+ : 0}
+ .items=${this.pinnedTabsGridView
+ ? this.unpinnedTabs
+ : this.tabItems}
.template=${this.itemTemplate}
></virtual-list>
`
@@ -374,23 +466,23 @@ customElements.define("fxview-tab-list", FxviewTabList);
* @property {string} currentActiveElementId - ID of currently focused element within each tab item
* @property {string} dateTimeFormat - Expected format for date and/or time
* @property {string} hasPopup - The aria-haspopup attribute for the secondary action, if required
- * @property {boolean} isBookmark - Whether an open tab is bookmarked
+ * @property {string} indicators - An array of tab indicators if any are present
* @property {number} closedId - The tab ID for when the tab item was closed.
* @property {number} sourceClosedId - The closedId of the closed window its from if applicable
* @property {number} sourceWindowId - The sessionstore id of the window its from if applicable
* @property {string} favicon - The favicon for the tab item.
- * @property {boolean} muted - Whether an open tab is muted
- * @property {boolean} pinned - Whether an open tab is pinned
+ * @property {boolean} pinnedTabsGridView - Whether the show pinned tabs in a grid view
* @property {string} primaryL10nId - The l10n id used for the primary action element
* @property {string} primaryL10nArgs - The l10n args used for the primary action element
* @property {string} secondaryL10nId - The l10n id used for the secondary action button
* @property {string} secondaryL10nArgs - The l10n args used for the secondary action element
- * @property {boolean} attention - Whether to show a notification dot
- * @property {boolean} soundPlaying - Whether an open tab has soundPlaying
+ * @property {string} secondaryActionClass - The class used to style the secondary action element
+ * @property {string} tertiaryL10nId - The l10n id used for the tertiary action button
+ * @property {string} tertiaryL10nArgs - The l10n args used for the tertiary action element
+ * @property {string} tertiaryActionClass - The class used to style the tertiary action element
* @property {object} tabElement - The MozTabbrowserTab element for the tab item.
* @property {number} time - The timestamp for when the tab was last accessed.
* @property {string} title - The title for the tab item.
- * @property {boolean} titleChanged - Whether the title has changed for an open tab
* @property {string} url - The url for the tab item.
* @property {number} timeMsPref - The frequency in milliseconds of updates to relative time
* @property {string} searchQuery - The query string to highlight, if provided.
@@ -410,31 +502,33 @@ export class FxviewTabRow extends MozLitElement {
dateTimeFormat: { type: String },
favicon: { type: String },
hasPopup: { type: String },
- isBookmark: { type: Boolean },
- muted: { type: Boolean },
- pinned: { type: Boolean },
+ indicators: { type: Array },
+ pinnedTabsGridView: { type: Boolean },
primaryL10nId: { type: String },
primaryL10nArgs: { type: String },
secondaryL10nId: { type: String },
secondaryL10nArgs: { type: String },
- soundPlaying: { type: Boolean },
+ secondaryActionClass: { type: String },
+ tertiaryL10nId: { type: String },
+ tertiaryL10nArgs: { type: String },
+ tertiaryActionClass: { type: String },
closedId: { type: Number },
sourceClosedId: { type: Number },
sourceWindowId: { type: String },
tabElement: { type: Object },
time: { type: Number },
title: { type: String },
- titleChanged: { type: Boolean },
- attention: { type: Boolean },
timeMsPref: { type: Number },
url: { type: String },
searchQuery: { type: String },
};
static queries = {
- mainEl: ".fxview-tab-row-main",
- buttonEl: "#fxview-tab-row-secondary-button:not([hidden])",
+ mainEl: "#fxview-tab-row-main",
+ secondaryButtonEl: "#fxview-tab-row-secondary-button:not([hidden])",
+ tertiaryButtonEl: "#fxview-tab-row-tertiary-button",
mediaButtonEl: "#fxview-tab-row-media-button",
+ pinnedTabButtonEl: "button#fxview-tab-row-main",
};
get currentFocusable() {
@@ -445,13 +539,40 @@ export class FxviewTabRow extends MozLitElement {
return focusItem;
}
+ connectedCallback() {
+ super.connectedCallback();
+ this.addEventListener("keydown", this.handleKeydown);
+ }
+
+ disconnectedCallback() {
+ super.disconnectedCallback();
+ this.removeEventListener("keydown", this.handleKeydown);
+ }
+
+ handleKeydown(e) {
+ if (
+ this.active &&
+ this.pinnedTabsGridView &&
+ this.indicators?.includes("pinned") &&
+ e.key === "m" &&
+ e.ctrlKey
+ ) {
+ this.muteOrUnmuteTab();
+ }
+ }
+
focus() {
this.currentFocusable.focus();
}
- focusButton() {
- this.buttonEl.focus();
- return this.buttonEl.id;
+ focusSecondaryButton() {
+ this.secondaryButtonEl.focus();
+ return this.secondaryButtonEl.id;
+ }
+
+ focusTertiaryButton() {
+ this.tertiaryButtonEl.focus();
+ return this.tertiaryButtonEl.id;
}
focusMediaButton() {
@@ -562,6 +683,9 @@ export class FxviewTabRow extends MozLitElement {
secondaryActionHandler(event) {
if (
+ (this.pinnedTabsGridView &&
+ this.indicators?.includes("pinned") &&
+ event.type == "contextmenu") ||
(event.type == "click" && event.detail && !event.altKey) ||
// detail=0 is from keyboard
(event.type == "click" && !event.detail)
@@ -577,12 +701,108 @@ export class FxviewTabRow extends MozLitElement {
}
}
- muteOrUnmuteTab() {
+ tertiaryActionHandler(event) {
+ if (
+ (event.type == "click" && event.detail && !event.altKey) ||
+ // detail=0 is from keyboard
+ (event.type == "click" && !event.detail)
+ ) {
+ event.preventDefault();
+ this.dispatchEvent(
+ new CustomEvent("fxview-tab-list-tertiary-action", {
+ bubbles: true,
+ composed: true,
+ detail: { originalEvent: event, item: this },
+ })
+ );
+ }
+ }
+
+ muteOrUnmuteTab(e) {
+ e?.preventDefault();
+ // If the tab has no sound playing, the mute/unmute button will be removed when toggled.
+ // We should move the focus to the right in that case. This does not apply to pinned tabs
+ // on the Open Tabs page.
+ let shouldMoveFocus =
+ (!this.pinnedTabsGridView ||
+ (!this.indicators.includes("pinned") && this.pinnedTabsGridView)) &&
+ this.mediaButtonEl &&
+ !this.indicators.includes("soundplaying") &&
+ this.currentActiveElementId === "fxview-tab-row-media-button";
+
+ // detail=0 is from keyboard
+ if (e?.type == "click" && !e?.detail && shouldMoveFocus) {
+ let tabList = this.getRootNode().host;
+ if (document.dir == "rtl") {
+ tabList.moveFocusLeft(this);
+ } else {
+ tabList.moveFocusRight(this);
+ }
+ }
this.tabElement.toggleMuteAudio();
- this.muted = !this.muted;
}
- render() {
+ #faviconTemplate() {
+ return html`<span
+ class="${classMap({
+ "fxview-tab-row-favicon-wrapper": true,
+ pinned: this.indicators?.includes("pinned"),
+ pinnedOnNewTab: this.indicators?.includes("pinnedOnNewTab"),
+ attention: this.indicators?.includes("attention"),
+ bookmark: this.indicators?.includes("bookmark"),
+ })}"
+ >
+ <span
+ class="fxview-tab-row-favicon icon"
+ id="fxview-tab-row-favicon"
+ style=${styleMap({
+ backgroundImage: `url(${this.getImageUrl(this.favicon, this.url)})`,
+ })}
+ ></span>
+ ${when(
+ this.pinnedTabsGridView &&
+ this.indicators?.includes("pinned") &&
+ (this.indicators?.includes("muted") ||
+ this.indicators?.includes("soundplaying")),
+ () => html`
+ <button
+ class="fxview-tab-row-pinned-media-button ghost-button icon-button"
+ id="fxview-tab-row-media-button"
+ tabindex="-1"
+ data-l10n-id=${this.indicators?.includes("muted")
+ ? "fxviewtabrow-unmute-tab-button-no-context"
+ : "fxviewtabrow-mute-tab-button-no-context"}
+ muted=${this.indicators?.includes("muted")}
+ soundplaying=${this.indicators?.includes("soundplaying") &&
+ !this.indicators?.includes("muted")}
+ @click=${this.muteOrUnmuteTab}
+ ></button>
+ `
+ )}
+ </span>`;
+ }
+
+ #pinnedTabItemTemplate() {
+ return html` <button
+ class="fxview-tab-row-main ghost-button semi-transparent"
+ id="fxview-tab-row-main"
+ aria-haspopup=${ifDefined(this.hasPopup)}
+ data-l10n-id=${ifDefined(this.primaryL10nId)}
+ data-l10n-args=${ifDefined(this.primaryL10nArgs)}
+ tabindex=${this.active &&
+ this.currentActiveElementId === "fxview-tab-row-main"
+ ? "0"
+ : "-1"}
+ role="tab"
+ @click=${this.primaryActionHandler}
+ @keydown=${this.primaryActionHandler}
+ @contextmenu=${this.secondaryActionHandler}
+ >
+ ${this.#faviconTemplate()}
+ </button>`;
+ }
+
+ #unpinnedTabItemTemplate() {
const title = this.title;
const relativeString = this.relativeTime(
this.time,
@@ -598,25 +818,8 @@ export class FxviewTabRow extends MozLitElement {
const timeString = this.timeFluentId(this.dateTimeFormat);
const time = this.time;
const timeArgs = JSON.stringify({ time });
- return html`
- ${when(
- this.containerObj,
- () => html`
- <link
- rel="stylesheet"
- href="chrome://browser/content/usercontext/usercontext.css"
- />
- `
- )}
- <link
- rel="stylesheet"
- href="chrome://global/skin/in-content/common.css"
- />
- <link
- rel="stylesheet"
- href="chrome://browser/content/firefoxview/fxview-tab-row.css"
- />
- <a
+
+ return html`<a
href=${ifDefined(this.url)}
class="fxview-tab-row-main"
id="fxview-tab-row-main"
@@ -628,29 +831,9 @@ export class FxviewTabRow extends MozLitElement {
data-l10n-args=${ifDefined(this.primaryL10nArgs)}
@click=${this.primaryActionHandler}
@keydown=${this.primaryActionHandler}
+ title=${!this.primaryL10nId ? this.url : null}
>
- <span
- class="${classMap({
- "fxview-tab-row-favicon-wrapper": true,
- bookmark: this.isBookmark && !this.attention,
- notification: this.pinned
- ? this.attention || this.titleChanged
- : this.attention,
- soundplaying: this.soundPlaying && !this.muted && this.pinned,
- muted: this.muted && this.pinned,
- })}"
- >
- <span
- class="fxview-tab-row-favicon icon"
- id="fxview-tab-row-favicon"
- style=${styleMap({
- backgroundImage: `url(${this.getImageUrl(
- this.favicon,
- this.url
- )})`,
- })}
- ></span>
- </span>
+ ${this.#faviconTemplate()}
<span
class="fxview-tab-row-title text-truncated-ellipsis"
id="fxview-tab-row-title"
@@ -701,34 +884,42 @@ export class FxviewTabRow extends MozLitElement {
</span>
</a>
${when(
- (this.soundPlaying || this.muted) && !this.pinned,
+ this.indicators?.includes("soundplaying") ||
+ this.indicators?.includes("muted"),
() => html`<button
- class=fxview-tab-row-button ghost-button icon-button semi-transparent"
- id="fxview-tab-row-media-button"
- data-l10n-id=${
- this.muted
- ? "fxviewtabrow-unmute-tab-button"
- : "fxviewtabrow-mute-tab-button"
- }
- data-l10n-args=${JSON.stringify({ tabTitle: title })}
- muted=${ifDefined(this.muted)}
- soundplaying=${this.soundPlaying && !this.muted}
- @click=${this.muteOrUnmuteTab}
- tabindex="${
- this.active &&
- this.currentActiveElementId === "fxview-tab-row-media-button"
- ? "0"
- : "-1"
- }"
- ></button>`,
+ class=fxview-tab-row-button ghost-button icon-button semi-transparent"
+ id="fxview-tab-row-media-button"
+ data-l10n-id=${
+ this.indicators?.includes("muted")
+ ? "fxviewtabrow-unmute-tab-button-no-context"
+ : "fxviewtabrow-mute-tab-button-no-context"
+ }
+ muted=${this.indicators?.includes("muted")}
+ soundplaying=${
+ this.indicators?.includes("soundplaying") &&
+ !this.indicators?.includes("muted")
+ }
+ @click=${this.muteOrUnmuteTab}
+ tabindex="${
+ this.active &&
+ this.currentActiveElementId === "fxview-tab-row-media-button"
+ ? "0"
+ : "-1"
+ }"
+ ></button>`,
() => html`<span></span>`
)}
${when(
this.secondaryL10nId && this.secondaryActionHandler,
() => html`<button
- class="fxview-tab-row-button ghost-button icon-button semi-transparent"
+ class=${classMap({
+ "fxview-tab-row-button": true,
+ "ghost-button": true,
+ "icon-button": true,
+ "semi-transparent": true,
+ [this.secondaryActionClass]: this.secondaryActionClass,
+ })}
id="fxview-tab-row-secondary-button"
- part="secondary-button"
data-l10n-id=${this.secondaryL10nId}
data-l10n-args=${ifDefined(this.secondaryL10nArgs)}
aria-haspopup=${ifDefined(this.hasPopup)}
@@ -739,6 +930,53 @@ export class FxviewTabRow extends MozLitElement {
: "-1"}"
></button>`
)}
+ ${when(
+ this.tertiaryL10nId && this.tertiaryActionHandler,
+ () => html`<button
+ class=${classMap({
+ "fxview-tab-row-button": true,
+ "ghost-button": true,
+ "icon-button": true,
+ "semi-transparent": true,
+ [this.tertiaryActionClass]: this.tertiaryActionClass,
+ })}
+ id="fxview-tab-row-tertiary-button"
+ data-l10n-id=${this.tertiaryL10nId}
+ data-l10n-args=${ifDefined(this.tertiaryL10nArgs)}
+ aria-haspopup=${ifDefined(this.hasPopup)}
+ @click=${this.tertiaryActionHandler}
+ tabindex="${this.active &&
+ this.currentActiveElementId === "fxview-tab-row-tertiary-button"
+ ? "0"
+ : "-1"}"
+ ></button>`
+ )}`;
+ }
+
+ render() {
+ return html`
+ ${when(
+ this.containerObj,
+ () => html`
+ <link
+ rel="stylesheet"
+ href="chrome://browser/content/usercontext/usercontext.css"
+ />
+ `
+ )}
+ <link
+ rel="stylesheet"
+ href="chrome://global/skin/in-content/common.css"
+ />
+ <link
+ rel="stylesheet"
+ href="chrome://browser/content/firefoxview/fxview-tab-row.css"
+ />
+ ${when(
+ this.pinnedTabsGridView && this.indicators?.includes("pinned"),
+ this.#pinnedTabItemTemplate.bind(this),
+ this.#unpinnedTabItemTemplate.bind(this)
+ )}
`;
}
@@ -780,6 +1018,7 @@ export class VirtualList extends MozLitElement {
isAlwaysVisible: { type: Boolean },
isVisible: { type: Boolean, state: true },
isSubList: { type: Boolean },
+ pinnedTabsIndexOffset: { type: Number },
};
createRenderRoot() {
@@ -790,6 +1029,7 @@ export class VirtualList extends MozLitElement {
super();
this.activeIndex = 0;
this.itemOffset = 0;
+ this.pinnedTabsIndexOffset = 0;
this.items = [];
this.subListItems = [];
this.itemHeightEstimate = FXVIEW_ROW_HEIGHT_PX;
@@ -893,14 +1133,16 @@ export class VirtualList extends MozLitElement {
.template=${this.template}
.items=${data}
.itemHeightEstimate=${this.itemHeightEstimate}
- .itemOffset=${i * this.maxRenderCountEstimate}
+ .itemOffset=${i * this.maxRenderCountEstimate +
+ this.pinnedTabsIndexOffset}
.isAlwaysVisible=${i ==
parseInt(this.activeIndex / this.maxRenderCountEstimate, 10)}
isSubList
></virtual-list>`;
};
- itemTemplate = (data, i) => this.template(data, this.itemOffset + i);
+ itemTemplate = (data, i) =>
+ this.template(data, this.itemOffset + i + this.pinnedTabsIndexOffset);
render() {
if (this.isAlwaysVisible || this.isVisible) {
diff --git a/browser/components/firefoxview/fxview-tab-row.css b/browser/components/firefoxview/fxview-tab-row.css
index ceb059a33b..219d7e8aa2 100644
--- a/browser/components/firefoxview/fxview-tab-row.css
+++ b/browser/components/firefoxview/fxview-tab-row.css
@@ -31,6 +31,12 @@
user-select: none;
cursor: pointer;
text-decoration: none;
+
+ :host(.pinned) & {
+ padding: var(--space-small);
+ min-width: unset;
+ margin: 0;
+ }
}
.fxview-tab-row-main,
@@ -44,6 +50,10 @@
.fxview-tab-row-button.ghost-button.icon-button:enabled:hover {
background-color: var(--fxviewtabrow-element-background-hover);
color: var(--fxviewtabrow-text-color-hover);
+
+ & .fxview-tab-row-favicon-wrapper .fxview-tab-row-favicon::after {
+ stroke: var(--fxview-indicator-stroke-color-hover);
+ }
}
.fxview-tab-row-main:hover:active,
@@ -52,15 +62,16 @@
}
@media (prefers-contrast) {
- .fxview-tab-row-main,
- .fxview-tab-row-main:hover,
- .fxview-tab-row-main:active {
+ a.fxview-tab-row-main,
+ a.fxview-tab-row-main:hover,
+ a.fxview-tab-row-main:active {
background-color: transparent;
border: 1px solid LinkText;
color: LinkText;
}
- .fxview-tab-row-main:visited .fxview-tab-row-main:visited:hover {
+ a.fxview-tab-row-main:visited,
+ a.fxview-tab-row-main:visited:hover {
border: 1px solid VisitedText;
color: VisitedText;
}
@@ -68,14 +79,17 @@
.fxview-tab-row-favicon-wrapper {
height: 16px;
+ position: relative;
- .fxview-tab-row-favicon::after {
+ .fxview-tab-row-favicon::after,
+ .fxview-tab-row-button::after,
+ &.pinned .fxview-tab-row-pinned-media-button {
display: block;
content: "";
background-size: 12px;
background-position: center;
background-repeat: no-repeat;
- position: absolute;
+ position: relative;
height: 12px;
width: 12px;
-moz-context-properties: fill, stroke;
@@ -83,36 +97,47 @@
stroke: var(--fxview-background-color-secondary);
}
- &.bookmark .fxview-tab-row-favicon::after {
- background-image: url("chrome://browser/skin/bookmark-12.svg");
+ &:is(.pinnedOnNewTab, .bookmark):not(.attention) .fxview-tab-row-favicon::after {
inset-block-start: 9px;
inset-inline-end: -6px;
+ }
+
+ &.pinnedOnNewTab .fxview-tab-row-favicon::after,
+ &.pinnedOnNewTab .fxview-tab-row-button::after {
+ background-image: url("chrome://browser/skin/pin-12.svg");
+ }
+
+ &.bookmark .fxview-tab-row-favicon::after,
+ &.bookmark .fxview-tab-row-button::after {
+ background-image: url("chrome://browser/skin/bookmark-12.svg");
fill: var(--fxview-primary-action-background);
}
- &.notification .fxview-tab-row-favicon::after {
+ &.attention .fxview-tab-row-favicon::after,
+ &.attention .fxview-tab-row-button::after {
background-image: radial-gradient(circle, light-dark(rgb(42, 195, 162), rgb(84, 255, 189)), light-dark(rgb(42, 195, 162), rgb(84, 255, 189)) 2px, transparent 2px);
height: 4px;
width: 100%;
inset-block-start: 20px;
}
- &.soundplaying .fxview-tab-row-favicon::after {
- background-image: url("chrome://global/skin/media/audio.svg");
- inset-block-start: -5px;
- inset-inline-end: -7px;
+ &.pinned .fxview-tab-row-pinned-media-button {
+ inset-block-start: -10px;
+ inset-inline-end: -10px;
border-radius: 100%;
background-color: var(--fxview-background-color-secondary);
- padding: 2px;
- }
+ padding: 6px;
+ min-width: 0;
+ min-height: 0;
+ position: absolute;
- &.muted .fxview-tab-row-favicon::after {
- background-image: url("chrome://global/skin/media/audio-muted.svg");
- inset-block-start: -5px;
- inset-inline-end: -7px;
- border-radius: 100%;
- background-color: var(--fxview-background-color-secondary);
- padding: 2px;
+ &[muted="true"] {
+ background-image: url("chrome://global/skin/media/audio-muted.svg");
+ }
+
+ &[soundplaying="true"] {
+ background-image: url("chrome://global/skin/media/audio.svg");
+ }
}
}
@@ -179,26 +204,40 @@
&[soundplaying="true"] {
background-image: url("chrome://global/skin/media/audio.svg");
}
+
+ &.dismiss-button {
+ background-image: url("chrome://global/skin/icons/close.svg");
+ }
+
+ &.options-button {
+ background-image: url("chrome://global/skin/icons/more.svg");
+ }
}
@media (prefers-contrast) {
- .fxview-tab-row-button {
+ .fxview-tab-row-button,
+ button.fxview-tab-row-main {
border: 1px solid ButtonText;
color: ButtonText;
}
- .fxview-tab-row-button.ghost-button.icon-button:enabled:hover {
+ .fxview-tab-row-button.ghost-button.icon-button:enabled:hover,
+ button.fxview-tab-row-main:enabled:hover {
border: 1px solid SelectedItem;
color: SelectedItem;
}
- .fxview-tab-row-button.ghost-button.icon-button:enabled:active {
+ .fxview-tab-row-button.ghost-button.icon-button:enabled:active,
+ button.fxview-tab-row-main:enabled:active {
color: SelectedItem;
}
.fxview-tab-row-button.ghost-button.icon-button:enabled,
.fxview-tab-row-button.ghost-button.icon-button:enabled:hover,
- .fxview-tab-row-button.ghost-button.icon-button:enabled:active {
+ .fxview-tab-row-button.ghost-button.icon-button:enabled:active
+ button.fxview-tab-row-main:enabled,
+ button.fxview-tab-row-main:enabled:hover,
+ button.fxview-tab-row-main:enabled:active {
background-color: ButtonFace;
}
}
diff --git a/browser/components/firefoxview/history.mjs b/browser/components/firefoxview/history.mjs
index 935cc037e9..1fe028449b 100644
--- a/browser/components/firefoxview/history.mjs
+++ b/browser/components/firefoxview/history.mjs
@@ -418,7 +418,7 @@ class HistoryInView extends ViewPage {
></h3>
<fxview-tab-list
slot="main"
- class="with-context-menu"
+ secondaryActionClass="options-button"
dateTimeFormat=${historyItem.l10nId.includes("prev-month")
? "dateTime"
: "time"}
@@ -442,7 +442,7 @@ class HistoryInView extends ViewPage {
</h3>
<fxview-tab-list
slot="main"
- class="with-context-menu"
+ secondaryActionClass="options-button"
dateTimeFormat="dateTime"
hasPopup="menu"
maxTabsLength=${this.maxTabsLength}
@@ -520,7 +520,7 @@ class HistoryInView extends ViewPage {
)}
<fxview-tab-list
slot="main"
- class="with-context-menu"
+ secondaryActionClass="options-button"
dateTimeFormat="dateTime"
hasPopup="menu"
maxTabsLength="-1"
diff --git a/browser/components/firefoxview/jar.mn b/browser/components/firefoxview/jar.mn
index 27eeaaef80..1e5cc3e690 100644
--- a/browser/components/firefoxview/jar.mn
+++ b/browser/components/firefoxview/jar.mn
@@ -15,9 +15,6 @@ browser.jar:
content/browser/firefoxview/view-syncedtabs.css
content/browser/firefoxview/recentbrowsing.mjs
content/browser/firefoxview/firefoxview.css
- content/browser/firefoxview/fxview-category-button.css
- content/browser/firefoxview/fxview-category-navigation.css
- content/browser/firefoxview/fxview-category-navigation.mjs
content/browser/firefoxview/fxview-empty-state.css
content/browser/firefoxview/fxview-empty-state.mjs
content/browser/firefoxview/helpers.mjs
@@ -29,12 +26,12 @@ browser.jar:
content/browser/firefoxview/recentlyclosed.mjs
content/browser/firefoxview/viewpage.mjs
content/browser/firefoxview/history-empty.svg (content/history-empty.svg)
- content/browser/firefoxview/category-history.svg (content/category-history.svg)
- content/browser/firefoxview/category-opentabs.svg (content/category-opentabs.svg)
- content/browser/firefoxview/category-recentbrowsing.svg (content/category-recentbrowsing.svg)
- content/browser/firefoxview/category-recentlyclosed.svg (content/category-recentlyclosed.svg)
- content/browser/firefoxview/category-syncedtabs.svg (content/category-syncedtabs.svg)
content/browser/firefoxview/recentlyclosed-empty.svg (content/recentlyclosed-empty.svg)
content/browser/firefoxview/synced-tabs-error.svg (content/synced-tabs-error.svg)
content/browser/callout-tab-pickup.svg (content/callout-tab-pickup.svg)
content/browser/callout-tab-pickup-dark.svg (content/callout-tab-pickup-dark.svg)
+ content/browser/firefoxview/view-history.svg (content/view-history.svg)
+ content/browser/firefoxview/view-opentabs.svg (content/view-opentabs.svg)
+ content/browser/firefoxview/view-recentbrowsing.svg (content/view-recentbrowsing.svg)
+ content/browser/firefoxview/view-recentlyclosed.svg (content/view-recentlyclosed.svg)
+ content/browser/firefoxview/view-syncedtabs.svg (content/view-syncedtabs.svg)
diff --git a/browser/components/firefoxview/opentabs.mjs b/browser/components/firefoxview/opentabs.mjs
index 6ac63a4b3f..8d7723e931 100644
--- a/browser/components/firefoxview/opentabs.mjs
+++ b/browser/components/firefoxview/opentabs.mjs
@@ -21,8 +21,10 @@ import { ViewPage, ViewPageContent } from "./viewpage.mjs";
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
+ BookmarkList: "resource://gre/modules/BookmarkList.sys.mjs",
ContextualIdentityService:
"resource://gre/modules/ContextualIdentityService.sys.mjs",
+ NewTabUtils: "resource://gre/modules/NewTabUtils.sys.mjs",
NonPrivateTabs: "resource:///modules/OpenTabs.sys.mjs",
getTabsTargetForWindow: "resource:///modules/OpenTabs.sys.mjs",
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
@@ -106,6 +108,10 @@ class OpenTabsInView extends ViewPage {
this
);
}
+
+ this.bookmarkList = new lazy.BookmarkList(this.#getAllTabUrls(), () =>
+ this.viewCards.forEach(card => card.requestUpdate())
+ );
}
shouldUpdate(changedProperties) {
@@ -141,6 +147,8 @@ class OpenTabsInView extends ViewPage {
this
);
}
+
+ this.bookmarkList.removeListeners();
}
viewVisibleCallback() {
@@ -161,6 +169,13 @@ class OpenTabsInView extends ViewPage {
}
}
+ #getAllTabUrls() {
+ return this.openTabsTarget
+ .getAllTabs()
+ .map(({ linkedBrowser }) => linkedBrowser?.currentURI?.spec)
+ .filter(Boolean);
+ }
+
render() {
if (this.recentBrowsing) {
return this.getRecentBrowsingTemplate();
@@ -268,6 +283,7 @@ class OpenTabsInView extends ViewPage {
winID: currentWindowIndex,
})}"
.searchQuery=${this.searchQuery}
+ .bookmarkList=${this.bookmarkList}
></view-opentabs-card>
`
)}
@@ -282,6 +298,7 @@ class OpenTabsInView extends ViewPage {
data-l10n-id="firefoxview-opentabs-window-header"
data-l10n-args="${JSON.stringify({ winID })}"
.searchQuery=${this.searchQuery}
+ .bookmarkList=${this.bookmarkList}
></view-opentabs-card>
`
)}
@@ -318,6 +335,7 @@ class OpenTabsInView extends ViewPage {
.recentBrowsing=${true}
.paused=${this.paused}
.searchQuery=${this.searchQuery}
+ .bookmarkList=${this.bookmarkList}
></view-opentabs-card>`;
}
@@ -330,13 +348,9 @@ class OpenTabsInView extends ViewPage {
switch (type) {
case "TabRecencyChange":
case "TabChange":
- // if we're switching away from our tab, we can halt any updates immediately
- if (!this.isSelectedBrowserTab) {
- this.stop();
- return;
- }
windowIds = detail.windowIds;
this._updateWindowList();
+ this.bookmarkList.setTrackedUrls(this.#getAllTabUrls());
break;
}
if (this.recentBrowsing) {
@@ -390,6 +404,7 @@ class OpenTabsInViewCard extends ViewPageContent {
searchResults: { type: Array },
showAll: { type: Boolean },
cumulativeSearches: { type: Number },
+ bookmarkList: { type: Object },
};
static MAX_TABS_FOR_COMPACT_HEIGHT = 7;
@@ -470,6 +485,14 @@ class OpenTabsInViewCard extends ViewPageContent {
}
onTabListRowClick(event) {
+ // Don't open pinned tab if mute/unmute indicator button selected
+ if (
+ Array.from(event.explicitOriginalTarget.classList).includes(
+ "fxview-tab-row-pinned-media-button"
+ )
+ ) {
+ return;
+ }
const tab = event.originalTarget.tabElement;
const browserWindow = tab.ownerGlobal;
browserWindow.focus();
@@ -497,6 +520,18 @@ class OpenTabsInViewCard extends ViewPageContent {
}
}
+ closeTab(event) {
+ const tab = event.originalTarget.tabElement;
+ tab?.ownerGlobal.gBrowser.removeTab(tab);
+
+ Services.telemetry.recordEvent(
+ "firefoxview_next",
+ "close_open_tab",
+ "tabs",
+ null
+ );
+ }
+
viewVisibleCallback() {
this.getRootNode().host.toggleVisibilityInCardContainer(true);
}
@@ -531,15 +566,18 @@ class OpenTabsInViewCard extends ViewPageContent {
)}
<div class="fxview-tab-list-container" slot="main">
<fxview-tab-list
- class="with-context-menu"
.hasPopup=${"menu"}
?compactRows=${this.classList.contains("width-limited")}
@fxview-tab-list-primary-action=${this.onTabListRowClick}
@fxview-tab-list-secondary-action=${this.openContextMenu}
+ @fxview-tab-list-tertiary-action=${this.closeTab}
+ secondaryActionClass="options-button"
+ tertiaryActionClass="dismiss-button"
.maxTabsLength=${this.getMaxTabsLength()}
- .tabItems=${this.searchResults || getTabListItems(this.tabs)}
+ .tabItems=${this.searchResults ||
+ getTabListItems(this.tabs, this.recentBrowsing)}
.searchQuery=${this.searchQuery}
- .showTabIndicators=${true}
+ .pinnedTabsGridView=${!this.recentBrowsing}
><view-opentabs-contextmenu slot="menu"></view-opentabs-contextmenu>
</fxview-tab-list>
</div>
@@ -590,6 +628,28 @@ class OpenTabsInViewCard extends ViewPageContent {
? searchTabList(this.searchQuery, getTabListItems(this.tabs))
: null;
}
+
+ updated() {
+ this.updateBookmarkStars();
+ }
+
+ async updateBookmarkStars() {
+ const tabItems = [...this.tabList.tabItems];
+ for (const row of tabItems) {
+ const isBookmark = await this.bookmarkList.isBookmark(row.url);
+ if (isBookmark && !row.indicators.includes("bookmark")) {
+ row.indicators.push("bookmark");
+ }
+ if (!isBookmark && row.indicators.includes("bookmark")) {
+ row.indicators = row.indicators.filter(i => i !== "bookmark");
+ }
+ row.primaryL10nId = getPrimaryL10nId(
+ this.isRecentBrowsing,
+ row.indicators
+ );
+ }
+ this.tabList.tabItems = tabItems;
+ }
}
customElements.define("view-opentabs-card", OpenTabsInViewCard);
@@ -655,6 +715,29 @@ class OpenTabsContextMenu extends MozLitElement {
this.ownerViewPage.recordContextMenuTelemetry("close-tab", e);
}
+ pinTab(e) {
+ const tab = this.triggerNode.tabElement;
+ tab?.ownerGlobal.gBrowser.pinTab(tab);
+ this.ownerViewPage.recordContextMenuTelemetry("pin-tab", e);
+ }
+
+ unpinTab(e) {
+ const tab = this.triggerNode.tabElement;
+ tab?.ownerGlobal.gBrowser.unpinTab(tab);
+ this.ownerViewPage.recordContextMenuTelemetry("unpin-tab", e);
+ }
+
+ toggleAudio(e) {
+ const tab = this.triggerNode.tabElement;
+ tab.toggleMuteAudio();
+ this.ownerViewPage.recordContextMenuTelemetry(
+ `${
+ this.triggerNode.indicators.includes("muted") ? "unmute" : "mute"
+ }-tab`,
+ e
+ );
+ }
+
moveTabsToStart(e) {
const tab = this.triggerNode.tabElement;
tab?.ownerGlobal.gBrowser.moveTabsToStart(tab);
@@ -749,16 +832,25 @@ class OpenTabsContextMenu extends MozLitElement {
/>
<panel-list data-tab-type="opentabs">
<panel-item
- data-l10n-id="fxviewtabrow-close-tab"
- data-l10n-attrs="accesskey"
- @click=${this.closeTab}
- ></panel-item>
- <panel-item
data-l10n-id="fxviewtabrow-move-tab"
data-l10n-attrs="accesskey"
submenu="move-tab-menu"
>${this.moveMenuTemplate()}</panel-item
>
+ <panel-item
+ data-l10n-id=${tab.pinned
+ ? "fxviewtabrow-unpin-tab"
+ : "fxviewtabrow-pin-tab"}
+ data-l10n-attrs="accesskey"
+ @click=${tab.pinned ? this.unpinTab : this.pinTab}
+ ></panel-item>
+ <panel-item
+ data-l10n-id=${tab.hasAttribute("muted")
+ ? "fxviewtabrow-unmute-tab"
+ : "fxviewtabrow-mute-tab"}
+ data-l10n-attrs="accesskey"
+ @click=${this.toggleAudio}
+ ></panel-item>
<hr />
<panel-item
data-l10n-id="fxviewtabrow-copy-link"
@@ -798,36 +890,140 @@ function getContainerObj(tab) {
}
/**
+ * Gets an array of tab indicators (if any) when normalizing for fxview-tab-list
+ *
+ * @param {MozTabbrowserTab[]} tab
+ * Tab to fetch container info on.
+ * @returns {Array[]}
+ * Array of named tab indicators
+ */
+function getIndicatorsForTab(tab) {
+ const url = tab.linkedBrowser?.currentURI?.spec || "";
+ let tabIndicators = [];
+ let hasAttention =
+ (tab.pinned &&
+ (tab.hasAttribute("attention") || tab.hasAttribute("titlechanged"))) ||
+ (!tab.pinned && tab.hasAttribute("attention"));
+
+ if (tab.pinned) {
+ tabIndicators.push("pinned");
+ }
+ if (getContainerObj(tab)) {
+ tabIndicators.push("container");
+ }
+ if (hasAttention) {
+ tabIndicators.push("attention");
+ }
+ if (tab.hasAttribute("soundplaying") && !tab.hasAttribute("muted")) {
+ tabIndicators.push("soundplaying");
+ }
+ if (tab.hasAttribute("muted")) {
+ tabIndicators.push("muted");
+ }
+ if (checkIfPinnedNewTab(url)) {
+ tabIndicators.push("pinnedOnNewTab");
+ }
+
+ return tabIndicators;
+}
+/**
+ * Gets the primary l10n id for a tab when normalizing for fxview-tab-list
+ *
+ * @param {boolean} isRecentBrowsing
+ * Whether the tabs are going to be displayed on the Recent Browsing page or not
+ * @param {Array[]} tabIndicators
+ * Array of tab indicators for the given tab
+ * @returns {string}
+ * L10n ID string
+ */
+function getPrimaryL10nId(isRecentBrowsing, tabIndicators) {
+ let indicatorL10nId = null;
+ if (!isRecentBrowsing) {
+ if (
+ tabIndicators?.includes("pinned") &&
+ tabIndicators?.includes("bookmark")
+ ) {
+ indicatorL10nId = "firefoxview-opentabs-bookmarked-pinned-tab";
+ } else if (tabIndicators?.includes("pinned")) {
+ indicatorL10nId = "firefoxview-opentabs-pinned-tab";
+ } else if (tabIndicators?.includes("bookmark")) {
+ indicatorL10nId = "firefoxview-opentabs-bookmarked-tab";
+ }
+ }
+ return indicatorL10nId;
+}
+
+/**
+ * Gets the primary l10n args for a tab when normalizing for fxview-tab-list
+ *
+ * @param {MozTabbrowserTab[]} tab
+ * Tab to fetch container info on.
+ * @param {boolean} isRecentBrowsing
+ * Whether the tabs are going to be displayed on the Recent Browsing page or not
+ * @param {string} url
+ * URL for the given tab
+ * @returns {string}
+ * L10n ID args
+ */
+function getPrimaryL10nArgs(tab, isRecentBrowsing, url) {
+ return JSON.stringify({ tabTitle: tab.label, url });
+}
+
+/**
+ * Check if a given url is pinned on the new tab page
+ *
+ * @param {string} url
+ * url to check
+ * @returns {boolean}
+ * is tabbed pinned on new tab page
+ */
+function checkIfPinnedNewTab(url) {
+ return url && lazy.NewTabUtils.pinnedLinks.isPinned({ url });
+}
+
+/**
* Convert a list of tabs into the format expected by the fxview-tab-list
* component.
*
* @param {MozTabbrowserTab[]} tabs
* Tabs to format.
+ * @param {boolean} isRecentBrowsing
+ * Whether the tabs are going to be displayed on the Recent Browsing page or not
* @returns {object[]}
* Formatted objects.
*/
-function getTabListItems(tabs) {
- let filtered = tabs?.filter(
- tab => !tab.closing && !tab.hidden && !tab.pinned
- );
+function getTabListItems(tabs, isRecentBrowsing) {
+ let filtered = tabs?.filter(tab => !tab.closing && !tab.hidden);
return filtered.map(tab => {
- const url = tab.linkedBrowser?.currentURI?.spec || "";
+ let tabIndicators = getIndicatorsForTab(tab);
+ let containerObj = getContainerObj(tab);
+ const url = tab?.linkedBrowser?.currentURI?.spec || "";
return {
- attention: tab.hasAttribute("attention"),
- containerObj: getContainerObj(tab),
+ containerObj,
+ indicators: tabIndicators,
icon: tab.getAttribute("image"),
- muted: tab.hasAttribute("muted"),
- pinned: tab.pinned,
- primaryL10nId: "firefoxview-opentabs-tab-row",
- primaryL10nArgs: JSON.stringify({ url }),
- secondaryL10nId: "fxviewtabrow-options-menu-button",
- secondaryL10nArgs: JSON.stringify({ tabTitle: tab.label }),
- soundPlaying: tab.hasAttribute("soundplaying"),
+ primaryL10nId: getPrimaryL10nId(isRecentBrowsing, tabIndicators),
+ primaryL10nArgs: getPrimaryL10nArgs(tab, isRecentBrowsing, url),
+ secondaryL10nId:
+ isRecentBrowsing || (!isRecentBrowsing && !tab.pinned)
+ ? "fxviewtabrow-options-menu-button"
+ : null,
+ secondaryL10nArgs:
+ isRecentBrowsing || (!isRecentBrowsing && !tab.pinned)
+ ? JSON.stringify({ tabTitle: tab.label })
+ : null,
+ tertiaryL10nId:
+ isRecentBrowsing || (!isRecentBrowsing && !tab.pinned)
+ ? "fxviewtabrow-close-tab-button"
+ : null,
+ tertiaryL10nArgs:
+ isRecentBrowsing || (!isRecentBrowsing && !tab.pinned)
+ ? JSON.stringify({ tabTitle: tab.label })
+ : null,
tabElement: tab,
time: tab.lastAccessed,
title: tab.label,
- titleChanged: tab.hasAttribute("titlechanged"),
url,
};
});
diff --git a/browser/components/firefoxview/recentlyclosed.mjs b/browser/components/firefoxview/recentlyclosed.mjs
index 6e7e06c1f4..83c323256c 100644
--- a/browser/components/firefoxview/recentlyclosed.mjs
+++ b/browser/components/firefoxview/recentlyclosed.mjs
@@ -398,6 +398,7 @@ class RecentlyClosedTabsInView extends ViewPage {
.tabItems=${this.searchResults || this.recentlyClosedTabs}
@fxview-tab-list-secondary-action=${this.onDismissTab}
@fxview-tab-list-primary-action=${this.onReopenTab}
+ secondaryActionClass="dismiss-button"
></fxview-tab-list>
`
)}
diff --git a/browser/components/firefoxview/syncedtabs.mjs b/browser/components/firefoxview/syncedtabs.mjs
index 5320f8cb41..d64da45a30 100644
--- a/browser/components/firefoxview/syncedtabs.mjs
+++ b/browser/components/firefoxview/syncedtabs.mjs
@@ -419,13 +419,14 @@ class SyncedTabsInView extends ViewPage {
</h3>
<fxview-tab-list
slot="main"
- class="with-context-menu"
+ secondaryActionClass="options-button"
hasPopup="menu"
.tabItems=${ifDefined(tabItems)}
.searchQuery=${this.searchQuery}
maxTabsLength=${this.showAll ? -1 : this.maxTabsLength}
@fxview-tab-list-primary-action=${this.onOpenLink}
@fxview-tab-list-secondary-action=${this.onContextMenu}
+ secondaryActionClass="options-button"
>
${this.panelListTemplate()}
</fxview-tab-list>`;
diff --git a/browser/components/firefoxview/tests/browser/FirefoxViewTestUtils.sys.mjs b/browser/components/firefoxview/tests/browser/FirefoxViewTestUtils.sys.mjs
index 3fd2bf95e3..e1285c0396 100644
--- a/browser/components/firefoxview/tests/browser/FirefoxViewTestUtils.sys.mjs
+++ b/browser/components/firefoxview/tests/browser/FirefoxViewTestUtils.sys.mjs
@@ -21,6 +21,20 @@ function getFirefoxViewURL() {
return "about:firefoxview";
}
+/**
+ * Make the given window focused and active
+ */
+async function switchToWindow(win) {
+ await testScope.SimpleTest.promiseFocus(win);
+ if (Services.focus.activeWindow !== win) {
+ testScope.info("switchToWindow, waiting for activate event on the window");
+ await BrowserTestUtils.waitForEvent(win, "activate");
+ } else {
+ testScope.info("switchToWindow, win is already the activeWindow");
+ }
+ testScope.info("switchToWindow, done");
+}
+
function assertFirefoxViewTab(win) {
Assert.ok(win.FirefoxViewHandler.tab, "Firefox View tab exists");
Assert.ok(win.FirefoxViewHandler.tab?.hidden, "Firefox View tab is hidden");
@@ -48,7 +62,7 @@ async function openFirefoxViewTab(win) {
"Must initialize FirefoxViewTestUtils with a test scope which has a SimpleTest property"
);
}
- await testScope.SimpleTest.promiseFocus(win);
+ await switchToWindow(win);
let fxviewTab = win.FirefoxViewHandler.tab;
let alreadyLoaded =
fxviewTab?.linkedBrowser.currentURI.spec.includes(getFirefoxViewURL()) &&
@@ -167,6 +181,7 @@ function isFirefoxViewTabSelectedInWindow(win) {
export {
init,
+ switchToWindow,
withFirefoxView,
assertFirefoxViewTab,
assertFirefoxViewTabSelected,
diff --git a/browser/components/firefoxview/tests/browser/browser.toml b/browser/components/firefoxview/tests/browser/browser.toml
index 8e2005760b..9f9c1c0176 100644
--- a/browser/components/firefoxview/tests/browser/browser.toml
+++ b/browser/components/firefoxview/tests/browser/browser.toml
@@ -27,48 +27,57 @@ skip-if = ["true"] # Bug 1869605 and # Bug 1870296
["browser_firefoxview.js"]
-["browser_firefoxview_tab.js"]
-
-["browser_notification_dot.js"]
-skip-if = ["true"] # Bug 1851453
-
-["browser_opentabs_changes.js"]
-
-["browser_reload_firefoxview.js"]
-
-["browser_tab_close_last_tab.js"]
-
-["browser_tab_on_close_warning.js"]
-
-["browser_firefoxview_paused.js"]
-
["browser_firefoxview_general_telemetry.js"]
["browser_firefoxview_navigation.js"]
+["browser_firefoxview_paused.js"]
+
["browser_firefoxview_search_telemetry.js"]
+["browser_firefoxview_tab.js"]
+
["browser_firefoxview_virtual_list.js"]
["browser_history_firefoxview.js"]
-skip-if = ["true"] # Bug 1877594
-["browser_opentabs_firefoxview.js"]
+["browser_notification_dot.js"]
+skip-if = ["true"] # Bug 1851453
["browser_opentabs_cards.js"]
+
+["browser_opentabs_changes.js"]
+
+["browser_opentabs_firefoxview.js"]
+
+["browser_opentabs_more.js"]
fail-if = ["a11y_checks"] # Bugs 1858041, 1854625, and 1872174 clicked Show all link is not accessible because it is "hidden" when clicked
+skip-if = ["verify"] # Bug 1886017
+
+["browser_opentabs_pinned_tabs.js"]
["browser_opentabs_recency.js"]
skip-if = [
"os == 'win'",
"os == 'mac' && verify",
"os == 'linux'"
-] # macos times out, see bug 1857293, skipped for windows, see bug 1858460, skipped for linux, see bug 1875877
+] # macos times out, see bug 1857293, skipped for windows, see bug 1858460, Bug 1875877 - frequent fails on linux.
+
+["browser_opentabs_search.js"]
+fail-if = ["a11y_checks"] # Bug 1850591 clicked moz-page-nav-button button is not focusable
["browser_opentabs_tab_indicators.js"]
["browser_recentlyclosed_firefoxview.js"]
+["browser_reload_firefoxview.js"]
+
["browser_syncedtabs_errors_firefoxview.js"]
["browser_syncedtabs_firefoxview.js"]
+
+["browser_tab_close_last_tab.js"]
+
+["browser_tab_list_keyboard_navigation.js"]
+
+["browser_tab_on_close_warning.js"]
diff --git a/browser/components/firefoxview/tests/browser/browser_dragDrop_after_opening_fxViewTab.js b/browser/components/firefoxview/tests/browser/browser_dragDrop_after_opening_fxViewTab.js
index 9ce547238a..0376a3886d 100644
--- a/browser/components/firefoxview/tests/browser/browser_dragDrop_after_opening_fxViewTab.js
+++ b/browser/components/firefoxview/tests/browser/browser_dragDrop_after_opening_fxViewTab.js
@@ -15,6 +15,7 @@ add_task(async function () {
// window.RTL_UI doesn't update in existing windows when this pref is changed,
// so we need to test in a new window.
let win = await BrowserTestUtils.openNewBrowserWindow();
+ await switchToWindow(win);
const TEST_ROOT = getRootDirectory(gTestPath).replace(
"chrome://mochitests/content",
diff --git a/browser/components/firefoxview/tests/browser/browser_firefoxview.js b/browser/components/firefoxview/tests/browser/browser_firefoxview.js
index 33467941a4..1a51d61f42 100644
--- a/browser/components/firefoxview/tests/browser/browser_firefoxview.js
+++ b/browser/components/firefoxview/tests/browser/browser_firefoxview.js
@@ -6,10 +6,7 @@ add_task(async function about_firefoxview_smoke_test() {
const { document } = browser.contentWindow;
// sanity check the important regions exist on this page
- ok(
- document.querySelector("fxview-category-navigation"),
- "fxview-category-navigation element exists"
- );
+ ok(document.querySelector("moz-page-nav"), "moz-page-nav element exists");
ok(document.querySelector("named-deck"), "named-deck element exists");
});
});
diff --git a/browser/components/firefoxview/tests/browser/browser_firefoxview_general_telemetry.js b/browser/components/firefoxview/tests/browser/browser_firefoxview_general_telemetry.js
index 51d5caa032..b70e6b938e 100644
--- a/browser/components/firefoxview/tests/browser/browser_firefoxview_general_telemetry.js
+++ b/browser/components/firefoxview/tests/browser/browser_firefoxview_general_telemetry.js
@@ -39,7 +39,7 @@ add_task(async function firefox_view_entered_telemetry() {
enteredTelemetry[4] = { page: "recentlyclosed" };
enteredAndTabSelectedEvents = [tabSelectedTelemetry, enteredTelemetry];
- navigateToCategory(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
await clearAllParentTelemetryEvents();
await BrowserTestUtils.openNewForegroundTab(gBrowser, "about:robots");
is(
@@ -107,9 +107,9 @@ add_task(async function test_change_page_telemetry() {
],
];
await clearAllParentTelemetryEvents();
- navigateToCategory(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
await telemetryEvent(changePageEvent);
- navigateToCategory(document, "recentbrowsing");
+ await navigateToViewAndWait(document, "recentbrowsing");
let openTabsComponent = document.querySelector(
"view-opentabs[slot=opentabs]"
@@ -189,7 +189,7 @@ add_task(async function test_context_menu_new_window_telemetry() {
);
// Test history context menu options
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
let historyComponent = document.querySelector("view-history");
await TestUtils.waitForCondition(() => historyComponent.fullyUpdated);
await TestUtils.waitForCondition(
@@ -198,7 +198,11 @@ add_task(async function test_context_menu_new_window_telemetry() {
let firstTabList = historyComponent.lists[0];
let firstItem = firstTabList.rowEls[0];
let panelList = historyComponent.panelList;
- EventUtils.synthesizeMouseAtCenter(firstItem.buttonEl, {}, content);
+ EventUtils.synthesizeMouseAtCenter(
+ firstItem.secondaryButtonEl,
+ {},
+ content
+ );
await BrowserTestUtils.waitForEvent(panelList, "shown");
await clearAllParentTelemetryEvents();
let panelItems = Array.from(panelList.children).filter(
@@ -245,7 +249,7 @@ add_task(async function test_context_menu_private_window_telemetry() {
);
// Test history context menu options
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
let historyComponent = document.querySelector("view-history");
await TestUtils.waitForCondition(() => historyComponent.fullyUpdated);
await TestUtils.waitForCondition(
@@ -254,14 +258,22 @@ add_task(async function test_context_menu_private_window_telemetry() {
let firstTabList = historyComponent.lists[0];
let firstItem = firstTabList.rowEls[0];
let panelList = historyComponent.panelList;
- EventUtils.synthesizeMouseAtCenter(firstItem.buttonEl, {}, content);
+ EventUtils.synthesizeMouseAtCenter(
+ firstItem.secondaryButtonEl,
+ {},
+ content
+ );
await BrowserTestUtils.waitForEvent(panelList, "shown");
await clearAllParentTelemetryEvents();
let panelItems = Array.from(panelList.children).filter(
panelItem => panelItem.nodeName === "PANEL-ITEM"
);
- EventUtils.synthesizeMouseAtCenter(firstItem.buttonEl, {}, content);
+ EventUtils.synthesizeMouseAtCenter(
+ firstItem.secondaryButtonEl,
+ {},
+ content
+ );
info("Context menu button clicked.");
await BrowserTestUtils.waitForEvent(panelList, "shown");
info("Context menu shown.");
@@ -314,7 +326,7 @@ add_task(async function test_context_menu_delete_from_history_telemetry() {
);
// Test history context menu options
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
let historyComponent = document.querySelector("view-history");
await TestUtils.waitForCondition(() => historyComponent.fullyUpdated);
await TestUtils.waitForCondition(
@@ -323,14 +335,22 @@ add_task(async function test_context_menu_delete_from_history_telemetry() {
let firstTabList = historyComponent.lists[0];
let firstItem = firstTabList.rowEls[0];
let panelList = historyComponent.panelList;
- EventUtils.synthesizeMouseAtCenter(firstItem.buttonEl, {}, content);
+ EventUtils.synthesizeMouseAtCenter(
+ firstItem.secondaryButtonEl,
+ {},
+ content
+ );
await BrowserTestUtils.waitForEvent(panelList, "shown");
await clearAllParentTelemetryEvents();
let panelItems = Array.from(panelList.children).filter(
panelItem => panelItem.nodeName === "PANEL-ITEM"
);
- EventUtils.synthesizeMouseAtCenter(firstItem.buttonEl, {}, content);
+ EventUtils.synthesizeMouseAtCenter(
+ firstItem.secondaryButtonEl,
+ {},
+ content
+ );
info("Context menu button clicked.");
await BrowserTestUtils.waitForEvent(panelList, "shown");
info("Context menu shown.");
diff --git a/browser/components/firefoxview/tests/browser/browser_firefoxview_navigation.js b/browser/components/firefoxview/tests/browser/browser_firefoxview_navigation.js
index 80206dd945..281d969b39 100644
--- a/browser/components/firefoxview/tests/browser/browser_firefoxview_navigation.js
+++ b/browser/components/firefoxview/tests/browser/browser_firefoxview_navigation.js
@@ -3,15 +3,15 @@
const URL_BASE = `${getFirefoxViewURL()}#`;
-function assertCorrectPage(document, name, event) {
+function assertCorrectPage(document, view, event) {
is(
document.location.hash,
- `#${name}`,
- `Navigation button for ${name} navigates to ${URL_BASE + name} on ${event}.`
+ `#${view}`,
+ `Navigation button for ${view} navigates to ${URL_BASE + view} on ${event}.`
);
is(
document.querySelector("named-deck").selectedViewName,
- name,
+ view,
"The correct deck child is selected"
);
}
@@ -22,21 +22,21 @@ add_task(async function test_side_component_navigation_by_click() {
const { document } = browser.contentWindow;
let win = browser.ownerGlobal;
- const categoryButtons = document.querySelectorAll("fxview-category-button");
+ const pageNavButtons = document.querySelectorAll("moz-page-nav-button");
- for (let element of categoryButtons) {
- const name = element.name;
+ for (let element of pageNavButtons) {
+ const view = element.view;
let buttonClicked = BrowserTestUtils.waitForEvent(
element.buttonEl,
"click",
win
);
- info(`Clicking navigation button for ${name}`);
+ info(`Clicking navigation button for ${view}`);
EventUtils.synthesizeMouseAtCenter(element.buttonEl, {}, content);
await buttonClicked;
- assertCorrectPage(document, name, "click");
+ assertCorrectPage(document, view, "click");
}
});
});
@@ -47,49 +47,49 @@ add_task(async function test_side_component_navigation_by_keyboard() {
const { document } = browser.contentWindow;
let win = browser.ownerGlobal;
- const categoryButtons = document.querySelectorAll("fxview-category-button");
- const firstButton = categoryButtons[0];
+ const pageNavButtons = document.querySelectorAll("moz-page-nav-button");
+ const firstButton = pageNavButtons[0].buttonEl;
firstButton.focus();
is(
- document.activeElement,
+ document.activeElement.shadowRoot.activeElement,
firstButton,
- "The first category button has focus"
+ "The first page nav button has focus"
);
- for (let element of Array.from(categoryButtons).slice(1)) {
- const name = element.name;
+ for (let element of Array.from(pageNavButtons).slice(1)) {
+ const view = element.view;
let buttonFocused = BrowserTestUtils.waitForEvent(element, "focus", win);
- info(`Focus is on ${document.activeElement.name}`);
- info(`Arrow down on navigation to ${name}`);
+ info(`Focus is on ${document.activeElement.view}`);
+ info(`Arrow down on navigation to ${view}`);
EventUtils.synthesizeKey("KEY_ArrowDown", {}, win);
await buttonFocused;
- assertCorrectPage(document, name, "key press");
+ assertCorrectPage(document, view, "key press");
}
});
});
-add_task(async function test_direct_navigation_to_correct_category() {
+add_task(async function test_direct_navigation_to_correct_view() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- const categoryButtons = document.querySelectorAll("fxview-category-button");
+ const pageNavButtons = document.querySelectorAll("moz-page-nav-button");
const namedDeck = document.querySelector("named-deck");
- for (let element of categoryButtons) {
- const name = element.name;
+ for (let element of pageNavButtons) {
+ const view = element.view;
- info(`Navigating to ${URL_BASE + name}`);
- document.location.assign(URL_BASE + name);
+ info(`Navigating to ${URL_BASE + view}`);
+ document.location.assign(URL_BASE + view);
await BrowserTestUtils.waitForCondition(() => {
- return namedDeck.selectedViewName === name;
+ return namedDeck.selectedViewName === view;
}, "Wait for navigation to complete");
is(
namedDeck.selectedViewName,
- name,
- `The correct deck child for category ${name} is selected`
+ view,
+ `The correct deck child for view ${view} is selected`
);
}
});
diff --git a/browser/components/firefoxview/tests/browser/browser_firefoxview_paused.js b/browser/components/firefoxview/tests/browser/browser_firefoxview_paused.js
index c95ac4fcf5..e61b48b472 100644
--- a/browser/components/firefoxview/tests/browser/browser_firefoxview_paused.js
+++ b/browser/components/firefoxview/tests/browser/browser_firefoxview_paused.js
@@ -5,9 +5,6 @@ const tabURL1 = "data:,Tab1";
const tabURL2 = "data:,Tab2";
const tabURL3 = "data:,Tab3";
-const { NonPrivateTabs } = ChromeUtils.importESModule(
- "resource:///modules/OpenTabs.sys.mjs"
-);
const TestTabs = {};
function getTopLevelViewElements(document) {
@@ -194,6 +191,42 @@ async function checkFxRenderCalls(browser, elements, selectedView) {
sandbox.restore();
}
+function dragAndDrop(
+ tab1,
+ tab2,
+ initialWindow = window,
+ destWindow = window,
+ afterTab = true,
+ context
+) {
+ let rect = tab2.getBoundingClientRect();
+ let event = {
+ ctrlKey: false,
+ altKey: false,
+ clientX: rect.left + rect.width / 2 + 10 * (afterTab ? 1 : -1),
+ clientY: rect.top + rect.height / 2,
+ };
+
+ if (destWindow != initialWindow) {
+ // Make sure that both tab1 and tab2 are visible
+ initialWindow.focus();
+ initialWindow.moveTo(rect.left, rect.top + rect.height * 3);
+ }
+
+ EventUtils.synthesizeDrop(
+ tab1,
+ tab2,
+ null,
+ "move",
+ initialWindow,
+ destWindow,
+ event
+ );
+
+ // Ensure dnd suppression is cleared.
+ EventUtils.synthesizeMouseAtCenter(tab2, { type: "mouseup" }, context);
+}
+
add_task(async function test_recentbrowsing() {
await setupOpenAndClosedTabs();
@@ -322,7 +355,7 @@ add_task(async function test_opentabs() {
const document = browser.contentDocument;
const { openTabsView } = getTopLevelViewElements(document);
- await navigateToCategoryAndWait(document, "opentabs");
+ await navigateToViewAndWait(document, "opentabs");
const { openTabsList } = await getElements(document);
ok(openTabsView, "Found the open tabs view");
@@ -387,7 +420,7 @@ add_task(async function test_recentlyclosed() {
await withFirefoxView({}, async browser => {
const document = browser.contentDocument;
const { recentlyClosedView } = getTopLevelViewElements(document);
- await navigateToCategoryAndWait(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
const { recentlyClosedList } = await getElements(document);
ok(recentlyClosedView, "Found the recently-closed view");
@@ -405,3 +438,66 @@ add_task(async function test_recentlyclosed() {
});
await BrowserTestUtils.removeTab(TestTabs.tab2);
});
+
+add_task(async function test_drag_drop_pinned_tab() {
+ await setupOpenAndClosedTabs();
+ await withFirefoxView({}, async browser => {
+ const { document } = browser.contentWindow;
+ let win1 = browser.ownerGlobal;
+ await navigateToViewAndWait(document, "opentabs");
+
+ let openTabs = document.querySelector("view-opentabs[name=opentabs]");
+ await openTabs.updateComplete;
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList.rowEls.length
+ );
+ await openTabs.openTabsTarget.readyWindowsPromise;
+ let card = openTabs.viewCards[0];
+ let tabRows = card.tabList.rowEls;
+ let tabChangeRaised;
+
+ // Pin first two tabs
+ for (var i = 0; i < 2; i++) {
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+ let currentTabEl = tabRows[i];
+ let currentTab = currentTabEl.tabElement;
+ info(`Pinning tab ${i + 1} with label: ${currentTab.label}`);
+ win1.gBrowser.pinTab(currentTab);
+ await tabChangeRaised;
+ await openTabs.updateComplete;
+ tabRows = card.tabList.rowEls;
+ currentTabEl = tabRows[i];
+
+ await TestUtils.waitForCondition(
+ () => currentTabEl.indicators.includes("pinned"),
+ `Tab ${i + 1} is pinned.`
+ );
+ }
+
+ info(`First two tabs are pinned.`);
+
+ let win2 = await BrowserTestUtils.openNewBrowserWindow();
+
+ await openTabs.updateComplete;
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards.length === 2,
+ "Two windows are shown for Open Tabs in in Fx View."
+ );
+
+ let pinnedTab = win1.gBrowser.visibleTabs[0];
+ let newWindowTab = win2.gBrowser.visibleTabs[0];
+
+ dragAndDrop(newWindowTab, pinnedTab, win2, win1, true, content);
+
+ await switchToFxViewTab();
+ await openTabs.updateComplete;
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards.length === 1,
+ "One window is shown for Open Tabs in in Fx View."
+ );
+ });
+ cleanupTabs();
+});
diff --git a/browser/components/firefoxview/tests/browser/browser_firefoxview_search_telemetry.js b/browser/components/firefoxview/tests/browser/browser_firefoxview_search_telemetry.js
index 2ea2429c15..c76a11d3ad 100644
--- a/browser/components/firefoxview/tests/browser/browser_firefoxview_search_telemetry.js
+++ b/browser/components/firefoxview/tests/browser/browser_firefoxview_search_telemetry.js
@@ -56,7 +56,7 @@ add_task(async function test_search_initiated_telemetry() {
EventUtils.sendString("example.com", content);
await telemetryEvent(searchEvent("recentbrowsing"));
- await navigateToCategoryAndWait(document, "opentabs");
+ await navigateToViewAndWait(document, "opentabs");
await clearAllParentTelemetryEvents();
is(document.location.hash, "#opentabs", "Searching within open tabs.");
const openTabs = document.querySelector("named-deck > view-opentabs");
@@ -65,7 +65,7 @@ add_task(async function test_search_initiated_telemetry() {
EventUtils.sendString("example.com", content);
await telemetryEvent(searchEvent("opentabs"));
- await navigateToCategoryAndWait(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
await clearAllParentTelemetryEvents();
is(
document.location.hash,
@@ -84,7 +84,7 @@ add_task(async function test_search_initiated_telemetry() {
EventUtils.sendString("example.com", content);
await telemetryEvent(searchEvent("recentlyclosed"));
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
await clearAllParentTelemetryEvents();
is(document.location.hash, "#syncedtabs", "Searching within synced tabs.");
const syncedTabs = document.querySelector("named-deck > view-syncedtabs");
@@ -93,7 +93,7 @@ add_task(async function test_search_initiated_telemetry() {
EventUtils.sendString("example.com", content);
await telemetryEvent(searchEvent("syncedtabs"));
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
await clearAllParentTelemetryEvents();
is(document.location.hash, "#history", "Searching within history.");
const history = document.querySelector("named-deck > view-history");
@@ -316,7 +316,7 @@ add_task(async function test_sort_history_search_telemetry() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
const historyComponent = document.querySelector("view-history");
const searchTextbox = await TestUtils.waitForCondition(
@@ -432,7 +432,7 @@ add_task(async function test_cumulative_searches_recently_closed_telemetry() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
is(
document.location.hash,
"#recentlyclosed",
@@ -477,7 +477,7 @@ add_task(async function test_cumulative_searches_open_tabs_telemetry() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "opentabs");
+ await navigateToViewAndWait(document, "opentabs");
is(document.location.hash, "#opentabs", "Searching within open tabs.");
const openTabs = document.querySelector("named-deck > view-opentabs");
@@ -523,7 +523,7 @@ add_task(async function test_cumulative_searches_history_telemetry() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
is(document.location.hash, "#history", "Searching within history.");
const history = document.querySelector("named-deck > view-history");
const searchTextbox = await TestUtils.waitForCondition(() => {
@@ -585,7 +585,7 @@ add_task(async function test_cumulative_searches_syncedtabs_telemetry() {
const { document } = browser.contentWindow;
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
is(document.location.hash, "#syncedtabs", "Searching within synced tabs.");
let syncedTabs = document.querySelector(
"view-syncedtabs:not([slot=syncedtabs])"
diff --git a/browser/components/firefoxview/tests/browser/browser_firefoxview_tab.js b/browser/components/firefoxview/tests/browser/browser_firefoxview_tab.js
index f1ac7d6742..037729ea7d 100644
--- a/browser/components/firefoxview/tests/browser/browser_firefoxview_tab.js
+++ b/browser/components/firefoxview/tests/browser/browser_firefoxview_tab.js
@@ -55,12 +55,6 @@ function triggerClickOn(target, options) {
return promise;
}
-async function add_new_tab(URL) {
- let tab = BrowserTestUtils.addTab(gBrowser, URL);
- await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
- return tab;
-}
-
add_task(async function aria_attributes() {
let win = await BrowserTestUtils.openNewBrowserWindow();
is(
diff --git a/browser/components/firefoxview/tests/browser/browser_firefoxview_virtual_list.js b/browser/components/firefoxview/tests/browser/browser_firefoxview_virtual_list.js
index 501deb8e68..bf53796ef7 100644
--- a/browser/components/firefoxview/tests/browser/browser_firefoxview_virtual_list.js
+++ b/browser/components/firefoxview/tests/browser/browser_firefoxview_virtual_list.js
@@ -29,7 +29,7 @@ add_task(async function test_max_render_count_on_win_resize() {
"Firefox View is loaded to the Recent Browsing page."
);
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
let historyComponent = document.querySelector("view-history");
let tabList = historyComponent.lists[0];
diff --git a/browser/components/firefoxview/tests/browser/browser_history_firefoxview.js b/browser/components/firefoxview/tests/browser/browser_history_firefoxview.js
index a6c697e398..c4c096acff 100644
--- a/browser/components/firefoxview/tests/browser/browser_history_firefoxview.js
+++ b/browser/components/firefoxview/tests/browser/browser_history_firefoxview.js
@@ -15,8 +15,8 @@ const HISTORY_EVENT = [["firefoxview_next", "history", "visits", undefined]];
const SHOW_ALL_HISTORY_EVENT = [
["firefoxview_next", "show_all_history", "tabs", undefined],
];
-
const NEVER_REMEMBER_HISTORY_PREF = "browser.privatebrowsing.autostart";
+
const DAY_MS = 24 * 60 * 60 * 1000;
const today = new Date();
const yesterday = new Date(Date.now() - DAY_MS);
@@ -24,6 +24,14 @@ const twoDaysAgo = new Date(Date.now() - DAY_MS * 2);
const threeDaysAgo = new Date(Date.now() - DAY_MS * 3);
const fourDaysAgo = new Date(Date.now() - DAY_MS * 4);
const oneMonthAgo = new Date(today);
+const dates = [
+ today,
+ yesterday,
+ twoDaysAgo,
+ threeDaysAgo,
+ fourDaysAgo,
+ oneMonthAgo,
+];
// Set the date for the first day of the last month
oneMonthAgo.setDate(1);
@@ -47,13 +55,14 @@ function isElInViewport(element) {
);
}
-async function historyComponentReady(historyComponent) {
+async function historyComponentReady(historyComponent, expectedHistoryItems) {
await TestUtils.waitForCondition(
() =>
[...historyComponent.allHistoryItems.values()].reduce(
(acc, { length }) => acc + length,
0
- ) === 24
+ ) === expectedHistoryItems,
+ "History component ready"
);
let expected = historyComponent.historyMapByDate.length;
@@ -148,6 +157,18 @@ async function addHistoryItems(dateAdded) {
});
}
+function createHistoryEntries() {
+ let historyEntries = [];
+ for (let i = 0; i < 4; i++) {
+ historyEntries.push({
+ url: URLs[i],
+ title: `Example Domain ${i}`,
+ visits: dates.map(date => [{ date }]),
+ });
+ }
+ return historyEntries;
+}
+
add_setup(async () => {
await SpecialPowers.pushPrefEnv({
set: [["browser.firefox-view.search.enabled", true]],
@@ -160,21 +181,20 @@ add_setup(async () => {
add_task(async function test_list_ordering() {
await PlacesUtils.history.clear();
- await addHistoryItems(today);
- await addHistoryItems(yesterday);
- await addHistoryItems(twoDaysAgo);
- await addHistoryItems(threeDaysAgo);
- await addHistoryItems(fourDaysAgo);
- await addHistoryItems(oneMonthAgo);
+ const historyEntries = createHistoryEntries();
+ await PlacesUtils.history.insertMany(historyEntries);
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
- let historyComponent = document.querySelector("view-history");
+ let historyComponent = await TestUtils.waitForCondition(
+ () => document.querySelector("view-history"),
+ "History component rendered"
+ );
historyComponent.profileAge = 8;
- await historyComponentReady(historyComponent);
+ await historyComponentReady(historyComponent, historyEntries.length);
let firstCard = historyComponent.cards[0];
@@ -262,7 +282,7 @@ add_task(async function test_empty_states() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
let historyComponent = document.querySelector("view-history");
historyComponent.profileAge = 8;
@@ -350,7 +370,7 @@ add_task(async function test_observers_removed_when_view_is_hidden() {
);
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
const historyComponent = document.querySelector("view-history");
historyComponent.profileAge = 8;
let visitList = await TestUtils.waitForCondition(() =>
@@ -390,20 +410,16 @@ add_task(async function test_observers_removed_when_view_is_hidden() {
add_task(async function test_show_all_history_telemetry() {
await PlacesUtils.history.clear();
- await addHistoryItems(today);
- await addHistoryItems(yesterday);
- await addHistoryItems(twoDaysAgo);
- await addHistoryItems(threeDaysAgo);
- await addHistoryItems(fourDaysAgo);
- await addHistoryItems(oneMonthAgo);
+ const historyEntries = createHistoryEntries();
+ await PlacesUtils.history.insertMany(historyEntries);
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
let historyComponent = document.querySelector("view-history");
historyComponent.profileAge = 8;
- await historyComponentReady(historyComponent);
+ await historyComponentReady(historyComponent, historyEntries.length);
await clearAllParentTelemetryEvents();
let showAllHistoryBtn = historyComponent.showAllHistoryBtn;
@@ -422,12 +438,15 @@ add_task(async function test_show_all_history_telemetry() {
});
add_task(async function test_search_history() {
+ await PlacesUtils.history.clear();
+ const historyEntries = createHistoryEntries();
+ await PlacesUtils.history.insertMany(historyEntries);
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
const historyComponent = document.querySelector("view-history");
historyComponent.profileAge = 8;
- await historyComponentReady(historyComponent);
+ await historyComponentReady(historyComponent, historyEntries.length);
const searchTextbox = await TestUtils.waitForCondition(
() => historyComponent.searchTextbox,
"The search textbox is displayed."
@@ -447,7 +466,7 @@ add_task(async function test_search_history() {
);
await TestUtils.waitForCondition(() => {
const { rowEls } = historyComponent.lists[0];
- return rowEls.length === 1 && rowEls[0].mainEl.href === URLs[0];
+ return rowEls.length === 1 && rowEls[0].mainEl.href === URLs[1];
}, "There is one matching search result.");
info("Input a bogus search query.");
@@ -504,7 +523,7 @@ add_task(async function test_persist_collapse_card_after_view_change() {
await addHistoryItems(today);
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "history");
const historyComponent = document.querySelector("view-history");
historyComponent.profileAge = 8;
await TestUtils.waitForCondition(
@@ -529,8 +548,8 @@ add_task(async function test_persist_collapse_card_after_view_change() {
);
// Switch to a new view and then back to History
- await navigateToCategoryAndWait(document, "syncedtabs");
- await navigateToCategoryAndWait(document, "history");
+ await navigateToViewAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "history");
// Check that first history card is still collapsed after changing view
ok(
diff --git a/browser/components/firefoxview/tests/browser/browser_opentabs_cards.js b/browser/components/firefoxview/tests/browser/browser_opentabs_cards.js
index d57aa3cad1..d4de3ae5a9 100644
--- a/browser/components/firefoxview/tests/browser/browser_opentabs_cards.js
+++ b/browser/components/firefoxview/tests/browser/browser_opentabs_cards.js
@@ -7,36 +7,16 @@ const ROW_DATE_ID = "fxview-tab-row-date";
let gInitialTab;
let gInitialTabURL;
-const { NonPrivateTabs } = ChromeUtils.importESModule(
- "resource:///modules/OpenTabs.sys.mjs"
-);
add_setup(function () {
// This test opens a lot of windows and tabs and might run long on slower configurations
- requestLongerTimeout(2);
+ requestLongerTimeout(3);
gInitialTab = gBrowser.selectedTab;
gInitialTabURL = gBrowser.selectedBrowser.currentURI.spec;
});
-async function navigateToOpenTabs(browser) {
- const document = browser.contentDocument;
- if (document.querySelector("named-deck").selectedViewName != "opentabs") {
- await navigateToCategoryAndWait(browser.contentDocument, "opentabs");
- }
-}
-
-function getOpenTabsComponent(browser) {
- return browser.contentDocument.querySelector("named-deck > view-opentabs");
-}
-
-function getCards(browser) {
- return getOpenTabsComponent(browser).shadowRoot.querySelectorAll(
- "view-opentabs-card"
- );
-}
-
async function cleanup() {
- await SimpleTest.promiseFocus(window);
+ await switchToWindow(window);
await promiseAllButPrimaryWindowClosed();
await BrowserTestUtils.switchTab(gBrowser, gInitialTab);
await closeFirefoxViewTab(window);
@@ -58,11 +38,6 @@ async function cleanup() {
);
}
-async function getRowsForCard(card) {
- await TestUtils.waitForCondition(() => card.tabList.rowEls.length);
- return card.tabList.rowEls;
-}
-
/**
* Verify that there are the expected number of cards, and that each card has
* the expected URLs in order.
@@ -73,10 +48,10 @@ async function getRowsForCard(card) {
* The expected URLs for each card.
*/
async function checkTabLists(browser, expected) {
- const cards = getCards(browser);
+ const cards = getOpenTabsCards(getOpenTabsComponent(browser));
is(cards.length, expected.length, `There are ${expected.length} windows.`);
for (let i = 0; i < cards.length; i++) {
- const tabItems = await getRowsForCard(cards[i]);
+ const tabItems = await getTabRowsForCard(cards[i]);
const actual = Array.from(tabItems).map(({ url }) => url);
Assert.deepEqual(
actual,
@@ -87,11 +62,12 @@ async function checkTabLists(browser, expected) {
}
add_task(async function open_tab_same_window() {
+ let tabChangeRaised;
await openFirefoxViewTab(window).then(async viewTab => {
const browser = viewTab.linkedBrowser;
await navigateToOpenTabs(browser);
const openTabs = getOpenTabsComponent(browser);
- await openTabs.openTabsTarget.readyWindowsPromise;
+ await NonPrivateTabs.readyWindowsPromise;
await openTabs.updateComplete;
await checkTabLists(browser, [[gInitialTabURL]]);
@@ -99,7 +75,7 @@ add_task(async function open_tab_same_window() {
browser.contentDocument,
"visibilitychange"
);
- let tabChangeRaised = BrowserTestUtils.waitForEvent(
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
NonPrivateTabs,
"TabChange"
);
@@ -114,7 +90,7 @@ add_task(async function open_tab_same_window() {
const browser = viewTab.linkedBrowser;
const openTabs = getOpenTabsComponent(browser);
setSortOption(openTabs, "tabStripOrder");
- await openTabs.openTabsTarget.readyWindowsPromise;
+ await NonPrivateTabs.readyWindowsPromise;
await openTabs.updateComplete;
await checkTabLists(browser, [[gInitialTabURL, TEST_URL]]);
@@ -122,8 +98,8 @@ add_task(async function open_tab_same_window() {
browser.contentDocument,
"visibilitychange"
);
- const cards = getCards(browser);
- const tabItems = await getRowsForCard(cards[0]);
+ const cards = getOpenTabsCards(openTabs);
+ const tabItems = await getTabRowsForCard(cards[0]);
tabItems[0].mainEl.click();
await promiseHidden;
});
@@ -135,8 +111,11 @@ add_task(async function open_tab_same_window() {
await openFirefoxViewTab(window).then(async viewTab => {
const browser = viewTab.linkedBrowser;
- const cards = getCards(browser);
- let tabItems = await getRowsForCard(cards[0]);
+ const openTabs = getOpenTabsComponent(browser);
+ await openTabs.updateComplete;
+
+ const cards = getOpenTabsCards(openTabs);
+ let tabItems = await getTabRowsForCard(cards[0]);
let promiseHidden = BrowserTestUtils.waitForEvent(
browser.contentDocument,
@@ -154,7 +133,13 @@ add_task(async function open_tab_same_window() {
await openFirefoxViewTab(window).then(async viewTab => {
const browser = viewTab.linkedBrowser;
- let tabChangeRaised = BrowserTestUtils.waitForEvent(
+ const openTabs = getOpenTabsComponent(browser);
+ await openTabs.updateComplete;
+
+ // sanity-check current tab order before we change it
+ await checkTabLists(browser, [[gInitialTabURL, TEST_URL]]);
+
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
NonPrivateTabs,
"TabChange"
);
@@ -162,18 +147,24 @@ add_task(async function open_tab_same_window() {
info("Bring the new tab to the front.");
gBrowser.moveTabTo(newTab, 0);
+ info("Waiting for tabChangeRaised to resolve from the tab move");
await tabChangeRaised;
+ await openTabs.updateComplete;
+
await checkTabLists(browser, [[TEST_URL, gInitialTabURL]]);
tabChangeRaised = BrowserTestUtils.waitForEvent(
NonPrivateTabs,
"TabChange"
);
+ info("Remove the new tab");
await BrowserTestUtils.removeTab(newTab);
+ info("Waiting for tabChangeRaised to resolve from removing the tab");
await tabChangeRaised;
+ await openTabs.updateComplete;
await checkTabLists(browser, [[gInitialTabURL]]);
- const [card] = getCards(browser);
- const [row] = await getRowsForCard(card);
+ const [card] = getOpenTabsCards(getOpenTabsComponent(browser));
+ const [row] = await getTabRowsForCard(card);
ok(
!row.shadowRoot.getElementById("fxview-tab-row-url").hidden,
"The URL is displayed, since we have one window."
@@ -188,25 +179,29 @@ add_task(async function open_tab_same_window() {
});
add_task(async function open_tab_new_window() {
- const win = await BrowserTestUtils.openNewBrowserWindow();
- let winFocused;
- await BrowserTestUtils.openNewForegroundTab(win.gBrowser, TEST_URL);
+ const win2 = await BrowserTestUtils.openNewBrowserWindow();
+ let winBecameActive;
+ let tabChangeRaised;
+ await switchToWindow(win2);
+ await NonPrivateTabs.readyWindowsPromise;
+
+ await BrowserTestUtils.openNewForegroundTab(win2.gBrowser, TEST_URL);
info("Open fxview in new window");
- await openFirefoxViewTab(win).then(async viewTab => {
+ await openFirefoxViewTab(win2).then(async viewTab => {
const browser = viewTab.linkedBrowser;
await navigateToOpenTabs(browser);
const openTabs = getOpenTabsComponent(browser);
setSortOption(openTabs, "tabStripOrder");
- await openTabs.openTabsTarget.readyWindowsPromise;
+ await NonPrivateTabs.readyWindowsPromise;
await openTabs.updateComplete;
await checkTabLists(browser, [
[gInitialTabURL, TEST_URL],
[gInitialTabURL],
]);
- const cards = getCards(browser);
- const originalWinRows = await getRowsForCard(cards[1]);
+ const cards = getOpenTabsCards(openTabs);
+ const originalWinRows = await getTabRowsForCard(cards[1]);
const [row] = originalWinRows;
ok(
row.shadowRoot.getElementById("fxview-tab-row-url").hidden,
@@ -217,47 +212,60 @@ add_task(async function open_tab_new_window() {
"The date is hidden, since we have two windows."
);
info("Select a tab from the original window.");
- let tabChangeRaised = BrowserTestUtils.waitForEvent(
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
NonPrivateTabs,
"TabRecencyChange"
);
- winFocused = BrowserTestUtils.waitForEvent(window, "focus", true);
- originalWinRows[0].mainEl.click();
+ winBecameActive = Promise.all([
+ BrowserTestUtils.waitForEvent(window, "focus", true),
+ BrowserTestUtils.waitForEvent(window, "activate"),
+ ]);
+ ok(row.tabElement, "The row has a tabElement property");
+ is(
+ row.tabElement.ownerGlobal,
+ window,
+ "The tabElement's ownerGlobal is our original window"
+ );
+ info(`Clicking on row with URL: ${row.url}`);
+ row.mainEl.click();
+ info("Waiting for TabRecencyChange event");
await tabChangeRaised;
});
- info("Wait for the original window to be focused");
- await winFocused;
+ info("Wait for the original window to be focused & active");
+ await winBecameActive;
await openFirefoxViewTab(window).then(async viewTab => {
const browser = viewTab.linkedBrowser;
await navigateToOpenTabs(browser);
const openTabs = getOpenTabsComponent(browser);
- await openTabs.openTabsTarget.readyWindowsPromise;
+ await NonPrivateTabs.readyWindowsPromise;
await openTabs.updateComplete;
- const cards = getCards(browser);
+ const cards = getOpenTabsCards(openTabs);
is(cards.length, 2, "There are two windows.");
- const newWinRows = await getRowsForCard(cards[1]);
+ const newWinRows = await getTabRowsForCard(cards[1]);
info("Select a tab from the new window.");
- winFocused = BrowserTestUtils.waitForEvent(win, "focus", true);
- let tabChangeRaised = BrowserTestUtils.waitForEvent(
+ winBecameActive = Promise.all([
+ BrowserTestUtils.waitForEvent(win2, "focus", true),
+ BrowserTestUtils.waitForEvent(win2, "activate"),
+ ]);
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
NonPrivateTabs,
"TabRecencyChange"
);
newWinRows[0].mainEl.click();
await tabChangeRaised;
});
- info("Wait for the new window to be focused");
- await winFocused;
+ info("Wait for the new window to be focused & active");
+ await winBecameActive;
await cleanup();
});
add_task(async function open_tab_new_private_window() {
await BrowserTestUtils.openNewBrowserWindow({ private: true });
- await SimpleTest.promiseFocus(window);
await openFirefoxViewTab(window).then(async viewTab => {
const browser = viewTab.linkedBrowser;
await navigateToOpenTabs(browser);
@@ -265,7 +273,7 @@ add_task(async function open_tab_new_private_window() {
await openTabs.openTabsTarget.readyWindowsPromise;
await openTabs.updateComplete;
- const cards = getCards(browser);
+ const cards = getOpenTabsCards(openTabs);
is(cards.length, 1, "The private window is not displayed.");
});
await cleanup();
@@ -274,6 +282,7 @@ add_task(async function open_tab_new_private_window() {
add_task(async function open_tab_new_window_sort_by_recency() {
info("Open new tabs in a new window.");
const newWindow = await BrowserTestUtils.openNewBrowserWindow();
+ await switchToWindow(newWindow);
const tabs = [
newWindow.gBrowser.selectedTab,
await BrowserTestUtils.openNewForegroundTab(newWindow.gBrowser, URLs[0]),
@@ -285,7 +294,7 @@ add_task(async function open_tab_new_window_sort_by_recency() {
await navigateToOpenTabs(linkedBrowser);
const openTabs = getOpenTabsComponent(linkedBrowser);
setSortOption(openTabs, "recency");
- await openTabs.openTabsTarget.readyWindowsPromise;
+ await NonPrivateTabs.readyWindowsPromise;
await openTabs.updateComplete;
await checkTabLists(linkedBrowser, [
@@ -293,13 +302,13 @@ add_task(async function open_tab_new_window_sort_by_recency() {
[URLs[1], URLs[0], gInitialTabURL],
]);
info("Select tabs in the new window to trigger recency changes.");
- await SimpleTest.promiseFocus(newWindow);
+ await switchToWindow(newWindow);
await BrowserTestUtils.switchTab(newWindow.gBrowser, tabs[1]);
await BrowserTestUtils.switchTab(newWindow.gBrowser, tabs[0]);
- await SimpleTest.promiseFocus(window);
+ await switchToWindow(window);
await TestUtils.waitForCondition(async () => {
- const [, secondCard] = getCards(linkedBrowser);
- const tabItems = await getRowsForCard(secondCard);
+ const [, secondCard] = getOpenTabsCards(openTabs);
+ const tabItems = await getTabRowsForCard(secondCard);
return tabItems[0].url === gInitialTabURL;
});
await checkTabLists(linkedBrowser, [
@@ -311,12 +320,13 @@ add_task(async function open_tab_new_window_sort_by_recency() {
});
add_task(async function styling_for_multiple_windows() {
+ let tabChangeRaised;
await openFirefoxViewTab(window).then(async viewTab => {
const browser = viewTab.linkedBrowser;
await navigateToOpenTabs(browser);
const openTabs = getOpenTabsComponent(browser);
setSortOption(openTabs, "tabStripOrder");
- await openTabs.openTabsTarget.readyWindowsPromise;
+ await NonPrivateTabs.readyWindowsPromise;
await openTabs.updateComplete;
ok(
@@ -325,13 +335,10 @@ add_task(async function styling_for_multiple_windows() {
);
});
- await BrowserTestUtils.openNewBrowserWindow();
- let tabChangeRaised = BrowserTestUtils.waitForEvent(
- NonPrivateTabs,
- "TabChange"
- );
+ let win2 = await BrowserTestUtils.openNewBrowserWindow();
+ info("Switching to new window");
+ await switchToWindow(win2);
await NonPrivateTabs.readyWindowsPromise;
- await tabChangeRaised;
is(
NonPrivateTabs.currentWindows.length,
2,
@@ -339,290 +346,54 @@ add_task(async function styling_for_multiple_windows() {
);
info("switch to firefox view in the first window");
- SimpleTest.promiseFocus(window);
await openFirefoxViewTab(window).then(async viewTab => {
const browser = viewTab.linkedBrowser;
const openTabs = getOpenTabsComponent(browser);
- await openTabs.openTabsTarget.readyWindowsPromise;
- await openTabs.updateComplete;
+ const cardContainer = openTabs.shadowRoot.querySelector(
+ ".view-opentabs-card-container"
+ );
+ info("waiting for card-count to reflect 2 windows");
+ await BrowserTestUtils.waitForCondition(() => {
+ return cardContainer.getAttribute("card-count") == "two";
+ });
is(
openTabs.openTabsTarget.currentWindows.length,
2,
"There should be 2 current windows"
);
- ok(
- openTabs.shadowRoot.querySelector("[card-count=two]"),
- "The container shows two columns when two windows are open."
+ is(
+ cardContainer.getAttribute("card-count"),
+ "two",
+ "The container shows two columns when two windows are open"
);
});
- await BrowserTestUtils.openNewBrowserWindow();
+
tabChangeRaised = BrowserTestUtils.waitForEvent(NonPrivateTabs, "TabChange");
+ let win3 = await BrowserTestUtils.openNewBrowserWindow();
+ await switchToWindow(win3);
await NonPrivateTabs.readyWindowsPromise;
await tabChangeRaised;
is(
NonPrivateTabs.currentWindows.length,
3,
- "NonPrivateTabs now has 2 currentWindows"
+ "NonPrivateTabs now has 3 currentWindows"
);
- SimpleTest.promiseFocus(window);
- await openFirefoxViewTab(window).then(async viewTab => {
- const browser = viewTab.linkedBrowser;
- const openTabs = getOpenTabsComponent(browser);
- await openTabs.openTabsTarget.readyWindowsPromise;
- await openTabs.updateComplete;
-
- ok(
- openTabs.shadowRoot.querySelector("[card-count=three-or-more]"),
- "The container shows three columns when three windows are open."
- );
- });
- await cleanup();
-});
-
-add_task(async function toggle_show_more_link() {
- const tabEntry = url => ({
- entries: [{ url, triggeringPrincipal_base64 }],
- });
- const NUMBER_OF_WINDOWS = 4;
- const NUMBER_OF_TABS = 42;
- const browserState = { windows: [] };
- for (let windowIndex = 0; windowIndex < NUMBER_OF_WINDOWS; windowIndex++) {
- const winData = { tabs: [] };
- let tabCount = windowIndex == NUMBER_OF_WINDOWS - 1 ? NUMBER_OF_TABS : 1;
- for (let i = 0; i < tabCount; i++) {
- winData.tabs.push(tabEntry(`data:,Window${windowIndex}-Tab${i}`));
- }
- winData.selected = winData.tabs.length;
- browserState.windows.push(winData);
- }
- // use Session restore to batch-open windows and tabs
- await SessionStoreTestUtils.promiseBrowserState(browserState);
- // restoring this state requires an update to the initial tab globals
- // so cleanup expects the right thing
- gInitialTab = gBrowser.selectedTab;
- gInitialTabURL = gBrowser.selectedBrowser.currentURI.spec;
-
- const windows = Array.from(Services.wm.getEnumerator("navigator:browser"));
- is(windows.length, NUMBER_OF_WINDOWS, "There are four browser windows.");
-
- const tab = (win = window) => {
- info("Tab");
- EventUtils.synthesizeKey("KEY_Tab", {}, win);
- };
-
- const enter = (win = window) => {
- info("Enter");
- EventUtils.synthesizeKey("KEY_Enter", {}, win);
- };
-
- let lastCard;
-
- SimpleTest.promiseFocus(window);
+ // switch back to the original window
await openFirefoxViewTab(window).then(async viewTab => {
const browser = viewTab.linkedBrowser;
- await navigateToOpenTabs(browser);
const openTabs = getOpenTabsComponent(browser);
- await openTabs.openTabsTarget.readyWindowsPromise;
- await openTabs.updateComplete;
-
- const cards = getCards(browser);
- is(cards.length, NUMBER_OF_WINDOWS, "There are four windows.");
- lastCard = cards[NUMBER_OF_WINDOWS - 1];
- });
-
- await openFirefoxViewTab(window).then(async viewTab => {
- const browser = viewTab.linkedBrowser;
- const openTabs = getOpenTabsComponent(browser);
- await openTabs.openTabsTarget.readyWindowsPromise;
- await openTabs.updateComplete;
- Assert.less(
- (await getRowsForCard(lastCard)).length,
- NUMBER_OF_TABS,
- "Not all tabs are shown yet."
- );
- info("Toggle the Show More link.");
- lastCard.shadowRoot.querySelector("div[slot=footer]").click();
- await BrowserTestUtils.waitForMutationCondition(
- lastCard.shadowRoot,
- { childList: true, subtree: true },
- async () => (await getRowsForCard(lastCard)).length === NUMBER_OF_TABS
+ const cardContainer = openTabs.shadowRoot.querySelector(
+ ".view-opentabs-card-container"
);
- info("Toggle the Show Less link.");
- lastCard.shadowRoot.querySelector("div[slot=footer]").click();
- await BrowserTestUtils.waitForMutationCondition(
- lastCard.shadowRoot,
- { childList: true, subtree: true },
- async () => (await getRowsForCard(lastCard)).length < NUMBER_OF_TABS
- );
-
- // Setting this pref allows the test to run as expected with a keyboard on MacOS
- await SpecialPowers.pushPrefEnv({
- set: [["accessibility.tabfocus", 7]],
+ await BrowserTestUtils.waitForCondition(() => {
+ return cardContainer.getAttribute("card-count") == "three-or-more";
});
-
- info("Toggle the Show More link with keyboard.");
- lastCard.shadowRoot.querySelector("card-container").summaryEl.focus();
- // Tab to first item in the list
- tab();
- // Tab to the footer
- tab();
- enter();
- await BrowserTestUtils.waitForMutationCondition(
- lastCard.shadowRoot,
- { childList: true, subtree: true },
- async () => (await getRowsForCard(lastCard)).length === NUMBER_OF_TABS
- );
-
- info("Toggle the Show Less link with keyboard.");
- lastCard.shadowRoot.querySelector("card-container").summaryEl.focus();
- // Tab to first item in the list
- tab();
- // Tab to the footer
- tab();
- enter();
- await BrowserTestUtils.waitForMutationCondition(
- lastCard.shadowRoot,
- { childList: true, subtree: true },
- async () => (await getRowsForCard(lastCard)).length < NUMBER_OF_TABS
- );
-
- await SpecialPowers.popPrefEnv();
- });
- await cleanup();
-});
-
-add_task(async function search_open_tabs() {
- // Open a new window and navigate to TEST_URL. Then, when we search for
- // TEST_URL, it should show a search result in the new window's card.
- const win = await BrowserTestUtils.openNewBrowserWindow();
- await BrowserTestUtils.openNewForegroundTab(win.gBrowser, TEST_URL);
-
- await SpecialPowers.pushPrefEnv({
- set: [["browser.firefox-view.search.enabled", true]],
- });
- await openFirefoxViewTab(window).then(async viewTab => {
- const browser = viewTab.linkedBrowser;
- await navigateToOpenTabs(browser);
- const openTabs = getOpenTabsComponent(browser);
- await openTabs.openTabsTarget.readyWindowsPromise;
- await openTabs.updateComplete;
-
- const cards = getCards(browser);
- is(cards.length, 2, "There are two windows.");
- const winTabs = await getRowsForCard(cards[0]);
- const newWinTabs = await getRowsForCard(cards[1]);
-
- info("Input a search query.");
- EventUtils.synthesizeMouseAtCenter(openTabs.searchTextbox, {}, content);
- EventUtils.sendString(TEST_URL, content);
- await TestUtils.waitForCondition(
- () => openTabs.viewCards[0].tabList.rowEls.length === 0,
- "There are no matching search results in the original window."
- );
- await TestUtils.waitForCondition(
- () => openTabs.viewCards[1].tabList.rowEls.length === 1,
- "There is one matching search result in the new window."
- );
-
- info("Clear the search query.");
- EventUtils.synthesizeMouseAtCenter(
- openTabs.searchTextbox.clearButton,
- {},
- content
- );
- await TestUtils.waitForCondition(
- () => openTabs.viewCards[0].tabList.rowEls.length === winTabs.length,
- "The original window's list is restored."
- );
- await TestUtils.waitForCondition(
- () => openTabs.viewCards[1].tabList.rowEls.length === newWinTabs.length,
- "The new window's list is restored."
- );
- openTabs.searchTextbox.blur();
-
- info("Input a search query with keyboard.");
- EventUtils.synthesizeKey("f", { accelKey: true }, content);
- EventUtils.sendString(TEST_URL, content);
- await TestUtils.waitForCondition(
- () => openTabs.viewCards[0].tabList.rowEls.length === 0,
- "There are no matching search results in the original window."
- );
- await TestUtils.waitForCondition(
- () => openTabs.viewCards[1].tabList.rowEls.length === 1,
- "There is one matching search result in the new window."
- );
-
- info("Clear the search query with keyboard.");
- is(
- openTabs.shadowRoot.activeElement,
- openTabs.searchTextbox,
- "Search input is focused"
- );
- EventUtils.synthesizeKey("KEY_Tab", {}, content);
ok(
- openTabs.searchTextbox.clearButton.matches(":focus-visible"),
- "Clear Search button is focused"
- );
- EventUtils.synthesizeKey("KEY_Enter", {}, content);
- await TestUtils.waitForCondition(
- () => openTabs.viewCards[0].tabList.rowEls.length === winTabs.length,
- "The original window's list is restored."
- );
- await TestUtils.waitForCondition(
- () => openTabs.viewCards[1].tabList.rowEls.length === newWinTabs.length,
- "The new window's list is restored."
- );
- });
-
- await SpecialPowers.popPrefEnv();
- await cleanup();
-});
-
-add_task(async function search_open_tabs_recent_browsing() {
- const NUMBER_OF_TABS = 6;
- const win = await BrowserTestUtils.openNewBrowserWindow();
- for (let i = 0; i < NUMBER_OF_TABS; i++) {
- await BrowserTestUtils.openNewForegroundTab(win.gBrowser, TEST_URL);
- }
- await SpecialPowers.pushPrefEnv({
- set: [["browser.firefox-view.search.enabled", true]],
- });
- await openFirefoxViewTab(window).then(async viewTab => {
- const browser = viewTab.linkedBrowser;
- await navigateToCategoryAndWait(browser.contentDocument, "recentbrowsing");
- const recentBrowsing = browser.contentDocument.querySelector(
- "view-recentbrowsing"
- );
-
- info("Input a search query.");
- EventUtils.synthesizeMouseAtCenter(
- recentBrowsing.searchTextbox,
- {},
- content
- );
- EventUtils.sendString(TEST_URL, content);
- const slot = recentBrowsing.querySelector("[slot='opentabs']");
- await TestUtils.waitForCondition(
- () => slot.viewCards[0].tabList.rowEls.length === 5,
- "Not all search results are shown yet."
+ openTabs.shadowRoot.querySelector("[card-count=three-or-more]"),
+ "The container shows three columns when three windows are open."
);
-
- info("Click the Show All link.");
- const showAllLink = await TestUtils.waitForCondition(() => {
- const elt = slot.viewCards[0].shadowRoot.querySelector(
- "[data-l10n-id='firefoxview-show-all']"
- );
- EventUtils.synthesizeMouseAtCenter(elt, {}, content);
- if (slot.viewCards[0].tabList.rowEls.length === NUMBER_OF_TABS) {
- return elt;
- }
- return false;
- }, "All search results are shown.");
- is(showAllLink.role, "link", "The show all control is a link.");
- ok(BrowserTestUtils.isHidden(showAllLink), "The show all link is hidden.");
});
- await SpecialPowers.popPrefEnv();
await cleanup();
});
diff --git a/browser/components/firefoxview/tests/browser/browser_opentabs_changes.js b/browser/components/firefoxview/tests/browser/browser_opentabs_changes.js
index c293afa8cd..15aba26d74 100644
--- a/browser/components/firefoxview/tests/browser/browser_opentabs_changes.js
+++ b/browser/components/firefoxview/tests/browser/browser_opentabs_changes.js
@@ -1,4 +1,4 @@
-const { NonPrivateTabs, getTabsTargetForWindow } = ChromeUtils.importESModule(
+const { getTabsTargetForWindow } = ChromeUtils.importESModule(
"resource:///modules/OpenTabs.sys.mjs"
);
let privateTabsChanges;
@@ -505,8 +505,9 @@ add_task(async function test_tabsFromPrivateWindows() {
});
const private2TabsChanges = getTabsTargetForWindow(private2Win);
private2TabsChanges.addEventListener("TabChange", private2Listener);
- ok(
- privateTabsChanges !== getTabsTargetForWindow(private2Win),
+ Assert.notStrictEqual(
+ privateTabsChanges,
+ getTabsTargetForWindow(private2Win),
"getTabsTargetForWindow creates a distinct instance for a different private window"
);
diff --git a/browser/components/firefoxview/tests/browser/browser_opentabs_firefoxview.js b/browser/components/firefoxview/tests/browser/browser_opentabs_firefoxview.js
index 57d0f8d031..955c2363d7 100644
--- a/browser/components/firefoxview/tests/browser/browser_opentabs_firefoxview.js
+++ b/browser/components/firefoxview/tests/browser/browser_opentabs_firefoxview.js
@@ -1,6 +1,9 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
+// Test regularly times out - especially with verify
+requestLongerTimeout(2);
+
const TEST_URL1 = "about:robots";
const TEST_URL2 = "https://example.org/";
const TEST_URL3 = "about:mozilla";
@@ -20,27 +23,6 @@ const fxaDevicesWithCommands = [
},
];
-const { NonPrivateTabs } = ChromeUtils.importESModule(
- "resource:///modules/OpenTabs.sys.mjs"
-);
-
-async function getRowsForCard(card) {
- await TestUtils.waitForCondition(() => card.tabList.rowEls.length);
- return card.tabList.rowEls;
-}
-
-async function add_new_tab(URL) {
- let tabChangeRaised = BrowserTestUtils.waitForEvent(
- NonPrivateTabs,
- "TabChange"
- );
- let tab = BrowserTestUtils.addTab(gBrowser, URL);
- // wait so we can reliably compare the tab URL
- await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
- await tabChangeRaised;
- return tab;
-}
-
function getVisibleTabURLs(win = window) {
return win.gBrowser.visibleTabs.map(tab => tab.linkedBrowser.currentURI.spec);
}
@@ -78,7 +60,7 @@ async function waitUntilRowsMatch(openTabs, cardIndex, expectedURLs) {
card.shadowRoot,
{ characterData: true, childList: true, subtree: true },
async () => {
- let rows = await getRowsForCard(card);
+ let rows = await getTabRowsForCard(card);
return (
rows.length == expectedURLs.length &&
JSON.stringify(getTabRowURLs(rows)) == expectedURLsAsString
@@ -106,7 +88,7 @@ async function getContextMenuPanelListForCard(card) {
async function openContextMenuForItem(tabItem, card) {
// click on the item's button element (more menu)
// and wait for the panel list to be shown
- tabItem.buttonEl.click();
+ tabItem.secondaryButtonEl.click();
// NOTE: menu must populate with devices data before it can be rendered
// so the creation of the panel-list can be async
let panelList = await getContextMenuPanelListForCard(card);
@@ -122,7 +104,7 @@ async function moreMenuSetup() {
await clickFirefoxViewButton(window);
const document = window.FirefoxViewHandler.tab.linkedBrowser.contentDocument;
- await navigateToCategoryAndWait(document, "opentabs");
+ await navigateToViewAndWait(document, "opentabs");
let openTabs = document.querySelector("view-opentabs[name=opentabs]");
setSortOption(openTabs, "tabStripOrder");
@@ -134,7 +116,7 @@ async function moreMenuSetup() {
let cards = getOpenTabsCards(openTabs);
is(cards.length, 1, "There is one open window.");
- let rows = await getRowsForCard(cards[0]);
+ let rows = await getTabRowsForCard(cards[0]);
let firstTab = rows[0];
@@ -148,6 +130,44 @@ async function moreMenuSetup() {
return [cards, rows];
}
+add_task(async function test_close_open_tab() {
+ await withFirefoxView({}, async browser => {
+ const [cards, rows] = await moreMenuSetup();
+ const firstTab = rows[0];
+ const tertiaryButtonEl = firstTab.tertiaryButtonEl;
+
+ ok(tertiaryButtonEl, "Dismiss button exists");
+
+ await clearAllParentTelemetryEvents();
+ let closeTabEvent = [
+ ["firefoxview_next", "close_open_tab", "tabs", undefined],
+ ];
+
+ let tabsUpdated = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+ EventUtils.synthesizeMouseAtCenter(tertiaryButtonEl, {}, content);
+ await tabsUpdated;
+ Assert.deepEqual(
+ getVisibleTabURLs(),
+ [TEST_URL2, TEST_URL3],
+ "First tab successfully removed"
+ );
+
+ await telemetryEvent(closeTabEvent);
+
+ const openTabs = cards[0].ownerDocument.querySelector(
+ "view-opentabs[name=opentabs]"
+ );
+ await waitUntilRowsMatch(openTabs, 0, [TEST_URL2, TEST_URL3]);
+
+ while (gBrowser.tabs.length > 1) {
+ BrowserTestUtils.removeTab(gBrowser.tabs[0]);
+ }
+ });
+});
+
add_task(async function test_more_menus() {
await withFirefoxView({}, async browser => {
let win = browser.ownerGlobal;
@@ -156,11 +176,11 @@ add_task(async function test_more_menus() {
gBrowser.selectedTab = gBrowser.visibleTabs[0];
Assert.equal(
gBrowser.selectedTab.linkedBrowser.currentURI.spec,
- "about:blank",
- "Selected tab is about:blank"
+ "about:mozilla",
+ "Selected tab is about:mozilla"
);
- info(`Loading ${TEST_URL1} into the selected about:blank tab`);
+ info(`Loading ${TEST_URL1} into the selected about:mozilla tab`);
let tabLoaded = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
win.gURLBar.focus();
@@ -176,64 +196,18 @@ add_task(async function test_more_menus() {
"Prepared 3 open tabs"
);
+ // Move Tab submenu item
let firstTab = rows[0];
// Open the panel list (more menu) from the first list item
let panelList = await openContextMenuForItem(firstTab, cards[0]);
- // Close Tab menu item
- info("Panel list shown. Clicking on panel-item");
- let panelItem = panelList.querySelector(
- "panel-item[data-l10n-id=fxviewtabrow-close-tab]"
- );
- let panelItemButton = panelItem.shadowRoot.querySelector(
- "button[role=menuitem]"
- );
- ok(panelItem, "Close Tab panel item exists");
- ok(
- panelItemButton,
- "Close Tab panel item button with role=menuitem exists"
- );
-
- await clearAllParentTelemetryEvents();
- let contextMenuEvent = [
- [
- "firefoxview_next",
- "context_menu",
- "tabs",
- undefined,
- { menu_action: "close-tab", data_type: "opentabs" },
- ],
- ];
-
- // close a tab via the menu
- let tabChangeRaised = BrowserTestUtils.waitForEvent(
- NonPrivateTabs,
- "TabChange"
- );
- menuHidden = BrowserTestUtils.waitForEvent(panelList, "hidden");
- panelItemButton.click();
- info("Waiting for result of closing a tab via the menu");
- await tabChangeRaised;
- await cards[0].getUpdateComplete();
- await menuHidden;
- await telemetryEvent(contextMenuEvent);
-
- Assert.deepEqual(
- getVisibleTabURLs(),
- [TEST_URL2, TEST_URL3],
- "Got the expected 2 open tabs"
- );
-
let openTabs = cards[0].ownerDocument.querySelector(
"view-opentabs[name=opentabs]"
);
- await waitUntilRowsMatch(openTabs, 0, [TEST_URL2, TEST_URL3]);
+ await waitUntilRowsMatch(openTabs, 0, [TEST_URL1, TEST_URL2, TEST_URL3]);
- // Move Tab submenu item
- firstTab = rows[0];
- is(firstTab.url, TEST_URL2, `First tab list item is ${TEST_URL2}`);
+ is(firstTab.url, TEST_URL1, `First tab list item is ${TEST_URL1}`);
- panelList = await openContextMenuForItem(firstTab, cards[0]);
let moveTabsPanelItem = panelList.querySelector(
"panel-item[data-l10n-id=fxviewtabrow-move-tab]"
);
@@ -243,15 +217,14 @@ add_task(async function test_more_menus() {
);
ok(moveTabsSubmenuList, "Move tabs submenu panel list exists");
- // navigate down to the "Move tabs" submenu option, and
+ // navigate to the "Move tabs" submenu option, and
// open it with the right arrow key
- EventUtils.synthesizeKey("KEY_ArrowDown", {});
shown = BrowserTestUtils.waitForEvent(moveTabsSubmenuList, "shown");
EventUtils.synthesizeKey("KEY_ArrowRight", {});
await shown;
await clearAllParentTelemetryEvents();
- contextMenuEvent = [
+ let contextMenuEvent = [
[
"firefoxview_next",
"context_menu",
@@ -264,7 +237,7 @@ add_task(async function test_more_menus() {
// click on the first option, which should be "Move to the end" since
// this is the first tab
menuHidden = BrowserTestUtils.waitForEvent(panelList, "hidden");
- tabChangeRaised = BrowserTestUtils.waitForEvent(
+ let tabChangeRaised = BrowserTestUtils.waitForEvent(
NonPrivateTabs,
"TabChange"
);
@@ -276,7 +249,7 @@ add_task(async function test_more_menus() {
Assert.deepEqual(
getVisibleTabURLs(),
- [TEST_URL3, TEST_URL2],
+ [TEST_URL2, TEST_URL3, TEST_URL1],
"The last tab became the first tab"
);
@@ -284,15 +257,15 @@ add_task(async function test_more_menus() {
// closing a tab since it very clearly reveals the issues
// outlined in bug 1852622 when there are 3 or more tabs open
// and one is moved via the more menus.
- await waitUntilRowsMatch(openTabs, 0, [TEST_URL3, TEST_URL2]);
+ await waitUntilRowsMatch(openTabs, 0, [TEST_URL2, TEST_URL3, TEST_URL1]);
// Copy Link menu item (copyLink function that's called is a member of Viewpage.mjs)
panelList = await openContextMenuForItem(firstTab, cards[0]);
firstTab = rows[0];
- panelItem = panelList.querySelector(
+ let panelItem = panelList.querySelector(
"panel-item[data-l10n-id=fxviewtabrow-copy-link]"
);
- panelItemButton = panelItem.shadowRoot.querySelector(
+ let panelItemButton = panelItem.shadowRoot.querySelector(
"button[role=menuitem]"
);
ok(panelItem, "Copy link panel item exists");
@@ -323,7 +296,7 @@ add_task(async function test_more_menus() {
"text/plain",
Ci.nsIClipboard.kGlobalClipboard
);
- is(copiedText, TEST_URL3, "The correct url has been copied and pasted");
+ is(copiedText, TEST_URL2, "The correct url has been copied and pasted");
while (gBrowser.tabs.length > 1) {
BrowserTestUtils.removeTab(gBrowser.tabs[0]);
@@ -349,11 +322,11 @@ add_task(async function test_send_device_submenu() {
.callsFake(() => fxaDevicesWithCommands);
await withFirefoxView({}, async browser => {
- // TEST_URL2 is our only tab, left over from previous test
+ // TEST_URL1 is our only tab, left over from previous test
Assert.deepEqual(
getVisibleTabURLs(),
- [TEST_URL2],
- `We initially have a single ${TEST_URL2} tab`
+ [TEST_URL1],
+ `We initially have a single ${TEST_URL1} tab`
);
let shown;
@@ -376,9 +349,7 @@ add_task(async function test_send_device_submenu() {
// navigate down to the "Send tabs" submenu option, and
// open it with the right arrow key
- EventUtils.synthesizeKey("KEY_ArrowDown", {});
- EventUtils.synthesizeKey("KEY_ArrowDown", {});
- EventUtils.synthesizeKey("KEY_ArrowDown", {});
+ EventUtils.synthesizeKey("KEY_ArrowDown", { repeat: 4 });
shown = BrowserTestUtils.waitForEvent(sendTabSubmenuList, "shown");
EventUtils.synthesizeKey("KEY_ArrowRight", {});
@@ -389,9 +360,9 @@ add_task(async function test_send_device_submenu() {
.expects("sendTabToDevice")
.once()
.withExactArgs(
- TEST_URL2,
+ TEST_URL1,
[fxaDevicesWithCommands[0]],
- "mochitest index /"
+ "Gort! Klaatu barada nikto!"
)
.returns(true);
diff --git a/browser/components/firefoxview/tests/browser/browser_opentabs_more.js b/browser/components/firefoxview/tests/browser/browser_opentabs_more.js
new file mode 100644
index 0000000000..fd25348699
--- /dev/null
+++ b/browser/components/firefoxview/tests/browser/browser_opentabs_more.js
@@ -0,0 +1,151 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+let gInitialTab;
+let gInitialTabURL;
+
+// This test opens many tabs and regularly times out - especially with verify
+requestLongerTimeout(2);
+
+add_setup(function () {
+ gInitialTab = gBrowser.selectedTab;
+ gInitialTabURL = gBrowser.selectedBrowser.currentURI.spec;
+});
+
+async function cleanup() {
+ await SimpleTest.promiseFocus(window);
+ await promiseAllButPrimaryWindowClosed();
+ await BrowserTestUtils.switchTab(gBrowser, gInitialTab);
+ await closeFirefoxViewTab(window);
+
+ // clean up extra tabs
+ while (gBrowser.tabs.length > 1) {
+ BrowserTestUtils.removeTab(gBrowser.tabs.at(-1));
+ }
+
+ is(
+ BrowserWindowTracker.orderedWindows.length,
+ 1,
+ "One window at the end of test cleanup"
+ );
+ Assert.deepEqual(
+ gBrowser.tabs.map(tab => tab.linkedBrowser.currentURI.spec),
+ [gInitialTabURL],
+ "One about:blank tab open at the end up test cleanup"
+ );
+}
+
+add_task(async function toggle_show_more_link() {
+ const tabEntry = url => ({
+ entries: [{ url, triggeringPrincipal_base64 }],
+ });
+ const NUMBER_OF_WINDOWS = 4;
+ const NUMBER_OF_TABS = 42;
+ const browserState = { windows: [] };
+ for (let windowIndex = 0; windowIndex < NUMBER_OF_WINDOWS; windowIndex++) {
+ const winData = { tabs: [] };
+ let tabCount = windowIndex == NUMBER_OF_WINDOWS - 1 ? NUMBER_OF_TABS : 1;
+ for (let i = 0; i < tabCount; i++) {
+ winData.tabs.push(tabEntry(`data:,Window${windowIndex}-Tab${i}`));
+ }
+ winData.selected = winData.tabs.length;
+ browserState.windows.push(winData);
+ }
+ // use Session restore to batch-open windows and tabs
+ info(`Restoring to browserState: ${JSON.stringify(browserState, null, 2)}`);
+ await SessionStoreTestUtils.promiseBrowserState(browserState);
+ info("Windows and tabs opened, waiting for readyWindowsPromise");
+ await NonPrivateTabs.readyWindowsPromise;
+ info("readyWindowsPromise resolved");
+
+ // restoring this state requires an update to the initial tab globals
+ // so cleanup expects the right thing
+ gInitialTab = gBrowser.selectedTab;
+ gInitialTabURL = gBrowser.selectedBrowser.currentURI.spec;
+
+ const windows = Array.from(Services.wm.getEnumerator("navigator:browser"));
+ is(windows.length, NUMBER_OF_WINDOWS, "There are four browser windows.");
+
+ const tab = (win = window) => {
+ info("Tab");
+ EventUtils.synthesizeKey("KEY_Tab", {}, win);
+ };
+
+ const enter = (win = window) => {
+ info("Enter");
+ EventUtils.synthesizeKey("KEY_Enter", {}, win);
+ };
+
+ let lastCard;
+
+ await openFirefoxViewTab(window).then(async viewTab => {
+ const browser = viewTab.linkedBrowser;
+ await navigateToOpenTabs(browser);
+ const openTabs = getOpenTabsComponent(browser);
+ await openTabs.updateComplete;
+
+ let cards;
+ info(`Waiting for ${NUMBER_OF_WINDOWS} of window cards`);
+ await BrowserTestUtils.waitForCondition(() => {
+ cards = getOpenTabsCards(openTabs);
+ return cards.length == NUMBER_OF_WINDOWS;
+ });
+ is(cards.length, NUMBER_OF_WINDOWS, "There are four windows.");
+ lastCard = cards[NUMBER_OF_WINDOWS - 1];
+
+ Assert.less(
+ (await getTabRowsForCard(lastCard)).length,
+ NUMBER_OF_TABS,
+ "Not all tabs are shown yet."
+ );
+ info("Toggle the Show More link.");
+ lastCard.shadowRoot.querySelector("div[slot=footer]").click();
+ await BrowserTestUtils.waitForMutationCondition(
+ lastCard.shadowRoot,
+ { childList: true, subtree: true },
+ async () => (await getTabRowsForCard(lastCard)).length === NUMBER_OF_TABS
+ );
+
+ info("Toggle the Show Less link.");
+ lastCard.shadowRoot.querySelector("div[slot=footer]").click();
+ await BrowserTestUtils.waitForMutationCondition(
+ lastCard.shadowRoot,
+ { childList: true, subtree: true },
+ async () => (await getTabRowsForCard(lastCard)).length < NUMBER_OF_TABS
+ );
+
+ // Setting this pref allows the test to run as expected with a keyboard on MacOS
+ await SpecialPowers.pushPrefEnv({
+ set: [["accessibility.tabfocus", 7]],
+ });
+
+ info("Toggle the Show More link with keyboard.");
+ lastCard.shadowRoot.querySelector("card-container").summaryEl.focus();
+ // Tab to first item in the list
+ tab();
+ // Tab to the footer
+ tab();
+ enter();
+ await BrowserTestUtils.waitForMutationCondition(
+ lastCard.shadowRoot,
+ { childList: true, subtree: true },
+ async () => (await getTabRowsForCard(lastCard)).length === NUMBER_OF_TABS
+ );
+
+ info("Toggle the Show Less link with keyboard.");
+ lastCard.shadowRoot.querySelector("card-container").summaryEl.focus();
+ // Tab to first item in the list
+ tab();
+ // Tab to the footer
+ tab();
+ enter();
+ await BrowserTestUtils.waitForMutationCondition(
+ lastCard.shadowRoot,
+ { childList: true, subtree: true },
+ async () => (await getTabRowsForCard(lastCard)).length < NUMBER_OF_TABS
+ );
+
+ await SpecialPowers.popPrefEnv();
+ });
+ await cleanup();
+});
diff --git a/browser/components/firefoxview/tests/browser/browser_opentabs_pinned_tabs.js b/browser/components/firefoxview/tests/browser/browser_opentabs_pinned_tabs.js
new file mode 100644
index 0000000000..d74812bca5
--- /dev/null
+++ b/browser/components/firefoxview/tests/browser/browser_opentabs_pinned_tabs.js
@@ -0,0 +1,481 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+let pageWithAlert =
+ // eslint-disable-next-line @microsoft/sdl/no-insecure-url
+ "http://example.com/browser/browser/base/content/test/tabPrompts/openPromptOffTimeout.html";
+let pageWithSound =
+ "http://mochi.test:8888/browser/dom/base/test/file_audioLoop.html";
+
+function cleanup() {
+ // Cleanup
+ while (gBrowser.tabs.length > 1) {
+ BrowserTestUtils.removeTab(gBrowser.tabs[1]);
+ }
+}
+
+const arrowDown = async tabList => {
+ info("Arrow down");
+ EventUtils.synthesizeKey("KEY_ArrowDown", {});
+ await tabList.getUpdateComplete();
+};
+const arrowUp = async tabList => {
+ info("Arrow up");
+ EventUtils.synthesizeKey("KEY_ArrowUp", {});
+ await tabList.getUpdateComplete();
+};
+const arrowRight = async tabList => {
+ info("Arrow right");
+ EventUtils.synthesizeKey("KEY_ArrowRight", {});
+ await tabList.getUpdateComplete();
+};
+const arrowLeft = async tabList => {
+ info("Arrow left");
+ EventUtils.synthesizeKey("KEY_ArrowLeft", {});
+ await tabList.getUpdateComplete();
+};
+
+add_task(async function test_pin_unpin_open_tab() {
+ await withFirefoxView({}, async browser => {
+ const { document } = browser.contentWindow;
+ await navigateToViewAndWait(document, "opentabs");
+
+ let openTabs = document.querySelector("view-opentabs[name=opentabs]");
+ await openTabs.updateComplete;
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList.rowEls.length
+ );
+ await openTabs.openTabsTarget.readyWindowsPromise;
+ let card = openTabs.viewCards[0];
+ let openTabEl = card.tabList.rowEls[0];
+ let tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+
+ // Pin tab
+ EventUtils.synthesizeMouseAtCenter(
+ openTabEl.secondaryButtonEl,
+ {},
+ content
+ );
+ await TestUtils.waitForCondition(() => card.tabContextMenu.panelList);
+ let panelList = card.tabContextMenu.panelList;
+ await BrowserTestUtils.waitForEvent(panelList, "shown");
+ info("The context menu is shown when clicking the tab's 'more' button");
+
+ let pinTabPanelItem = panelList.querySelector(
+ "panel-item[data-l10n-id=fxviewtabrow-pin-tab]"
+ );
+
+ await clearAllParentTelemetryEvents();
+ let contextMenuEvent = [
+ [
+ "firefoxview_next",
+ "context_menu",
+ "tabs",
+ undefined,
+ { menu_action: "pin-tab", data_type: "opentabs" },
+ ],
+ ];
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+
+ // Unpin tab
+ EventUtils.synthesizeMouseAtCenter(pinTabPanelItem, {}, content);
+ info("Pin Tab context menu option clicked.");
+
+ await tabChangeRaised;
+ await openTabs.updateComplete;
+
+ let pinnedTab = card.tabList.rowEls[0];
+ await TestUtils.waitForCondition(() =>
+ pinnedTab.indicators.includes("pinned")
+ );
+
+ // Check aria roles
+ let listWrapper = card.tabList.shadowRoot.querySelector(".fxview-tab-list");
+ ok(
+ Array.from(listWrapper.classList).includes("pinned"),
+ "The tab list has the 'pinned' class as expected."
+ );
+
+ Assert.strictEqual(
+ listWrapper.getAttribute("role"),
+ "tablist",
+ "The list wrapper has an aria-role of 'tablist'"
+ );
+ Assert.strictEqual(
+ pinnedTab.pinnedTabButtonEl.getAttribute("role"),
+ "tab",
+ "The pinned tab's button element has a role of 'tab'"
+ );
+
+ // Open context menu
+ EventUtils.synthesizeMouseAtCenter(
+ pinnedTab,
+ { type: "contextmenu" },
+ content
+ );
+ await TestUtils.waitForCondition(() => card.tabContextMenu.panelList);
+ panelList = card.tabContextMenu.panelList;
+ await BrowserTestUtils.waitForEvent(panelList, "shown");
+ info("The context menu is shown when right clicking the pinned tab");
+
+ let unpinTabPanelItem = panelList.querySelector(
+ "panel-item[data-l10n-id=fxviewtabrow-unpin-tab]"
+ );
+
+ await clearAllParentTelemetryEvents();
+ contextMenuEvent = [
+ [
+ "firefoxview_next",
+ "context_menu",
+ "tabs",
+ undefined,
+ { menu_action: "unpin-tab", data_type: "opentabs" },
+ ],
+ ];
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+
+ // Unpin tab
+ EventUtils.synthesizeMouseAtCenter(unpinTabPanelItem, {}, content);
+ info("Unpin Tab context menu option clicked.");
+
+ await tabChangeRaised;
+ await openTabs.updateComplete;
+ await telemetryEvent(contextMenuEvent);
+ });
+ cleanup();
+});
+
+add_task(async function test_indicator_pinned_tabs_with_keyboard() {
+ await add_new_tab(URLs[0]);
+ await add_new_tab(URLs[1]);
+ await add_new_tab(pageWithSound);
+ await withFirefoxView({}, async browser => {
+ const { document } = browser.contentWindow;
+ await navigateToViewAndWait(document, "opentabs");
+
+ let openTabs = document.querySelector("view-opentabs[name=opentabs]");
+ await openTabs.updateComplete;
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList.rowEls.length
+ );
+ await openTabs.openTabsTarget.readyWindowsPromise;
+ setSortOption(openTabs, "tabStripOrder");
+ let card = openTabs.viewCards[0];
+
+ let openedTab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ pageWithAlert,
+ true
+ );
+ let openedTabGotAttentionPromise = BrowserTestUtils.waitForAttribute(
+ "attention",
+ openedTab
+ );
+
+ await switchToFxViewTab();
+
+ await openedTabGotAttentionPromise;
+
+ let tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+
+ // Pin 2 of 5 tabs
+ browser.ownerGlobal.gBrowser.tabs.forEach((tab, i) => {
+ if (i > 2) {
+ browser.ownerGlobal.gBrowser.pinTab(tab);
+ }
+ });
+
+ await tabChangeRaised;
+ await openTabs.updateComplete;
+
+ let soundPlayingPinnedTab = card.tabList.rowEls[0];
+ let attentionPinnedTab = card.tabList.rowEls[1];
+ let firstUnpinnedTab = card.tabList.rowEls[2];
+ let secondUnpinnedTab = card.tabList.rowEls[3];
+
+ // Check soundplaying indicator
+ ok(
+ soundPlayingPinnedTab.indicators.includes("pinned") &&
+ soundPlayingPinnedTab.indicators.includes("soundplaying") &&
+ soundPlayingPinnedTab.mediaButtonEl,
+ "The first pinned tab has the 'sound playing' indicator."
+ );
+
+ soundPlayingPinnedTab.pinnedTabButtonEl.focus();
+ ok(
+ isActiveElement(soundPlayingPinnedTab.pinnedTabButtonEl),
+ "Focus should be on the first pinned tab's button element."
+ );
+ info("First pinned tab has focus");
+
+ // Test mute/unmute
+ EventUtils.synthesizeKey("m", { ctrlKey: true });
+ await TestUtils.waitForCondition(() =>
+ soundPlayingPinnedTab.indicators.includes("muted")
+ );
+ EventUtils.synthesizeKey("m", { ctrlKey: true });
+ await TestUtils.waitForCondition(
+ () => !soundPlayingPinnedTab.indicators.includes("muted")
+ );
+
+ await arrowRight(card.tabList);
+ ok(
+ isActiveElement(attentionPinnedTab.pinnedTabButtonEl),
+ "Focus should be on the second pinned tab's button element."
+ );
+
+ // Check notification dot indicator
+ ok(
+ attentionPinnedTab.indicators.includes("pinned") &&
+ attentionPinnedTab.indicators.includes("attention") &&
+ Array.from(
+ attentionPinnedTab.shadowRoot.querySelector(
+ ".fxview-tab-row-favicon-wrapper"
+ ).classList
+ ).includes("attention"),
+ "The second pinned tab has the 'attention' indicator."
+ );
+
+ await arrowDown(card.tabList);
+ ok(
+ isActiveElement(firstUnpinnedTab.mainEl),
+ "Focus should be on the first unpinned tab's main/link element."
+ );
+
+ await arrowRight(card.tabList);
+ ok(
+ isActiveElement(firstUnpinnedTab.secondaryButtonEl),
+ "Focus should be on the first unpinned tab's secondary/more button element."
+ );
+
+ await arrowUp(card.tabList);
+ ok(
+ isActiveElement(attentionPinnedTab.pinnedTabButtonEl),
+ "Focus should be on the second pinned tab's button element."
+ );
+
+ await arrowRight(card.tabList);
+ ok(
+ isActiveElement(firstUnpinnedTab.secondaryButtonEl),
+ "Focus should be on the first unpinned tab's secondary/more button element."
+ );
+
+ await arrowUp(card.tabList);
+ ok(
+ isActiveElement(attentionPinnedTab.pinnedTabButtonEl),
+ "Focus should be on the second pinned tab's button element."
+ );
+
+ await arrowLeft(card.tabList);
+ ok(
+ isActiveElement(soundPlayingPinnedTab.pinnedTabButtonEl),
+ "Focus should be on the first pinned tab's button element."
+ );
+
+ await arrowDown(card.tabList);
+ ok(
+ isActiveElement(firstUnpinnedTab.secondaryButtonEl),
+ "Focus should be on the first unpinned tab's secondary/more button element."
+ );
+
+ await arrowDown(card.tabList);
+ ok(
+ isActiveElement(secondUnpinnedTab.secondaryButtonEl),
+ "Focus should be on the second unpinned tab's secondary/more button element."
+ );
+
+ // Switch back to other tab to close prompt before cleanup
+ await BrowserTestUtils.switchTab(gBrowser, openedTab);
+ EventUtils.synthesizeKey("KEY_Enter", {});
+ });
+ cleanup();
+});
+
+add_task(async function test_mute_unmute_pinned_tab() {
+ await withFirefoxView({}, async browser => {
+ const { document } = browser.contentWindow;
+ await navigateToViewAndWait(document, "opentabs");
+
+ let openTabs = document.querySelector("view-opentabs[name=opentabs]");
+ await openTabs.updateComplete;
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList.rowEls.length
+ );
+ await openTabs.openTabsTarget.readyWindowsPromise;
+ let card = openTabs.viewCards[0];
+ let openTabEl = card.tabList.rowEls[0];
+ let tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+
+ // Mute tab
+ // We intentionally turn off this a11y check, because the following click
+ // is purposefully targeting a not focusable button within a pinned tab
+ // control. A keyboard-only user could mute/unmute this pinned tab via the
+ // context menu, while we do not want to create an additional, unnecessary
+ // tabstop for this control, therefore this rule check shall be ignored by
+ // a11y_checks suite.
+ AccessibilityUtils.setEnv({ focusableRule: false });
+ EventUtils.synthesizeMouseAtCenter(openTabEl.mediaButtonEl, {}, content);
+ AccessibilityUtils.resetEnv();
+ info("Mute Tab button clicked.");
+
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+
+ await tabChangeRaised;
+ await openTabs.updateComplete;
+
+ let mutedTab = card.tabList.rowEls[0];
+ await TestUtils.waitForCondition(() =>
+ mutedTab.indicators.includes("muted")
+ );
+
+ // Unmute tab
+ // We intentionally turn off this a11y check, because the following click
+ // is purposefully targeting a not focusable button within a pinned tab
+ // control. A keyboard-only user could mute/unmute this pinned tab via the
+ // context menu, while we do not want to create an additional, unnecessary
+ // tabstop for this control, therefore this rule check shall be ignored by
+ // a11y_checks suite.
+ AccessibilityUtils.setEnv({ focusableRule: false });
+ EventUtils.synthesizeMouseAtCenter(openTabEl.mediaButtonEl, {}, content);
+ AccessibilityUtils.resetEnv();
+ info("Unmute Tab button clicked.");
+
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+
+ await tabChangeRaised;
+ await openTabs.updateComplete;
+
+ let unmutedTab = card.tabList.rowEls[0];
+ await TestUtils.waitForCondition(
+ () => !unmutedTab.indicators.includes("muted")
+ );
+ });
+ cleanup();
+});
+
+add_task(async function test_mute_unmute_with_context_menu() {
+ await withFirefoxView({}, async browser => {
+ const { document } = browser.contentWindow;
+ await navigateToViewAndWait(document, "opentabs");
+
+ let openTabs = document.querySelector("view-opentabs[name=opentabs]");
+ await openTabs.updateComplete;
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList.rowEls.length
+ );
+ await openTabs.openTabsTarget.readyWindowsPromise;
+ let card = openTabs.viewCards[0];
+ let openTabEl = card.tabList.rowEls[0];
+ let tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+
+ // Mute tab
+ EventUtils.synthesizeMouseAtCenter(
+ openTabEl.pinnedTabButtonEl,
+ { type: "contextmenu" },
+ content
+ );
+ await TestUtils.waitForCondition(() => card.tabContextMenu.panelList);
+ let panelList = card.tabContextMenu.panelList;
+ await BrowserTestUtils.waitForEvent(panelList, "shown");
+ info("The context menu is shown when clicking the tab's 'more' button");
+
+ let pinTabPanelItem = panelList.querySelector(
+ "panel-item[data-l10n-id=fxviewtabrow-mute-tab]"
+ );
+
+ await clearAllParentTelemetryEvents();
+ let contextMenuEvent = [
+ [
+ "firefoxview_next",
+ "context_menu",
+ "tabs",
+ undefined,
+ { menu_action: "mute-tab", data_type: "opentabs" },
+ ],
+ ];
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+
+ // Mute tab
+ EventUtils.synthesizeMouseAtCenter(pinTabPanelItem, {}, content);
+ info("Mute Tab context menu option clicked.");
+
+ await tabChangeRaised;
+ await openTabs.updateComplete;
+
+ let mutedTab = card.tabList.rowEls[0];
+ await TestUtils.waitForCondition(() =>
+ mutedTab.indicators.includes("muted")
+ );
+
+ // Open context menu
+ EventUtils.synthesizeMouseAtCenter(
+ mutedTab,
+ { type: "contextmenu" },
+ content
+ );
+ await TestUtils.waitForCondition(() => card.tabContextMenu.panelList);
+ panelList = card.tabContextMenu.panelList;
+ await BrowserTestUtils.waitForEvent(panelList, "shown");
+ info("The context menu is shown when right clicking the pinned tab");
+
+ let unmuteTabPanelItem = panelList.querySelector(
+ "panel-item[data-l10n-id=fxviewtabrow-unmute-tab]"
+ );
+
+ await clearAllParentTelemetryEvents();
+ contextMenuEvent = [
+ [
+ "firefoxview_next",
+ "context_menu",
+ "tabs",
+ undefined,
+ { menu_action: "unmute-tab", data_type: "opentabs" },
+ ],
+ ];
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+
+ // Unpin tab
+ EventUtils.synthesizeMouseAtCenter(unmuteTabPanelItem, {}, content);
+ info("Unmute Tab context menu option clicked.");
+
+ await tabChangeRaised;
+ await openTabs.updateComplete;
+ await telemetryEvent(contextMenuEvent);
+
+ let unmutedTab = card.tabList.rowEls[0];
+ await TestUtils.waitForCondition(
+ () => !unmutedTab.indicators.includes("muted")
+ );
+ });
+ cleanup();
+});
diff --git a/browser/components/firefoxview/tests/browser/browser_opentabs_recency.js b/browser/components/firefoxview/tests/browser/browser_opentabs_recency.js
index e5beb4700a..ee3f9981e1 100644
--- a/browser/components/firefoxview/tests/browser/browser_opentabs_recency.js
+++ b/browser/components/firefoxview/tests/browser/browser_opentabs_recency.js
@@ -13,9 +13,6 @@ const tabURL4 = "data:,Tab4";
let gInitialTab;
let gInitialTabURL;
-const { NonPrivateTabs } = ChromeUtils.importESModule(
- "resource:///modules/OpenTabs.sys.mjs"
-);
add_setup(function () {
gInitialTab = gBrowser.selectedTab;
@@ -158,12 +155,12 @@ function getOpenTabsComponent(browser) {
async function checkTabList(browser, expected) {
const tabsView = getOpenTabsComponent(browser);
- const openTabsCard = tabsView.shadowRoot.querySelector("view-opentabs-card");
- await tabsView.getUpdateComplete();
- const tabList = openTabsCard.shadowRoot.querySelector("fxview-tab-list");
- Assert.ok(tabList, "Found the tab list element");
- await TestUtils.waitForCondition(() => tabList.rowEls.length);
- let actual = Array.from(tabList.rowEls).map(row => row.url);
+ const [openTabsCard] = getOpenTabsCards(tabsView);
+ await openTabsCard.updateComplete;
+
+ const tabListRows = await getTabRowsForCard(openTabsCard);
+ Assert.ok(tabListRows, "Found the tab list element");
+ let actual = Array.from(tabListRows).map(row => row.url);
Assert.deepEqual(
actual,
expected,
@@ -255,7 +252,7 @@ add_task(async function test_multiple_window_tabs() {
NonPrivateTabs,
"TabRecencyChange"
);
- await SimpleTest.promiseFocus(win1);
+ await switchToWindow(win1);
await tabChangeRaised;
Assert.equal(
tabUrl(win1.gBrowser.selectedTab),
@@ -308,17 +305,20 @@ add_task(async function test_windows_activation() {
await openFirefoxViewTab(win1).then(tab => (fxViewTab = tab));
const win2 = await BrowserTestUtils.openNewBrowserWindow();
+ await switchToWindow(win2);
await prepareOpenTabs([tabURL2], win2);
const win3 = await BrowserTestUtils.openNewBrowserWindow();
+ await switchToWindow(win3);
await prepareOpenTabs([tabURL3], win3);
- await tabChangeRaised;
tabChangeRaised = BrowserTestUtils.waitForEvent(
NonPrivateTabs,
"TabRecencyChange"
);
- await SimpleTest.promiseFocus(win1);
+ info("Switching back to win 1");
+ await switchToWindow(win1);
+ info("Waiting for tabChangeRaised to resolve");
await tabChangeRaised;
const browser = fxViewTab.linkedBrowser;
@@ -329,7 +329,7 @@ add_task(async function test_windows_activation() {
NonPrivateTabs,
"TabRecencyChange"
);
- await SimpleTest.promiseFocus(win2);
+ await switchToWindow(win2);
await tabChangeRaised;
await checkTabList(browser, [tabURL2, tabURL3, tabURL1]);
await cleanup(win2, win3);
@@ -341,6 +341,7 @@ add_task(async function test_minimize_restore_windows() {
await prepareOpenTabs([tabURL1, tabURL2]);
const win2 = await BrowserTestUtils.openNewBrowserWindow();
await prepareOpenTabs([tabURL3, tabURL4], win2);
+ await NonPrivateTabs.readyWindowsPromise;
// to avoid confusing the results by activating different windows,
// check fxview in the current window - which is win2
@@ -374,7 +375,7 @@ add_task(async function test_minimize_restore_windows() {
);
await minimizeWindow(win2);
info("Focusing win1, where tab2 is selected - making it most recent");
- await SimpleTest.promiseFocus(win1);
+ await switchToWindow(win1);
await tabChangeRaised;
Assert.equal(
@@ -395,7 +396,7 @@ add_task(async function test_minimize_restore_windows() {
"TabRecencyChange"
);
await restoreWindow(win2);
- await SimpleTest.promiseFocus(win2);
+ await switchToWindow(win2);
await tabChangeRaised;
info(
diff --git a/browser/components/firefoxview/tests/browser/browser_opentabs_search.js b/browser/components/firefoxview/tests/browser/browser_opentabs_search.js
new file mode 100644
index 0000000000..173bf1a623
--- /dev/null
+++ b/browser/components/firefoxview/tests/browser/browser_opentabs_search.js
@@ -0,0 +1,161 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+const TEST_URL = "about:robots";
+let gInitialTab;
+let gInitialTabURL;
+
+add_setup(function () {
+ gInitialTab = gBrowser.selectedTab;
+ gInitialTabURL = gBrowser.selectedBrowser.currentURI.spec;
+});
+
+async function cleanup() {
+ await SimpleTest.promiseFocus(window);
+ await promiseAllButPrimaryWindowClosed();
+ await BrowserTestUtils.switchTab(gBrowser, gInitialTab);
+ await closeFirefoxViewTab(window);
+
+ // clean up extra tabs
+ while (gBrowser.tabs.length > 1) {
+ BrowserTestUtils.removeTab(gBrowser.tabs.at(-1));
+ }
+}
+
+add_task(async function search_open_tabs() {
+ // Open a new window and navigate to TEST_URL. Then, when we search for
+ // TEST_URL, it should show a search result in the new window's card.
+ const win2 = await BrowserTestUtils.openNewBrowserWindow();
+ await switchToWindow(win2);
+ await NonPrivateTabs.readyWindowsPromise;
+ await BrowserTestUtils.openNewForegroundTab(win2.gBrowser, TEST_URL);
+
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.firefox-view.search.enabled", true]],
+ });
+ await openFirefoxViewTab(window).then(async viewTab => {
+ const browser = viewTab.linkedBrowser;
+ await navigateToOpenTabs(browser);
+ const openTabs = getOpenTabsComponent(browser);
+ await openTabs.updateComplete;
+
+ const cards = getOpenTabsCards(openTabs);
+ is(cards.length, 2, "There are two windows.");
+ const winTabs = await getTabRowsForCard(cards[0]);
+ const newWinTabs = await getTabRowsForCard(cards[1]);
+
+ info("Input a search query.");
+ EventUtils.synthesizeMouseAtCenter(openTabs.searchTextbox, {}, content);
+ EventUtils.sendString(TEST_URL, content);
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList.rowEls.length === 0,
+ "There are no matching search results in the original window."
+ );
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[1].tabList.rowEls.length === 1,
+ "There is one matching search result in the new window."
+ );
+
+ info("Clear the search query.");
+ EventUtils.synthesizeMouseAtCenter(
+ openTabs.searchTextbox.clearButton,
+ {},
+ content
+ );
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList.rowEls.length === winTabs.length,
+ "The original window's list is restored."
+ );
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[1].tabList.rowEls.length === newWinTabs.length,
+ "The new window's list is restored."
+ );
+ openTabs.searchTextbox.blur();
+
+ info("Input a search query with keyboard.");
+ EventUtils.synthesizeKey("f", { accelKey: true }, content);
+ EventUtils.sendString(TEST_URL, content);
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList.rowEls.length === 0,
+ "There are no matching search results in the original window."
+ );
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[1].tabList.rowEls.length === 1,
+ "There is one matching search result in the new window."
+ );
+
+ info("Clear the search query with keyboard.");
+ is(
+ openTabs.shadowRoot.activeElement,
+ openTabs.searchTextbox,
+ "Search input is focused"
+ );
+ EventUtils.synthesizeKey("KEY_Tab", {}, content);
+ ok(
+ openTabs.searchTextbox.clearButton.matches(":focus-visible"),
+ "Clear Search button is focused"
+ );
+ EventUtils.synthesizeKey("KEY_Enter", {}, content);
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList.rowEls.length === winTabs.length,
+ "The original window's list is restored."
+ );
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[1].tabList.rowEls.length === newWinTabs.length,
+ "The new window's list is restored."
+ );
+ });
+
+ await SpecialPowers.popPrefEnv();
+ await cleanup();
+});
+
+add_task(async function search_open_tabs_recent_browsing() {
+ const NUMBER_OF_TABS = 6;
+ const win2 = await BrowserTestUtils.openNewBrowserWindow();
+ await switchToWindow(win2);
+ await NonPrivateTabs.readyWindowsPromise;
+
+ for (let i = 0; i < NUMBER_OF_TABS; i++) {
+ await BrowserTestUtils.openNewForegroundTab(win2.gBrowser, TEST_URL);
+ }
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.firefox-view.search.enabled", true]],
+ });
+ await openFirefoxViewTab(window).then(async viewTab => {
+ const browser = viewTab.linkedBrowser;
+ await navigateToViewAndWait(browser.contentDocument, "recentbrowsing");
+ const recentBrowsing = browser.contentDocument.querySelector(
+ "view-recentbrowsing"
+ );
+
+ info("Input a search query.");
+ EventUtils.synthesizeMouseAtCenter(
+ recentBrowsing.searchTextbox,
+ {},
+ content
+ );
+ EventUtils.sendString(TEST_URL, content);
+ const slot = recentBrowsing.querySelector("[slot='opentabs']");
+ await TestUtils.waitForCondition(
+ () => slot.viewCards[0].tabList.rowEls.length === 5,
+ "Not all search results are shown yet."
+ );
+
+ info("Click the Show All link.");
+ const showAllLink = await TestUtils.waitForCondition(() => {
+ const elt = slot.viewCards[0].shadowRoot.querySelector(
+ "[data-l10n-id='firefoxview-show-all']"
+ );
+ EventUtils.synthesizeMouseAtCenter(elt, {}, content);
+ if (slot.viewCards[0].tabList.rowEls.length === NUMBER_OF_TABS) {
+ return elt;
+ }
+ return false;
+ }, "All search results are shown.");
+ is(showAllLink.role, "link", "The show all control is a link.");
+ ok(BrowserTestUtils.isHidden(showAllLink), "The show all link is hidden.");
+ });
+ await SpecialPowers.popPrefEnv();
+ await cleanup();
+});
diff --git a/browser/components/firefoxview/tests/browser/browser_opentabs_tab_indicators.js b/browser/components/firefoxview/tests/browser/browser_opentabs_tab_indicators.js
index 1375052125..78fab976ed 100644
--- a/browser/components/firefoxview/tests/browser/browser_opentabs_tab_indicators.js
+++ b/browser/components/firefoxview/tests/browser/browser_opentabs_tab_indicators.js
@@ -1,9 +1,7 @@
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
-const { NonPrivateTabs } = ChromeUtils.importESModule(
- "resource:///modules/OpenTabs.sys.mjs"
-);
+requestLongerTimeout(2);
let pageWithAlert =
// eslint-disable-next-line @microsoft/sdl/no-insecure-url
@@ -11,18 +9,12 @@ let pageWithAlert =
let pageWithSound =
"http://mochi.test:8888/browser/dom/base/test/file_audioLoop.html";
-function cleanup() {
- // Cleanup
- while (gBrowser.tabs.length > 1) {
- BrowserTestUtils.removeTab(gBrowser.tabs[0]);
- }
-}
-
add_task(async function test_notification_dot_indicator() {
+ clearHistory();
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
let win = browser.ownerGlobal;
- await navigateToCategoryAndWait(document, "opentabs");
+ await navigateToViewAndWait(document, "opentabs");
// load page that opens prompt when page is hidden
let openedTab = await BrowserTestUtils.openNewForegroundTab(
gBrowser,
@@ -47,9 +39,10 @@ add_task(async function test_notification_dot_indicator() {
await tabChangeRaised;
await openTabs.updateComplete;
- await TestUtils.waitForCondition(
- () => openTabs.viewCards[0].tabList.rowEls[1].attention,
- "The opened tab doesn't have the attention property, so no notification dot is shown."
+ await TestUtils.waitForCondition(() =>
+ Array.from(openTabs.viewCards[0].tabList.rowEls).some(rowEl => {
+ return rowEl.indicators.includes("attention");
+ })
);
info("The newly opened tab has a notification dot.");
@@ -58,11 +51,12 @@ add_task(async function test_notification_dot_indicator() {
await BrowserTestUtils.switchTab(gBrowser, openedTab);
EventUtils.synthesizeKey("KEY_Enter", {}, win);
- cleanup();
+ cleanupTabs();
});
});
add_task(async function test_container_indicator() {
+ clearHistory();
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
let win = browser.ownerGlobal;
@@ -79,7 +73,7 @@ add_task(async function test_container_indicator() {
URLs[0]
);
- await navigateToCategoryAndWait(document, "opentabs");
+ await navigateToViewAndWait(document, "opentabs");
let openTabs = document.querySelector("view-opentabs[name=opentabs]");
@@ -95,10 +89,14 @@ add_task(async function test_container_indicator() {
);
info("openTabs component has finished updating.");
- let containerTabElem = openTabs.viewCards[0].tabList.rowEls[1];
+ let containerTabElem;
await TestUtils.waitForCondition(
- () => containerTabElem.containerObj,
+ () =>
+ Array.from(openTabs.viewCards[0].tabList.rowEls).some(rowEl => {
+ containerTabElem = rowEl;
+ return rowEl.containerObj;
+ }),
"The container tab element isn't marked in Fx View."
);
@@ -111,14 +109,15 @@ add_task(async function test_container_indicator() {
info("The newly opened tab is marked as a container tab.");
- cleanup();
+ cleanupTabs();
});
});
add_task(async function test_sound_playing_muted_indicator() {
+ clearHistory();
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "opentabs");
+ await navigateToViewAndWait(document, "opentabs");
// Load a page in a container tab
let soundTab = await BrowserTestUtils.openNewForegroundTab(
@@ -146,9 +145,13 @@ add_task(async function test_sound_playing_muted_indicator() {
"The tab list hasn't rendered."
);
- let soundPlayingTabElem = openTabs.viewCards[0].tabList.rowEls[1];
-
- await TestUtils.waitForCondition(() => soundPlayingTabElem.soundPlaying);
+ let soundPlayingTabElem;
+ await TestUtils.waitForCondition(() =>
+ Array.from(openTabs.viewCards[0].tabList.rowEls).some(rowEl => {
+ soundPlayingTabElem = rowEl;
+ return rowEl.indicators.includes("soundplaying");
+ })
+ );
ok(
soundPlayingTabElem.mediaButtonEl,
@@ -174,7 +177,9 @@ add_task(async function test_sound_playing_muted_indicator() {
await tabChangeRaised;
await openTabs.updateComplete;
- await TestUtils.waitForCondition(() => soundPlayingTabElem.muted);
+ await TestUtils.waitForCondition(() =>
+ soundPlayingTabElem.indicators.includes("muted")
+ );
ok(
soundPlayingTabElem.mediaButtonEl,
@@ -185,7 +190,9 @@ add_task(async function test_sound_playing_muted_indicator() {
soundTab.toggleMuteAudio();
await tabChangeRaised;
await openTabs.updateComplete;
- await TestUtils.waitForCondition(() => soundPlayingTabElem.soundPlaying);
+ await TestUtils.waitForCondition(() =>
+ soundPlayingTabElem.indicators.includes("soundplaying")
+ );
ok(
soundPlayingTabElem.mediaButtonEl,
@@ -195,13 +202,80 @@ add_task(async function test_sound_playing_muted_indicator() {
soundTab.toggleMuteAudio();
await tabChangeRaised;
await openTabs.updateComplete;
- await TestUtils.waitForCondition(() => soundPlayingTabElem.muted);
+ await TestUtils.waitForCondition(() =>
+ soundPlayingTabElem.indicators.includes("muted")
+ );
ok(
soundPlayingTabElem.mediaButtonEl,
"The tab has the unmute button showing."
);
- cleanup();
+ cleanupTabs();
+ });
+});
+
+add_task(async function test_bookmark_indicator() {
+ const tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, URLs[0]);
+ await withFirefoxView({}, async browser => {
+ const { document } = browser.contentWindow;
+ await navigateToViewAndWait(document, "opentabs");
+ const openTabs = document.querySelector("view-opentabs[name=opentabs]");
+ setSortOption(openTabs, "recency");
+ let rowEl = await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0]?.tabList.rowEls[0]
+ );
+
+ info("Bookmark a tab while Firefox View is active.");
+ let bookmark = await PlacesUtils.bookmarks.insert({
+ parentGuid: PlacesUtils.bookmarks.toolbarGuid,
+ url: URLs[0],
+ });
+ await TestUtils.waitForCondition(
+ () => rowEl.shadowRoot.querySelector(".bookmark"),
+ "Tab shows the bookmark star."
+ );
+ await PlacesUtils.bookmarks.update({
+ guid: bookmark.guid,
+ url: URLs[1],
+ });
+ await TestUtils.waitForCondition(
+ () => !rowEl.shadowRoot.querySelector(".bookmark"),
+ "The bookmark star is removed."
+ );
+ bookmark = await PlacesUtils.bookmarks.insert({
+ parentGuid: PlacesUtils.bookmarks.toolbarGuid,
+ url: URLs[0],
+ });
+ await TestUtils.waitForCondition(
+ () => rowEl.shadowRoot.querySelector(".bookmark"),
+ "The bookmark star is restored."
+ );
+ await PlacesUtils.bookmarks.remove(bookmark.guid);
+ await TestUtils.waitForCondition(
+ () => !rowEl.shadowRoot.querySelector(".bookmark"),
+ "The bookmark star is removed again."
+ );
+
+ info("Bookmark a tab while Firefox View is inactive.");
+ await BrowserTestUtils.switchTab(gBrowser, tab);
+ bookmark = await PlacesUtils.bookmarks.insert({
+ parentGuid: PlacesUtils.bookmarks.toolbarGuid,
+ url: URLs[0],
+ });
+ await switchToFxViewTab();
+ await TestUtils.waitForCondition(
+ () => rowEl.shadowRoot.querySelector(".bookmark"),
+ "Tab shows the bookmark star."
+ );
+ await BrowserTestUtils.switchTab(gBrowser, tab);
+ await PlacesUtils.bookmarks.remove(bookmark.guid);
+ await switchToFxViewTab();
+ await TestUtils.waitForCondition(
+ () => !rowEl.shadowRoot.querySelector(".bookmark"),
+ "The bookmark star is removed."
+ );
});
+ await cleanupTabs();
+ await PlacesUtils.bookmarks.eraseEverything();
});
diff --git a/browser/components/firefoxview/tests/browser/browser_recentlyclosed_firefoxview.js b/browser/components/firefoxview/tests/browser/browser_recentlyclosed_firefoxview.js
index 313d86416e..fcfcf20562 100644
--- a/browser/components/firefoxview/tests/browser/browser_recentlyclosed_firefoxview.js
+++ b/browser/components/firefoxview/tests/browser/browser_recentlyclosed_firefoxview.js
@@ -196,7 +196,7 @@ add_task(async function test_initial_closed_tab() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
is(document.location.href, getFirefoxViewURL());
- await navigateToCategoryAndWait(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
let { cleanup } = await prepareSingleClosedTab();
await switchToFxViewTab(window);
let [listItems] = await waitForRecentlyClosedTabsList(document);
@@ -220,7 +220,7 @@ add_task(async function test_list_ordering() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
await clearAllParentTelemetryEvents();
- navigateToCategory(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
let [cardMainSlotNode, listItems] = await waitForRecentlyClosedTabsList(
document
);
@@ -248,7 +248,7 @@ add_task(async function test_list_updates() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- navigateToCategory(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
let [listElem, listItems] = await waitForRecentlyClosedTabsList(document);
Assert.deepEqual(
@@ -321,7 +321,7 @@ add_task(async function test_restore_tab() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- navigateToCategory(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
let [listElem, listItems] = await waitForRecentlyClosedTabsList(document);
Assert.deepEqual(
@@ -365,7 +365,7 @@ add_task(async function test_dismiss_tab() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- navigateToCategory(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
let [listElem, listItems] = await waitForRecentlyClosedTabsList(document);
await clearAllParentTelemetryEvents();
@@ -429,7 +429,7 @@ add_task(async function test_empty_states() {
const { document } = browser.contentWindow;
is(document.location.href, "about:firefoxview");
- navigateToCategory(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
let recentlyClosedComponent = document.querySelector(
"view-recentlyclosed:not([slot=recentlyclosed])"
);
@@ -479,7 +479,7 @@ add_task(async function test_observers_removed_when_view_is_hidden() {
await withFirefoxView({}, async function (browser) {
const { document } = browser.contentWindow;
- navigateToCategory(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
const [listElem] = await waitForRecentlyClosedTabsList(document);
is(listElem.rowEls.length, 1);
@@ -510,7 +510,7 @@ add_task(async function test_search() {
let { cleanup, expectedURLs } = await prepareClosedTabs();
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- navigateToCategory(document, "recentlyclosed");
+ await navigateToViewAndWait(document, "recentlyclosed");
const [listElem] = await waitForRecentlyClosedTabsList(document);
const recentlyClosedComponent = document.querySelector(
"view-recentlyclosed:not([slot=recentlyclosed])"
@@ -569,7 +569,7 @@ add_task(async function test_search_recent_browsing() {
const { document } = browser.contentWindow;
info("Input a search query.");
- await navigateToCategoryAndWait(document, "recentbrowsing");
+ await navigateToViewAndWait(document, "recentbrowsing");
const recentBrowsing = document.querySelector("view-recentbrowsing");
EventUtils.synthesizeMouseAtCenter(
recentBrowsing.searchTextbox,
diff --git a/browser/components/firefoxview/tests/browser/browser_syncedtabs_errors_firefoxview.js b/browser/components/firefoxview/tests/browser/browser_syncedtabs_errors_firefoxview.js
index 15dba68551..86e4d9cdee 100644
--- a/browser/components/firefoxview/tests/browser/browser_syncedtabs_errors_firefoxview.js
+++ b/browser/components/firefoxview/tests/browser/browser_syncedtabs_errors_firefoxview.js
@@ -56,7 +56,7 @@ add_task(async function test_network_offline() {
sandbox.spy(TabsSetupFlowManager, "tryToClearError");
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
Services.obs.notifyObservers(
@@ -112,7 +112,7 @@ add_task(async function test_sync_error() {
const sandbox = await setupWithDesktopDevices();
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
Services.obs.notifyObservers(null, "weave:service:sync:error");
diff --git a/browser/components/firefoxview/tests/browser/browser_syncedtabs_firefoxview.js b/browser/components/firefoxview/tests/browser/browser_syncedtabs_firefoxview.js
index 8a3c63985b..11f135cd52 100644
--- a/browser/components/firefoxview/tests/browser/browser_syncedtabs_firefoxview.js
+++ b/browser/components/firefoxview/tests/browser/browser_syncedtabs_firefoxview.js
@@ -29,7 +29,7 @@ add_task(async function test_unconfigured_initial_state() {
});
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
let syncedTabsComponent = document.querySelector(
@@ -85,7 +85,7 @@ add_task(async function test_signed_in() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
let syncedTabsComponent = document.querySelector(
@@ -148,7 +148,7 @@ add_task(async function test_no_synced_tabs() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
let syncedTabsComponent = document.querySelector(
@@ -188,7 +188,7 @@ add_task(async function test_no_error_for_two_desktop() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
let syncedTabsComponent = document.querySelector(
@@ -232,7 +232,7 @@ add_task(async function test_empty_state() {
await withFirefoxView({ openNewWindow: true }, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
let syncedTabsComponent = document.querySelector(
@@ -277,7 +277,7 @@ add_task(async function test_tabs() {
await withFirefoxView({ openNewWindow: true }, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
let syncedTabsComponent = document.querySelector(
@@ -365,7 +365,7 @@ add_task(async function test_empty_desktop_same_name() {
await withFirefoxView({ openNewWindow: true }, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
let syncedTabsComponent = document.querySelector(
@@ -413,7 +413,7 @@ add_task(async function test_empty_desktop_same_name_three() {
await withFirefoxView({ openNewWindow: true }, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
let syncedTabsComponent = document.querySelector(
@@ -459,7 +459,7 @@ add_task(async function search_synced_tabs() {
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "syncedtabs");
+ await navigateToViewAndWait(document, "syncedtabs");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
let syncedTabsComponent = document.querySelector(
@@ -666,7 +666,7 @@ add_task(async function search_synced_tabs_recent_browsing() {
});
await withFirefoxView({}, async browser => {
const { document } = browser.contentWindow;
- await navigateToCategoryAndWait(document, "recentbrowsing");
+ await navigateToViewAndWait(document, "recentbrowsing");
Services.obs.notifyObservers(null, UIState.ON_UPDATE);
const recentBrowsing = document.querySelector("view-recentbrowsing");
diff --git a/browser/components/firefoxview/tests/browser/browser_tab_list_keyboard_navigation.js b/browser/components/firefoxview/tests/browser/browser_tab_list_keyboard_navigation.js
new file mode 100644
index 0000000000..d83c1056e0
--- /dev/null
+++ b/browser/components/firefoxview/tests/browser/browser_tab_list_keyboard_navigation.js
@@ -0,0 +1,334 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+add_task(async function test_open_tab_row_navigation() {
+ await withFirefoxView({}, async browser => {
+ const { document } = browser.contentWindow;
+ let win = browser.ownerGlobal;
+
+ await navigateToViewAndWait(document, "opentabs");
+ const openTabs = document.querySelector("view-opentabs[name=opentabs]");
+
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList?.rowEls.length === 1,
+ "The tab list hasn't rendered"
+ );
+
+ // Focus tab row
+ let tabRow = openTabs.viewCards[0].tabList.rowEls[0];
+ let tabRowFocused = BrowserTestUtils.waitForEvent(tabRow, "focus", win);
+ tabRow.focus();
+ await tabRowFocused;
+ info("The tab row main element has focus.");
+
+ // Navigate right to context menu button
+ let secondaryButtonFocused = BrowserTestUtils.waitForEvent(
+ tabRow.secondaryButtonEl,
+ "focus",
+ win
+ );
+ EventUtils.synthesizeKey("KEY_ArrowRight", {}, win);
+ await secondaryButtonFocused;
+ info("The context menu button has focus.");
+
+ // Navigate right to close button
+ let tertiaryButtonFocused = BrowserTestUtils.waitForEvent(
+ tabRow.tertiaryButtonEl,
+ "focus",
+ win
+ );
+ EventUtils.synthesizeKey("KEY_ArrowRight", {}, win);
+ await tertiaryButtonFocused;
+ info("The close button has focus");
+
+ // Navigate left to context menu button
+ secondaryButtonFocused = BrowserTestUtils.waitForEvent(
+ tabRow.secondaryButtonEl,
+ "focus",
+ win
+ );
+ EventUtils.synthesizeKey("KEY_ArrowLeft", {}, win);
+ await secondaryButtonFocused;
+ info("The context menu button has focus.");
+
+ // Navigate left to tab row main element
+ tabRowFocused = BrowserTestUtils.waitForEvent(tabRow.mainEl, "focus", win);
+ EventUtils.synthesizeKey("KEY_ArrowLeft", {}, win);
+ await tabRowFocused;
+ info("The tab row main element has focus.");
+ });
+
+ cleanupTabs();
+});
+
+add_task(async function test_focus_moves_after_unmute() {
+ await withFirefoxView({}, async browser => {
+ const { document } = browser.contentWindow;
+ let win = browser.ownerGlobal;
+ await navigateToViewAndWait(document, "opentabs");
+ let openTabs = document.querySelector("view-opentabs[name=opentabs]");
+ await openTabs.updateComplete;
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList.rowEls.length,
+ "The tab list has rendered."
+ );
+ await openTabs.openTabsTarget.readyWindowsPromise;
+ let card = openTabs.viewCards[0];
+ let openTabEl = card.tabList.rowEls[0];
+ let tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+
+ // Mute tab
+ openTabEl.muteOrUnmuteTab();
+
+ await tabChangeRaised;
+ await openTabs.updateComplete;
+
+ let mutedTab = card.tabList.rowEls[0];
+ await TestUtils.waitForCondition(
+ () => mutedTab.indicators.includes("muted"),
+ "The tab has been muted."
+ );
+
+ // Unmute using keyboard
+ card.tabList.currentActiveElementId = mutedTab.focusMediaButton();
+ isActiveElement(mutedTab.mediaButtonEl);
+ info("The media button has focus.");
+
+ tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+ EventUtils.synthesizeKey("KEY_Enter", {}, win);
+
+ await tabChangeRaised;
+ await openTabs.updateComplete;
+
+ let unmutedTab = card.tabList.rowEls[0];
+ await TestUtils.waitForCondition(
+ () => !unmutedTab.indicators.includes("muted"),
+ "The tab is no longer muted."
+ );
+ isActiveElement(unmutedTab.secondaryButtonEl);
+ info(
+ "Focus should be on the tab's secondary button element after unmuting."
+ );
+
+ // Mute tab again and check that only Enter keys will toggle it
+ unmutedTab.muteOrUnmuteTab();
+ await TestUtils.waitForCondition(
+ () => mutedTab.indicators.includes("muted"),
+ "The tab has been muted."
+ );
+ mutedTab = card.tabList.rowEls[0];
+
+ card.tabList.currentActiveElementId = mutedTab.focusLink();
+ isActiveElement(mutedTab.mainEl);
+ info("The 'main' element has focus.");
+
+ EventUtils.synthesizeKey("KEY_ArrowRight", {}, win);
+ isActiveElement(mutedTab.mediaButtonEl);
+ info("The media button has focus.");
+
+ EventUtils.synthesizeKey("KEY_ArrowRight", {}, win);
+ isActiveElement(mutedTab.secondaryButtonEl);
+ info("The secondary/more button has focus.");
+
+ ok(
+ mutedTab.indicators.includes("muted"),
+ "The muted tab is still muted after arrowing past it."
+ );
+
+ EventUtils.synthesizeKey("KEY_ArrowLeft", {}, win);
+ isActiveElement(mutedTab.mediaButtonEl);
+ info("The media button has focus.");
+
+ EventUtils.synthesizeKey("KEY_Enter", {}, win);
+ await tabChangeRaised;
+ await openTabs.updateComplete;
+
+ unmutedTab = card.tabList.rowEls[0];
+ await TestUtils.waitForCondition(
+ () => !unmutedTab.indicators.includes("muted"),
+ "The tab is no longer muted."
+ );
+ isActiveElement(unmutedTab.secondaryButtonEl);
+ info(
+ "Focus should be on the tab's secondary button element after unmuting."
+ );
+ });
+
+ cleanupTabs();
+});
+
+add_task(async function test_open_tab_row_with_sound_navigation() {
+ const tabWithSound = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "http://mochi.test:8888/browser/dom/base/test/file_audioLoop.html",
+ true
+ );
+ const tabsUpdated = await BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+ await withFirefoxView({}, async browser => {
+ const { document } = browser.contentWindow;
+ let win = browser.ownerGlobal;
+
+ await navigateToViewAndWait(document, "opentabs");
+ const openTabs = document.querySelector("view-opentabs[name=opentabs]");
+ await TestUtils.waitForCondition(
+ () => tabWithSound.hasAttribute("soundplaying"),
+ "Tab is playing sound"
+ );
+ await tabsUpdated;
+ await openTabs.updateComplete;
+
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList?.rowEls.length === 2,
+ "The tab list has rendered."
+ );
+
+ // Focus tab row with sound playing
+ let tabRow;
+ for (const rowEl of openTabs.viewCards[0].tabList.rowEls) {
+ if (rowEl.indicators.includes("soundplaying")) {
+ tabRow = rowEl;
+ break;
+ }
+ }
+ ok(tabRow, "Found a tab row with sound playing.");
+ let tabRowFocused = BrowserTestUtils.waitForEvent(tabRow, "focus", win);
+ tabRow.focus();
+ await tabRowFocused;
+ info("The tab row main element has focus.");
+
+ // Navigate right to media button
+ let mediaButtonFocused = BrowserTestUtils.waitForEvent(
+ tabRow.mediaButtonEl,
+ "focus",
+ win
+ );
+ EventUtils.synthesizeKey("KEY_ArrowRight", {}, win);
+ await mediaButtonFocused;
+ info("The media button has focus.");
+
+ // Navigate right to context menu button
+ let secondaryButtonFocused = BrowserTestUtils.waitForEvent(
+ tabRow.secondaryButtonEl,
+ "focus",
+ win
+ );
+ EventUtils.synthesizeKey("KEY_ArrowRight", {}, win);
+ await secondaryButtonFocused;
+ info("The context menu button has focus.");
+
+ // Navigate right to close button
+ let tertiaryButtonFocused = BrowserTestUtils.waitForEvent(
+ tabRow.tertiaryButtonEl,
+ "focus",
+ win
+ );
+ EventUtils.synthesizeKey("KEY_ArrowRight", {}, win);
+ await tertiaryButtonFocused;
+ info("The close button has focus");
+
+ // Navigate left to context menuo button
+ secondaryButtonFocused = BrowserTestUtils.waitForEvent(
+ tabRow.secondaryButtonEl,
+ "focus",
+ win
+ );
+ EventUtils.synthesizeKey("KEY_ArrowLeft", {}, win);
+ await secondaryButtonFocused;
+ info("The context menu button has focus.");
+
+ // Navigate left to media button
+ mediaButtonFocused = BrowserTestUtils.waitForEvent(
+ tabRow.mediaButtonEl,
+ "focus",
+ win
+ );
+ EventUtils.synthesizeKey("KEY_ArrowLeft", {}, win);
+ await mediaButtonFocused;
+ info("The media button has focus.");
+
+ // Navigate left to main element of tab row
+ tabRowFocused = BrowserTestUtils.waitForEvent(tabRow.mainEl, "focus", win);
+ EventUtils.synthesizeKey("KEY_ArrowLeft", {}, win);
+ await tabRowFocused;
+ info("The tab row main element has focus.");
+ });
+
+ cleanupTabs();
+});
+
+add_task(async function test_open_tab_row_with_sound_mute_and_unmute() {
+ const tabWithSound = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "http://mochi.test:8888/browser/dom/base/test/file_audioLoop.html",
+ true
+ );
+ const tabsUpdated = await BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+ await withFirefoxView({}, async browser => {
+ const { document } = browser.contentWindow;
+ let win = browser.ownerGlobal;
+
+ await navigateToViewAndWait(document, "opentabs");
+ const openTabs = document.querySelector("view-opentabs[name=opentabs]");
+ await TestUtils.waitForCondition(
+ () => tabWithSound.hasAttribute("soundplaying"),
+ "Tab is playing sound"
+ );
+ await tabsUpdated;
+ await openTabs.updateComplete;
+
+ await TestUtils.waitForCondition(
+ () => openTabs.viewCards[0].tabList?.rowEls.length === 2,
+ "The tab list has rendered."
+ );
+
+ // Focus tab row with sound playing
+ let tabRow;
+ for (const rowEl of openTabs.viewCards[0].tabList.rowEls) {
+ if (rowEl.indicators.includes("soundplaying")) {
+ tabRow = rowEl;
+ break;
+ }
+ }
+ ok(tabRow, "Found a tab row with sound playing.");
+ let tabRowFocused = BrowserTestUtils.waitForEvent(tabRow, "focus", win);
+ tabRow.focus();
+ await tabRowFocused;
+ info("The tab row main element has focus.");
+
+ // Navigate right to media button
+ let mediaButtonFocused = BrowserTestUtils.waitForEvent(
+ tabRow.mediaButtonEl,
+ "focus",
+ win
+ );
+ EventUtils.synthesizeKey("KEY_ArrowRight", {}, win);
+ await mediaButtonFocused;
+ info("The media button has focus.");
+
+ EventUtils.synthesizeKey("KEY_Enter", {}, win);
+ await TestUtils.waitForCondition(
+ () => tabRow.indicators.includes("muted"),
+ "Tab has been muted"
+ );
+
+ EventUtils.synthesizeKey("KEY_Enter", {}, win);
+ await TestUtils.waitForCondition(
+ () => tabRow.indicators.includes("soundplaying"),
+ "Tab has been unmuted"
+ );
+ });
+
+ cleanupTabs();
+});
diff --git a/browser/components/firefoxview/tests/browser/head.js b/browser/components/firefoxview/tests/browser/head.js
index b0b41b759d..302f19071c 100644
--- a/browser/components/firefoxview/tests/browser/head.js
+++ b/browser/components/firefoxview/tests/browser/head.js
@@ -3,6 +3,7 @@
const {
getFirefoxViewURL,
+ switchToWindow,
withFirefoxView,
assertFirefoxViewTab,
assertFirefoxViewTabSelected,
@@ -31,6 +32,11 @@ const { FeatureCalloutMessages } = ChromeUtils.importESModule(
const { TelemetryTestUtils } = ChromeUtils.importESModule(
"resource://testing-common/TelemetryTestUtils.sys.mjs"
);
+const { NonPrivateTabs } = ChromeUtils.importESModule(
+ "resource:///modules/OpenTabs.sys.mjs"
+);
+// shut down the open tabs module after each test so we don't get debounced events bleeding into the next
+registerCleanupFunction(() => NonPrivateTabs.stop());
const triggeringPrincipal_base64 = E10SUtils.SERIALIZED_SYSTEMPRINCIPAL;
const { SessionStoreTestUtils } = ChromeUtils.importESModule(
@@ -548,31 +554,19 @@ registerCleanupFunction(() => {
gSandbox?.restore();
});
-function navigateToCategory(document, category) {
- const navigation = document.querySelector("fxview-category-navigation");
- let navButton = Array.from(navigation.categoryButtons).filter(
- categoryButton => {
- return categoryButton.name === category;
- }
- )[0];
- navButton.buttonEl.click();
-}
-
-async function navigateToCategoryAndWait(document, category) {
- info(`navigateToCategoryAndWait, for ${category}`);
- const navigation = document.querySelector("fxview-category-navigation");
+async function navigateToViewAndWait(document, view) {
+ info(`navigateToViewAndWait, for ${view}`);
+ const navigation = document.querySelector("moz-page-nav");
const win = document.ownerGlobal;
SimpleTest.promiseFocus(win);
- let navButton = Array.from(navigation.categoryButtons).find(
- categoryButton => {
- return categoryButton.name === category;
- }
- );
+ let navButton = Array.from(navigation.pageNavButtons).find(pageNavButton => {
+ return pageNavButton.view === view;
+ });
const namedDeck = document.querySelector("named-deck");
await BrowserTestUtils.waitForCondition(
() => navButton.getBoundingClientRect().height,
- `Waiting for ${category} button to be clickable`
+ `Waiting for ${view} button to be clickable`
);
EventUtils.synthesizeMouseAtCenter(navButton, {}, win);
@@ -582,10 +576,10 @@ async function navigateToCategoryAndWait(document, category) {
child => child.slot == "selected"
);
return (
- namedDeck.selectedViewName == category &&
+ namedDeck.selectedViewName == view &&
selectedView?.getBoundingClientRect().height
);
- }, `Waiting for ${category} to be visible`);
+ }, `Waiting for ${view} to be visible`);
}
/**
@@ -597,6 +591,7 @@ async function navigateToCategoryAndWait(document, category) {
* The tab switched to.
*/
async function switchToFxViewTab(win = window) {
+ await switchToWindow(win);
return BrowserTestUtils.switchTab(win.gBrowser, win.FirefoxViewHandler.tab);
}
@@ -657,10 +652,32 @@ function setSortOption(component, value) {
EventUtils.synthesizeMouseAtCenter(el, {}, el.ownerGlobal);
}
+/**
+ * Select the Open Tabs view-page in the Firefox View tab.
+ */
+async function navigateToOpenTabs(browser) {
+ const document = browser.contentDocument;
+ if (document.querySelector("named-deck").selectedViewName != "opentabs") {
+ await navigateToViewAndWait(browser.contentDocument, "opentabs");
+ }
+}
+
function getOpenTabsCards(openTabs) {
return openTabs.shadowRoot.querySelectorAll("view-opentabs-card");
}
+function getOpenTabsComponent(browser) {
+ return browser.contentDocument.querySelector("named-deck > view-opentabs");
+}
+
+async function getTabRowsForCard(card) {
+ await TestUtils.waitForCondition(
+ () => card.tabList.rowEls.length,
+ "Wait for the card's tab list to have rows"
+ );
+ return card.tabList.rowEls;
+}
+
async function click_recently_closed_tab_item(itemElem, itemProperty = "") {
// Make sure the firefoxview tab still has focus
is(
@@ -675,7 +692,7 @@ async function click_recently_closed_tab_item(itemElem, itemProperty = "") {
let clickTarget;
switch (itemProperty) {
case "dismiss":
- clickTarget = itemElem.buttonEl;
+ clickTarget = itemElem.secondaryButtonEl;
break;
default:
clickTarget = itemElem.mainEl;
@@ -706,3 +723,25 @@ async function waitForRecentlyClosedTabsList(doc) {
});
return [cardMainSlotNode, cardMainSlotNode.rowEls];
}
+
+async function add_new_tab(URL) {
+ let tabChangeRaised = BrowserTestUtils.waitForEvent(
+ NonPrivateTabs,
+ "TabChange"
+ );
+ let tab = BrowserTestUtils.addTab(gBrowser, URL);
+ // wait so we can reliably compare the tab URL
+ await BrowserTestUtils.browserLoaded(tab.linkedBrowser);
+ await tabChangeRaised;
+ return tab;
+}
+
+function isActiveElement(expectedLinkEl) {
+ return expectedLinkEl.getRootNode().activeElement == expectedLinkEl;
+}
+
+function cleanupTabs() {
+ while (gBrowser.tabs.length > 1) {
+ BrowserTestUtils.removeTab(gBrowser.tabs[0]);
+ }
+}
diff --git a/browser/components/firefoxview/tests/chrome/chrome.toml b/browser/components/firefoxview/tests/chrome/chrome.toml
index b1677430b2..3edeefd4a9 100644
--- a/browser/components/firefoxview/tests/chrome/chrome.toml
+++ b/browser/components/firefoxview/tests/chrome/chrome.toml
@@ -2,6 +2,4 @@
["test_card_container.html"]
-["test_fxview_category_navigation.html"]
-
["test_fxview_tab_list.html"]
diff --git a/browser/components/firefoxview/tests/chrome/test_fxview_category_navigation.html b/browser/components/firefoxview/tests/chrome/test_fxview_category_navigation.html
deleted file mode 100644
index 0ea0a94baf..0000000000
--- a/browser/components/firefoxview/tests/chrome/test_fxview_category_navigation.html
+++ /dev/null
@@ -1,322 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
- <meta charset="utf-8">
- <title>FxviewCategoryNavigation Tests</title>
- <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
- <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
- <link rel="stylesheet" href="chrome://mochikit/content/tests/SimpleTest/test.css"/>
- <link rel="stylesheet" href="chrome://global/skin/in-content/common.css">
- <script type="module" src="chrome://browser/content/firefoxview/fxview-category-navigation.mjs"></script>
-</head>
-<style>
-body {
- display: flex;
-}
-#navigation {
- width: var(--in-content-sidebar-width);
-}
-fxview-category-button[name="category-one"]::part(icon) {
- background-image: url("chrome://mozapps/skin/extensions/category-discover.svg");
-}
-fxview-category-button[name="category-two"]::part(icon) {
- background-image: url("chrome://mozapps/skin/extensions/category-discover.svg");
-}
-fxview-category-button[name="category-three"]::part(icon) {
- background-image: url("chrome://mozapps/skin/extensions/category-discover.svg");
-}
-fxview-category-button[name="category-four"]::part(icon) {
- background-image: url("chrome://mozapps/skin/extensions/category-discover.svg");
-}
-fxview-category-button[name="category-five"]::part(icon) {
- background-image: url("chrome://mozapps/skin/extensions/category-discover.svg");
-}
-</style>
-<body>
- <p id="display"></p>
- <div id="content">
- <div id="navigation">
- <fxview-category-navigation>
- <h2 slot="category-nav-header">Header</h2>
- <fxview-category-button class="category" slot="category-button" name="category-one">
- <span class="category-name">Category 1</span>
- </fxview-category-button>
- <fxview-category-button class="category" slot="category-button" name="category-two">
- <span class="category-name">Category 2</span>
- </fxview-category-button>
- <fxview-category-button class="category" slot="category-button" name="category-three">
- <span class="category-name">Category 3</span>
- </fxview-category-button>
- <fxview-category-button class="category" slot="category-button" name="category-four">
- <span class="category-name">Category 4</span>
- </fxview-category-button>
- <fxview-category-button class="category" slot="category-button" name="category-five">
- <span class="category-name">Category 5</span>
- </fxview-category-button>
- </fxview-category-navigation>
- </div>
- </div>
-<pre id="test"></pre>
-<script>
- Services.scriptloader.loadSubScript(
- "chrome://browser/content/utilityOverlay.js",
- this
- );
- const { BrowserTestUtils } = ChromeUtils.importESModule(
- "resource://testing-common/BrowserTestUtils.sys.mjs"
- );
-
-const fxviewCategoryNav = document.querySelector("fxview-category-navigation");
-
-function isActiveElement(expectedActiveEl) {
- return expectedActiveEl.getRootNode().activeElement == expectedActiveEl;
- }
-
- /**
- * Tests that the first category is selected by default
- */
- add_task(async function test_first_item_selected_by_default() {
- is(
- fxviewCategoryNav.categoryButtons.length,
- 5,
- "Five category buttons are in the navigation"
- );
-
- ok(
- fxviewCategoryNav.categoryButtons[0].name === fxviewCategoryNav.currentCategory,
- "The first category button is selected by default"
- )
- });
-
- /**
- * Tests that categories are selected when clicked
- */
- add_task(async function test_select_category() {
- let gBrowser = BrowserWindowTracker.getTopWindow().top.gBrowser;
- let secondCategory = fxviewCategoryNav.categoryButtons[1];
- let categoryChanged = BrowserTestUtils.waitForEvent(
- gBrowser,
- "change-category"
- );
-
- secondCategory.buttonEl.click();
- await categoryChanged;
-
- ok(
- secondCategory.name === fxviewCategoryNav.currentCategory,
- "The second category button is selected"
- )
-
- let thirdCategory = fxviewCategoryNav.categoryButtons[2];
- categoryChanged = BrowserTestUtils.waitForEvent(
- gBrowser,
- "change-category"
- );
-
- thirdCategory.buttonEl.click();
- await categoryChanged;
-
- ok(
- thirdCategory.name === fxviewCategoryNav.currentCategory,
- "The third category button is selected"
- )
-
- let firstCategory = fxviewCategoryNav.categoryButtons[0];
- categoryChanged = BrowserTestUtils.waitForEvent(
- gBrowser,
- "change-category"
- );
-
- firstCategory.buttonEl.click();
- await categoryChanged;
-
- ok(
- firstCategory.name === fxviewCategoryNav.currentCategory,
- "The first category button is selected"
- )
- });
-
- /**
- * Tests that categories are keyboard-navigable
- */
- add_task(async function test_keyboard_navigation() {
- const arrowDown = async () => {
- info("Arrow down");
- synthesizeKey("KEY_ArrowDown", {});
- await fxviewCategoryNav.getUpdateComplete();
- };
- const arrowUp = async () => {
- info("Arrow up");
- synthesizeKey("KEY_ArrowUp", {});
- await fxviewCategoryNav.getUpdateComplete();
- };
- const arrowLeft = async () => {
- info("Arrow left");
- synthesizeKey("KEY_ArrowLeft", {});
- await fxviewCategoryNav.getUpdateComplete();
- };
- const arrowRight = async () => {
- info("Arrow right");
- synthesizeKey("KEY_ArrowRight", {});
- await fxviewCategoryNav.getUpdateComplete();
- };
-
- // Setting this pref allows the test to run as expected with a keyboard on MacOS
- await SpecialPowers.pushPrefEnv({
- set: [["accessibility.tabfocus", 7]],
- });
-
- let firstCategory = fxviewCategoryNav.categoryButtons[0];
- let secondCategory = fxviewCategoryNav.categoryButtons[1];
- let thirdCategory = fxviewCategoryNav.categoryButtons[2];
- let fourthCategory = fxviewCategoryNav.categoryButtons[3];
- let fifthCategory = fxviewCategoryNav.categoryButtons[4];
-
- is(
- firstCategory.name,
- fxviewCategoryNav.currentCategory,
- "The first category button is selected"
- )
- firstCategory.focus();
- await arrowDown();
- ok(
- isActiveElement(secondCategory),
- "The second category button is the active element after first arrow down"
- );
- is(
- secondCategory.name,
- fxviewCategoryNav.currentCategory,
- "The second category button is selected"
- )
- await arrowDown();
- is(
- thirdCategory.name,
- fxviewCategoryNav.currentCategory,
- "The third category button is selected"
- )
- await arrowDown();
- is(
- fourthCategory.name,
- fxviewCategoryNav.currentCategory,
- "The fourth category button is selected"
- )
- await arrowDown();
- is(
- fifthCategory.name,
- fxviewCategoryNav.currentCategory,
- "The fifth category button is selected"
- )
- await arrowDown();
- is(
- fifthCategory.name,
- fxviewCategoryNav.currentCategory,
- "The fifth category button is still selected"
- )
- await arrowUp();
- is(
- fourthCategory.name,
- fxviewCategoryNav.currentCategory,
- "The fourth category button is selected"
- )
- await arrowUp();
- is(
- thirdCategory.name,
- fxviewCategoryNav.currentCategory,
- "The third category button is selected"
- )
- await arrowUp();
- is(
- secondCategory.name,
- fxviewCategoryNav.currentCategory,
- "The second category button is selected"
- )
- await arrowUp();
- is(
- firstCategory.name,
- fxviewCategoryNav.currentCategory,
- "The first category button is selected"
- )
- await arrowUp();
- is(
- firstCategory.name,
- fxviewCategoryNav.currentCategory,
- "The first category button is still selected"
- )
-
- // Test navigation with arrow left/right keys
- is(
- firstCategory.name,
- fxviewCategoryNav.currentCategory,
- "The first category button is selected"
- )
- firstCategory.focus();
- await arrowRight();
- ok(
- isActiveElement(secondCategory),
- "The second category button is the active element after first arrow right"
- );
- is(
- secondCategory.name,
- fxviewCategoryNav.currentCategory,
- "The second category button is selected"
- )
- await arrowRight();
- is(
- thirdCategory.name,
- fxviewCategoryNav.currentCategory,
- "The third category button is selected"
- )
- await arrowRight();
- is(
- fourthCategory.name,
- fxviewCategoryNav.currentCategory,
- "The fourth category button is selected"
- )
- await arrowRight();
- is(
- fifthCategory.name,
- fxviewCategoryNav.currentCategory,
- "The fifth category button is selected"
- )
- await arrowRight();
- is(
- fifthCategory.name,
- fxviewCategoryNav.currentCategory,
- "The fifth category button is still selected"
- )
- await arrowLeft();
- is(
- fourthCategory.name,
- fxviewCategoryNav.currentCategory,
- "The fourth category button is selected"
- )
- await arrowLeft();
- is(
- thirdCategory.name,
- fxviewCategoryNav.currentCategory,
- "The third category button is selected"
- )
- await arrowLeft();
- is(
- secondCategory.name,
- fxviewCategoryNav.currentCategory,
- "The second category button is selected"
- )
- await arrowLeft();
- is(
- firstCategory.name,
- fxviewCategoryNav.currentCategory,
- "The first category button is selected"
- )
- await arrowLeft();
- is(
- firstCategory.name,
- fxviewCategoryNav.currentCategory,
- "The first category button is still selected"
- )
-
- await SpecialPowers.popPrefEnv();
- });
-</script>
-</body>
-</html>
diff --git a/browser/components/firefoxview/tests/chrome/test_fxview_tab_list.html b/browser/components/firefoxview/tests/chrome/test_fxview_tab_list.html
index 22f04acab2..e48f776592 100644
--- a/browser/components/firefoxview/tests/chrome/test_fxview_tab_list.html
+++ b/browser/components/firefoxview/tests/chrome/test_fxview_tab_list.html
@@ -308,12 +308,12 @@
);
await arrowRight();
ok(
- isActiveElement(tabItems[0].buttonEl),
+ isActiveElement(tabItems[0].secondaryButtonEl),
"Focus should be on the first row's context menu button element of the list"
);
await arrowDown();
ok(
- isActiveElement(tabItems[1].buttonEl),
+ isActiveElement(tabItems[1].secondaryButtonEl),
"Focus should be on the second row's context menu button element of the list"
);
await arrowLeft();
diff --git a/browser/components/firefoxview/viewpage.mjs b/browser/components/firefoxview/viewpage.mjs
index fee02b49d6..83b04faf5d 100644
--- a/browser/components/firefoxview/viewpage.mjs
+++ b/browser/components/firefoxview/viewpage.mjs
@@ -131,7 +131,7 @@ export class ViewPage extends ViewPageContent {
super();
this.selectedTab = false;
this.recentBrowsing = Boolean(this.recentBrowsingElement);
- this.onVisibilityChange = this.onVisibilityChange.bind(this);
+ this.onTabSelect = this.onTabSelect.bind(this);
this.onResize = this.onResize.bind(this);
}
@@ -148,14 +148,17 @@ export class ViewPage extends ViewPageContent {
this.windowResizeTask?.arm();
}
- onVisibilityChange(event) {
- if (this.isVisible) {
+ onTabSelect({ target }) {
+ const win = target.ownerGlobal;
+
+ let selfBrowser = window.docShell?.chromeEventHandler;
+ const { gBrowser } = this.getWindow();
+ let isForegroundTab = gBrowser.selectedBrowser == selfBrowser;
+
+ if (win.FirefoxViewHandler.tab?.selected && isForegroundTab) {
this.paused = false;
this.viewVisibleCallback();
- } else if (
- this.ownerViewPage.selectedTab &&
- this.ownerDocument.visibilityState == "hidden"
- ) {
+ } else {
this.paused = true;
this.viewHiddenCallback();
}
@@ -163,19 +166,12 @@ export class ViewPage extends ViewPageContent {
connectedCallback() {
super.connectedCallback();
- this.ownerDocument.addEventListener(
- "visibilitychange",
- this.onVisibilityChange
- );
}
disconnectedCallback() {
super.disconnectedCallback();
- this.ownerDocument.removeEventListener(
- "visibilitychange",
- this.onVisibilityChange
- );
this.getWindow().removeEventListener("resize", this.onResize);
+ this.getWindow().removeEventListener("TabSelect", this.onTabSelect);
}
updateAllVirtualLists() {
@@ -246,6 +242,7 @@ export class ViewPage extends ViewPageContent {
this.paused = false;
this.viewVisibleCallback();
this.getWindow().addEventListener("resize", this.onResize);
+ this.getWindow().addEventListener("TabSelect", this.onTabSelect);
}
}
@@ -257,5 +254,6 @@ export class ViewPage extends ViewPageContent {
this.windowResizeTask?.finalize();
}
this.getWindow().removeEventListener("resize", this.onResize);
+ this.getWindow().removeEventListener("TabSelect", this.onTabSelect);
}
}
diff --git a/browser/components/migration/ChromeProfileMigrator.sys.mjs b/browser/components/migration/ChromeProfileMigrator.sys.mjs
index 342ac3f376..e32417cd04 100644
--- a/browser/components/migration/ChromeProfileMigrator.sys.mjs
+++ b/browser/components/migration/ChromeProfileMigrator.sys.mjs
@@ -140,7 +140,7 @@ export class ChromeProfileMigrator extends MigratorBase {
// to Chrome's local state directory.
while (!(await this.hasPermissions())) {
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
- fp.init(win, "", Ci.nsIFilePicker.modeGetFolder);
+ fp.init(win?.browsingContext, "", Ci.nsIFilePicker.modeGetFolder);
fp.filterIndex = 1;
// Now wait for the filepicker to open and close. If the user picks
// the local state folder, the OS should grant us read access to everything
diff --git a/browser/components/migration/EdgeProfileMigrator.sys.mjs b/browser/components/migration/EdgeProfileMigrator.sys.mjs
index d495727ec9..d34743dcf2 100644
--- a/browser/components/migration/EdgeProfileMigrator.sys.mjs
+++ b/browser/components/migration/EdgeProfileMigrator.sys.mjs
@@ -54,8 +54,8 @@ ChromeUtils.defineLazyGetter(lazy, "gEdgeDatabase", function () {
*
* @param {string} tableName the name of the table to read.
* @param {string[]|Function} columns a list of column specifiers
- * (see ESEDBReader.jsm) or a function that
- * generates them based on the database
+ * (see ESEDBReader.sys.mjs) or a function
+ * that generates them based on the database
* reference once opened.
* @param {nsIFile} dbFile the database file to use. Defaults to
* the main Edge database.
diff --git a/browser/components/migration/MigrationUtils.sys.mjs b/browser/components/migration/MigrationUtils.sys.mjs
index 000b471ee6..cda3028cc4 100644
--- a/browser/components/migration/MigrationUtils.sys.mjs
+++ b/browser/components/migration/MigrationUtils.sys.mjs
@@ -165,6 +165,7 @@ class MigrationUtils {
"about:welcome",
"about:welcome?*",
"about:preferences",
+ "about:settings",
"chrome://browser/content/migration/migration-dialog-window.html",
"chrome://browser/content/spotlight.html",
"about:firefoxview",
@@ -411,7 +412,7 @@ class MigrationUtils {
});
Services.tm.spinEventLoopUntil(
- "MigrationUtils.jsm:MU_spinResolve",
+ "MigrationUtils.sys.mjs:MU_spinResolve",
() => done || gForceExitSpinResolve
);
if (!done) {
diff --git a/browser/components/migration/MigrationWizardParent.sys.mjs b/browser/components/migration/MigrationWizardParent.sys.mjs
index deb0e89007..dd9ef3b85c 100644
--- a/browser/components/migration/MigrationWizardParent.sys.mjs
+++ b/browser/components/migration/MigrationWizardParent.sys.mjs
@@ -219,7 +219,11 @@ export class MigrationWizardParent extends JSWindowActorParent {
let { result, path } = await new Promise(resolve => {
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
- fp.init(window, filePickerConfig.title, Ci.nsIFilePicker.modeOpen);
+ fp.init(
+ window.browsingContext,
+ filePickerConfig.title,
+ Ci.nsIFilePicker.modeOpen
+ );
for (let filter of filePickerConfig.filters) {
fp.appendFilter(filter.title, filter.extensionPattern);
@@ -299,7 +303,11 @@ export class MigrationWizardParent extends JSWindowActorParent {
let { result, path } = await new Promise(resolve => {
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
- fp.init(window, filePickerConfig.title, Ci.nsIFilePicker.modeOpen);
+ fp.init(
+ window.browsingContext,
+ filePickerConfig.title,
+ Ci.nsIFilePicker.modeOpen
+ );
for (let filter of filePickerConfig.filters) {
fp.appendFilter(filter.title, filter.extensionPattern);
diff --git a/browser/components/migration/SafariProfileMigrator.sys.mjs b/browser/components/migration/SafariProfileMigrator.sys.mjs
index 418d2b66c8..c134c0869a 100644
--- a/browser/components/migration/SafariProfileMigrator.sys.mjs
+++ b/browser/components/migration/SafariProfileMigrator.sys.mjs
@@ -632,7 +632,7 @@ export class SafariProfileMigrator extends MigratorBase {
while (!(await this.hasPermissions())) {
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
// The title (second arg) is not displayed on macOS, so leave it blank.
- fp.init(win, "", Ci.nsIFilePicker.modeGetFolder);
+ fp.init(win?.browsingContext, "", Ci.nsIFilePicker.modeGetFolder);
fp.filterIndex = 1;
fp.displayDirectory = FileUtils.getDir("ULibDir", [""]);
// Now wait for the filepicker to open and close. If the user picks
diff --git a/browser/components/migration/content/migration-wizard.mjs b/browser/components/migration/content/migration-wizard.mjs
index 7643e4bce3..6fc7a715d7 100644
--- a/browser/components/migration/content/migration-wizard.mjs
+++ b/browser/components/migration/content/migration-wizard.mjs
@@ -38,7 +38,7 @@ export class MigrationWizard extends HTMLElement {
<link rel="stylesheet" href="chrome://browser/skin/migration/migration-wizard.css">
<named-deck id="wizard-deck" selected-view="page-loading" aria-busy="true" part="deck">
<div name="page-loading">
- <h1 data-l10n-id="migration-wizard-selection-header" part="header"></h1>
+ <h1 class="migration-wizard-header" data-l10n-id="migration-wizard-selection-header" part="header"></h1>
<div class="loading-block large"></div>
<div class="loading-block small"></div>
<div class="loading-block small"></div>
@@ -46,12 +46,13 @@ export class MigrationWizard extends HTMLElement {
<!-- If possible, use the same button labels as the SELECTION page with the same strings.
That'll prevent flicker when the load state exits if we then enter the SELECTION page. -->
<button class="cancel-close" data-l10n-id="migration-cancel-button-label" disabled></button>
- <button data-l10n-id="migration-import-button-label" disabled></button>
+ <button class="migration-import-button" data-l10n-id="migration-import-button-label" disabled></button>
</moz-button-group>
</div>
<div name="page-selection">
- <h1 data-l10n-id="migration-wizard-selection-header" part="header"></h1>
+ <h1 class="migration-wizard-header" data-l10n-id="migration-wizard-selection-header" part="header"></h1>
+ <p class="migration-wizard-subheader" part="subheader" hidden=""></p>
<button id="browser-profile-selector" aria-haspopup="menu" aria-labelledby="migrator-name profile-name">
<span class="migrator-icon" role="img"></span>
<div class="migrator-description" role="presentation">
@@ -89,22 +90,22 @@ export class MigrationWizard extends HTMLElement {
<label id="select-all">
<input type="checkbox" class="select-all-checkbox"/><span data-l10n-id="migration-select-all-option-label"></span>
</label>
- <label id="bookmarks" data-resource-type="BOOKMARKS"/>
+ <label id="bookmarks" class="resource-type-label" data-resource-type="BOOKMARKS"/>
<input type="checkbox"/><span default-data-l10n-id="migration-bookmarks-option-label" ie-edge-data-l10n-id="migration-favorites-option-label"></span>
</label>
- <label id="logins-and-passwords" data-resource-type="PASSWORDS">
+ <label id="logins-and-passwords" class="resource-type-label" data-resource-type="PASSWORDS">
<input type="checkbox"/><span data-l10n-id="migration-passwords-option-label"></span>
</label>
- <label id="history" data-resource-type="HISTORY">
+ <label id="history" class="resource-type-label" data-resource-type="HISTORY">
<input type="checkbox"/><span data-l10n-id="migration-history-option-label"></span>
</label>
- <label id="extensions" data-resource-type="EXTENSIONS">
+ <label id="extensions" class="resource-type-label" data-resource-type="EXTENSIONS">
<input type="checkbox"/><span data-l10n-id="migration-extensions-option-label"></span>
</label>
- <label id="form-autofill" data-resource-type="FORMDATA">
+ <label id="form-autofill" class="resource-type-label" data-resource-type="FORMDATA">
<input type="checkbox"/><span data-l10n-id="migration-form-autofill-option-label"></span>
</label>
- <label id="payment-methods" data-resource-type="PAYMENT_METHODS">
+ <label id="payment-methods" class="resource-type-label" data-resource-type="PAYMENT_METHODS">
<input type="checkbox"/><span data-l10n-id="migration-payment-methods-option-label"></span>
</label>
</fieldset>
@@ -118,7 +119,7 @@ export class MigrationWizard extends HTMLElement {
<moz-button-group class="buttons" part="buttons">
<button class="cancel-close" data-l10n-id="migration-cancel-button-label"></button>
<button id="import-from-file" class="primary" data-l10n-id="migration-import-from-file-button-label"></button>
- <button id="import" class="primary" data-l10n-id="migration-import-button-label"></button>
+ <button id="import" class="primary migration-import-button" data-l10n-id="migration-import-button-label"></button>
<button id="get-permissions" class="primary" data-l10n-id="migration-continue-button-label"></button>
</moz-button-group>
</div>
@@ -582,6 +583,18 @@ export class MigrationWizard extends HTMLElement {
"div[name='page-selection']"
);
+ if (this.hasAttribute("selection-header-string")) {
+ selectionPage.querySelector(".migration-wizard-header").textContent =
+ this.getAttribute("selection-header-string");
+ }
+
+ let selectionSubheaderString = this.getAttribute(
+ "selection-subheader-string"
+ );
+ let subheader = selectionPage.querySelector(".migration-wizard-subheader");
+ subheader.textContent = selectionSubheaderString;
+ subheader.toggleAttribute("hidden", !selectionSubheaderString);
+
let details = this.#shadowRoot.querySelector("details");
if (this.hasAttribute("force-show-import-all")) {
@@ -596,6 +609,8 @@ export class MigrationWizard extends HTMLElement {
this.#expandedDetails = false;
+ this.#applyContentCustomizations();
+
for (let migrator of state.migrators) {
let opt = document.createElement("panel-item");
opt.setAttribute("key", migrator.key);
@@ -772,6 +787,7 @@ export class MigrationWizard extends HTMLElement {
MigrationWizardConstants.DISPLAYED_RESOURCE_TYPES.EXTENSIONS
) {
messageText.textContent = "";
+ this.#extensionsSuccessLink.target = "_blank";
this.#extensionsSuccessLink.textContent =
state.progress[resourceType].message;
}
@@ -787,6 +803,7 @@ export class MigrationWizard extends HTMLElement {
messageText.textContent = state.progress[resourceType].message;
supportLink.textContent = state.progress[resourceType].linkText;
supportLink.href = state.progress[resourceType].linkURL;
+ supportLink.target = "_blank";
remainingProgressGroups--;
totalWarnings++;
break;
@@ -800,11 +817,13 @@ export class MigrationWizard extends HTMLElement {
messageText.textContent = state.progress[resourceType].message;
supportLink.textContent = state.progress[resourceType].linkText;
supportLink.href = state.progress[resourceType].linkURL;
+ supportLink.target = "_blank";
if (
resourceType ==
MigrationWizardConstants.DISPLAYED_RESOURCE_TYPES.EXTENSIONS
) {
messageText.textContent = "";
+ this.#extensionsSuccessLink.target = "_blank";
this.#extensionsSuccessLink.textContent =
state.progress[resourceType].message;
}
@@ -816,16 +835,20 @@ export class MigrationWizard extends HTMLElement {
let migrationDone = remainingProgressGroups == 0;
let headerL10nID = "migration-wizard-progress-header";
+ let header = this.#shadowRoot.getElementById("progress-header");
if (migrationDone) {
if (totalWarnings) {
headerL10nID = "migration-wizard-progress-done-with-warnings-header";
+ } else if (this.getAttribute("data-import-complete-success-string")) {
+ header.textContent = this.getAttribute(
+ "data-import-complete-success-string"
+ );
} else {
headerL10nID = "migration-wizard-progress-done-header";
}
}
- let header = this.#shadowRoot.getElementById("progress-header");
document.l10n.setAttributes(header, headerL10nID);
let finishButtons = progressPage.querySelectorAll(".finish-button");
@@ -1233,7 +1256,10 @@ export class MigrationWizard extends HTMLElement {
let importButton = this.#shadowRoot.querySelector("#import");
importButton.disabled = checkedResources == 0;
- if (checkedResources == 0) {
+ if (this.hasAttribute("option-expander-title-string")) {
+ let optionString = this.getAttribute("option-expander-title-string");
+ selectedDataHeader.textContent = optionString;
+ } else if (checkedResources == 0) {
document.l10n.setAttributes(
selectedDataHeader,
"migration-no-selected-data-label"
@@ -1260,6 +1286,111 @@ export class MigrationWizard extends HTMLElement {
);
}
+ /**
+ * Updates content and layout to apply changes that are
+ * informed through element attributes
+ */
+ #applyContentCustomizations() {
+ let selectionPage = this.#shadowRoot.querySelector(
+ "div[name='page-selection']"
+ );
+ if (this.hasAttribute("hide-select-all")) {
+ let hideSelectAll = this.getAttribute("hide-select-all");
+
+ selectionPage.toggleAttribute("hide-select-all", hideSelectAll);
+ } else {
+ selectionPage.removeAttribute("hide-select-all");
+ }
+
+ if (this.hasAttribute("import-button-string")) {
+ if (this.getAttribute("import-button-string")) {
+ this.#importButton.textContent = this.getAttribute(
+ "import-button-string"
+ );
+ }
+ }
+
+ if (this.hasAttribute("checkbox-margin-inline")) {
+ let inlineMargin = this.getAttribute("checkbox-margin-inline");
+ this.style.setProperty(
+ "--resource-type-label-margin-inline",
+ inlineMargin
+ );
+ }
+
+ if (this.hasAttribute("checkbox-margin-block")) {
+ let blockMargin = this.getAttribute("checkbox-margin-block");
+ this.style.setProperty("--resource-type-label-margin-block", blockMargin);
+ }
+
+ if (this.hasAttribute("import-button-class")) {
+ let importButtonClass = this.getAttribute("import-button-class");
+ if (importButtonClass) {
+ this.#importButton.classList.add(importButtonClass);
+ }
+ }
+
+ if (this.hasAttribute("header-font-size")) {
+ let headerFontSize = this.getAttribute("header-font-size");
+ if (headerFontSize) {
+ this.style.setProperty(
+ "--embedded-wizard-header-font-size",
+ headerFontSize
+ );
+ }
+ }
+
+ if (this.hasAttribute("header-font-weight")) {
+ let headerFontWeight = this.getAttribute("header-font-weight");
+ if (headerFontWeight) {
+ this.style.setProperty(
+ "--embedded-wizard-header-font-weight",
+ headerFontWeight
+ );
+ }
+ }
+
+ if (this.hasAttribute("header-margin-block")) {
+ let headerMarginBlock = this.getAttribute("header-margin-block");
+ if (headerMarginBlock) {
+ this.style.setProperty(
+ "--embedded-wizard-header-margin-block",
+ headerMarginBlock
+ );
+ }
+ }
+
+ if (this.hasAttribute("subheader-font-size")) {
+ let subheaderFontSize = this.getAttribute("subheader-font-size");
+ if (subheaderFontSize) {
+ this.style.setProperty(
+ "--embedded-wizard-subheader-font-size",
+ subheaderFontSize
+ );
+ }
+ }
+
+ if (this.hasAttribute("subheader-font-weight")) {
+ let subheaderFontWeight = this.getAttribute("subheader-font-weight");
+ if (subheaderFontWeight) {
+ this.style.setProperty(
+ "--embedded-wizard-subheader-font-weight",
+ subheaderFontWeight
+ );
+ }
+ }
+
+ if (this.hasAttribute("subheader-margin-block")) {
+ let subheaderMarginBlock = this.getAttribute("subheader-margin-block");
+ if (subheaderMarginBlock) {
+ this.style.setProperty(
+ "--embedded-wizard-subheader-margin-block",
+ subheaderMarginBlock
+ );
+ }
+ }
+ }
+
handleEvent(event) {
switch (event.type) {
case "click": {
diff --git a/browser/components/migration/docs/migration-wizard.rst b/browser/components/migration/docs/migration-wizard.rst
index 320b429db5..c54d50515b 100644
--- a/browser/components/migration/docs/migration-wizard.rst
+++ b/browser/components/migration/docs/migration-wizard.rst
@@ -28,6 +28,23 @@ After binding to the document, if the ``MigrationWizard`` has the ``auto-request
If the ``auto-request-state`` attribute is not set, calling ``requestState()`` on the ``MigrationWizard`` will perform the above step. This is useful in situations where the ``MigrationWizard`` element is being constructed dynamically and the callers wants finer-grain control over when the state will be requested.
+There are also a handful of attributes that can be set to customize the experience that the ``MigrationWizard`` provides.
+* ``option-expander-title-string``: The string of the label that is displayed next to the button that expands or hides the resource list on the selection page will be overwritten with the value of this attribute, if it is set.
+* ``hide-option-expander-subtitle``: When set to true, this attribute hides the subtitle that is displayed underneath the resource list expander.
+* ``import-button-string``: The string on the primary action button on the selection page is overridden with the value of this attribute when set.
+* ``import-button-class``: When set, the value of this attribute will be added to the class list on the primary action button on the selection page.
+* ``checkbox-margin-inline``: When set, the value of this attribute will be used to override the ``margin-inline`` of the labels in the resource list on the selection page.
+* ``checkbox-margin-block``: When set, the value of this attribute will be used to override the ``margin-block`` of the labels in the resource list on the selection page.
+* ``selection-header-string``: When set, overrides the text content of the header on the selection page with the set string.
+* ``selection-subheader-string``: When set, presents a subheader on the selection page with the set string.
+* ``data-import-complete-success-string``: When set, this attribute will be used to override the text content of the header of the import complete screen when the import was successful.
+* ``header-font-size``: Overrides the default ``font-size`` of all headers with the value of this string.
+* ``header-font-weight``: Overrides the default ``font-weight`` of all headers with the value of this string.
+* ``header-margin-block``: Overrides the default ``margin-block`` of all headers with the value of this string.
+* ``subheader-font-size``: When used with ``selection-subheader-string``, overrides the default ``font-size`` of the selection page subheader with the value in this string. This has no effect when used alone.
+* ``subheader-font-weight``: When used with ``selection-subheader-string``, overrides the default ``font-weight`` of the selection page subheader with the value in this string. This has no effect when used alone.
+* ``subheader-margin-block``: When used with ``selection-subheader-string``, overrides the default ``margin-block`` of the selection page subheader with the value in this string. This has no effect when used alone.
+
Notably, the ``MigrationWizard`` does not contain any internal logic or privileged code to perform any migrations or to directly interact with the migration mechanisms. Its sole function is to accept input from the user and emit that input as events. The associated ``MigrationWizardChild`` will listen for those events, and take care of calling into the ``MigrationWizard`` to update the state of the reusable component. This means that the reusable component can be embedded in unprivileged contexts and have its states presented in a tool like Storybook.
If the ``MigrationWizard`` is embedded in a dialog, it should have the ``dialog-mode`` attribute set on it so that dialog-appropriate buttons and styles are applied.
diff --git a/browser/components/migration/tests/browser/browser_file_migration.js b/browser/components/migration/tests/browser/browser_file_migration.js
index 04241d29d5..c73dfc4456 100644
--- a/browser/components/migration/tests/browser/browser_file_migration.js
+++ b/browser/components/migration/tests/browser/browser_file_migration.js
@@ -68,7 +68,7 @@ add_setup(async () => {
// We use MockFilePicker to simulate a native file picker, and prepare it
// to return a dummy file pointed at TEST_FILE_PATH. The file at
// TEST_FILE_PATH is not required (nor expected) to exist.
- MockFilePicker.init(window);
+ MockFilePicker.init(window.browsingContext);
registerCleanupFunction(() => {
MockFilePicker.cleanup();
});
diff --git a/browser/components/migration/tests/browser/browser_safari_passwords.js b/browser/components/migration/tests/browser/browser_safari_passwords.js
index c005342b46..e9ebd05e0a 100644
--- a/browser/components/migration/tests/browser/browser_safari_passwords.js
+++ b/browser/components/migration/tests/browser/browser_safari_passwords.js
@@ -18,7 +18,7 @@ const TEST_FILE_PATH = getTestFilePath("dummy_file.csv");
const { MockFilePicker } = SpecialPowers;
add_setup(async function () {
- MockFilePicker.init(window);
+ MockFilePicker.init(window.browsingContext);
registerCleanupFunction(() => {
MockFilePicker.cleanup();
});
diff --git a/browser/components/migration/tests/chrome/test_migration_wizard.html b/browser/components/migration/tests/chrome/test_migration_wizard.html
index d991cce114..cc2d8a0363 100644
--- a/browser/components/migration/tests/chrome/test_migration_wizard.html
+++ b/browser/components/migration/tests/chrome/test_migration_wizard.html
@@ -725,6 +725,10 @@
EXTENSIONS_INFO_HREF
);
is(
+ extensionsGroup.querySelector("a.message-text").target,
+ "_blank"
+ );
+ is(
extensionsGroup.querySelector(".support-text").textContent,
EXTENSIONS_SUPPORT_STRING
);
@@ -732,6 +736,10 @@
extensionsGroup.querySelector(".support-text").href,
EXTENSIONS_SUPPORT_HREF
);
+ is(
+ extensionsGroup.querySelector(".support-text").target,
+ "_blank"
+ );
// With progress being complete, the header should be using the completed
// migration string.
@@ -792,6 +800,10 @@
extensionsGroup.querySelector(".support-text").href,
EXTENSIONS_SUPPORT_HREF
);
+ is(
+ extensionsGroup.querySelector(".support-text").target,
+ "_blank"
+ );
// With progress being complete, the header should be using the completed
// migration string.
@@ -1521,6 +1533,248 @@
let getPermissionButton = gShadowRoot.querySelector("#get-permissions");
ok(isHidden(getPermissionButton), "Get permissions button hiddne.");
});
+
+ add_task(async function hide_option_expander_subtitle() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+ gWiz.setAttribute("hide-option-expander-subtitle", "true");
+ let subtitle = selectionPage.querySelector("#resource-selection-summary > .selected-data");
+
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+
+ ok(gWiz.hasAttribute("hide-option-expander-subtitle"), "hide option expander subtitle attribute is present on migration wizard");
+
+ ok(isHidden(subtitle), "subtitle is hidden");
+
+ gWiz.removeAttribute("hide-option-expander-subtitle");
+ });
+
+ add_task(async function update_option_expander_title_string() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+
+ let title = selectionPage.querySelector(".selected-data-header");
+ gWiz.setAttribute("option-expander-title-string", "test");
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+
+ await BrowserTestUtils.waitForMutationCondition(
+ title,
+ {childList: true},
+ () => title.textContent == "test"
+ )
+ is(title.textContent, "test", "resource selection expander subtitle has been changed");
+
+ gWiz.removeAttribute("option-expander-title-string");
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+
+ await BrowserTestUtils.waitForMutationCondition(
+ title,
+ {childList: true},
+ () => title.textContent != "test"
+ )
+ isnot(title.textContent, "test", "resource selection expander subtitle was reverted");
+ });
+
+ add_task(async function hide_select_all_checkbox() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+
+ let selectAll = selectionPage.querySelector("#select-all");
+ gWiz.setAttribute("hide-select-all", true);
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+
+ ok(isHidden(selectAll), "select all is not displayed");
+
+ gWiz.removeAttribute("hide-select-all");
+ });
+
+ add_task(async function update_import_button_string() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+ gWiz.setAttribute("import-button-string", "test");
+ let button = selectionPage.querySelector(".migration-import-button");
+
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+
+ is(button.textContent, "test", "button text is expected");
+
+ gWiz.removeAttribute("import-button-string");
+ });
+
+ add_task(async function update_checkbox_margins() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+
+ gWiz.setAttribute("checkbox-margin-inline", "27px 42px");
+ gWiz.setAttribute("checkbox-margin-block", "42px 27px");
+
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+
+ let checkboxLabels = selectionPage.querySelectorAll(".resource-type-label");
+ for(let label of checkboxLabels) {
+ let computedStyle = getComputedStyle(label);
+ let marginInline = computedStyle.getPropertyValue("margin-inline");
+ let marginBlock = computedStyle.getPropertyValue("margin-block");
+ is(marginInline, "27px 42px", "margin inline is set to expected value");
+ is(marginBlock, "42px 27px", "margin block is set to expected value");
+ }
+
+ gWiz.removeAttribute("checkbox-margin-inline");
+ gWiz.removeAttribute("checkbox-margin-block");
+ });
+
+ add_task(async function update_import_button_class() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+ let importButton = selectionPage.querySelector("#import");
+
+ gWiz.setAttribute("import-button-class", "primary");
+
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+
+ ok(importButton.classList.contains("primary"), "import button has the primary class");
+
+ gWiz.removeAttribute("import-button-class");
+ });
+
+ add_task(async function update_header_font_size() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+ let header = selectionPage.querySelector("h1");
+
+ gWiz.setAttribute("header-font-size", "24px");
+
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+ let computedStyle = getComputedStyle(header);
+
+ is(computedStyle.getPropertyValue("font-size"), "24px", "header font size is changed to correct value");
+ gWiz.removeAttribute("header-font-size");
+ });
+
+ add_task(async function update_header_margin_block() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+ let header = selectionPage.querySelector("h1");
+
+ gWiz.setAttribute("header-margin-block", "20px 30px");
+
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+ let computedStyle = getComputedStyle(header);
+
+ is(computedStyle.getPropertyValue("margin-block"), "20px 30px", "header margin block is changed to correct value");
+ gWiz.removeAttribute("header-margin-block");
+ });
+
+ add_task(async function update_header_string() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+ let header = selectionPage.querySelector("h1");
+
+ gWiz.setAttribute("selection-header-string", "test string");
+
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+
+ is(header.textContent, "test string", "header text content is changed to correct value");
+ gWiz.removeAttribute("selection-header-string");
+ });
+
+ add_task(async function update_subheader_font_size() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+ let subheader = selectionPage.querySelector("h1");
+
+ gWiz.setAttribute("subheader-font-size", "24px");
+
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+ let computedStyle = getComputedStyle(subheader);
+
+ is(computedStyle.getPropertyValue("font-size"), "24px", "subheader font size is changed to correct value");
+ gWiz.removeAttribute("subheader-font-size");
+ });
+
+ add_task(async function update_subheader_margin_block() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+ let subheader = selectionPage.querySelector("h1");
+
+ gWiz.setAttribute("subheader-margin-block", "20px 30px");
+
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+ let computedStyle = getComputedStyle(subheader);
+
+ is(computedStyle.getPropertyValue("margin-block"), "20px 30px", "subheader margin block is changed to correct value");
+ gWiz.removeAttribute("subheader-margin-block");
+ });
+
+ add_task(async function update_subheader_string() {
+ let selectionPage = gShadowRoot.querySelector("div[name='page-selection']");
+ let subheader = selectionPage.querySelector(".migration-wizard-subheader");
+
+ gWiz.setAttribute("selection-subheader-string", "test string");
+
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+
+ is(subheader.textContent, "test string", "subheader text content is changed to correct value");
+
+ gWiz.removeAttribute("selection-subheader-string");
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: MIGRATOR_PROFILE_INSTANCES,
+ });
+
+ ok(isHidden(subheader), "subheader is hidden")
+ });
+
+ add_task(async function update_data_import_success_string() {
+ let progressPage = gShadowRoot.querySelector("div[name='page-progress']");
+ let header = progressPage.querySelector("h1");
+
+ gWiz.setAttribute("data-import-complete-success-string", "test string");
+
+ gWiz.setState({
+ page: MigrationWizardConstants.PAGES.PROGRESS,
+ key: "chrome",
+ progress: {
+ [MigrationWizardConstants.DISPLAYED_RESOURCE_TYPES.EXTENSIONS]: {
+ value: MigrationWizardConstants.PROGRESS_VALUE.SUCCESS,
+ },
+ [MigrationWizardConstants.DISPLAYED_RESOURCE_TYPES.FORMDATA]: {
+ value: MigrationWizardConstants.PROGRESS_VALUE.SUCCESS,
+ },
+ },
+ });
+
+ is(header.textContent, "test string", "import success header text content is changed to correct value");
+ gWiz.removeAttribute("data-import-complete-success-string");
+ });
</script>
</head>
<body>
diff --git a/browser/components/migration/tests/marionette/test_refresh_firefox.py b/browser/components/migration/tests/marionette/test_refresh_firefox.py
index ea5d6bce99..2ffcd4f099 100644
--- a/browser/components/migration/tests/marionette/test_refresh_firefox.py
+++ b/browser/components/migration/tests/marionette/test_refresh_firefox.py
@@ -224,8 +224,8 @@ class TestFirefoxRefresh(MarionetteTestCase):
self.runAsyncCode(
"""
let resolve = arguments[arguments.length - 1];
- let { FxAccountsStorageManager } = ChromeUtils.import(
- "resource://gre/modules/FxAccountsStorage.jsm"
+ let { FxAccountsStorageManager } = ChromeUtils.importESModule(
+ "resource://gre/modules/FxAccountsStorage.sys.mjs"
);
let storage = new FxAccountsStorageManager();
let data = {email: "test@test.com", uid: "uid", keyFetchToken: "top-secret"};
@@ -448,8 +448,8 @@ class TestFirefoxRefresh(MarionetteTestCase):
def checkFxA(self):
result = self.runAsyncCode(
"""
- let { FxAccountsStorageManager } = ChromeUtils.import(
- "resource://gre/modules/FxAccountsStorage.jsm"
+ let { FxAccountsStorageManager } = ChromeUtils.importESModule(
+ "resource://gre/modules/FxAccountsStorage.sys.mjs"
);
let resolve = arguments[arguments.length - 1];
let storage = new FxAccountsStorageManager();
@@ -528,16 +528,16 @@ class TestFirefoxRefresh(MarionetteTestCase):
global.Preferences = ChromeUtils.importESModule(
"resource://gre/modules/Preferences.sys.mjs"
).Preferences;
- global.FormHistory = ChromeUtils.import(
- "resource://gre/modules/FormHistory.jsm"
+ global.FormHistory = ChromeUtils.importESModule(
+ "resource://gre/modules/FormHistory.sys.mjs"
).FormHistory;
""" # NOQA: E501
)
self._formAutofillAvailable = self.runCode(
"""
try {
- global.formAutofillStorage = ChromeUtils.import(
- "resource://formautofill/FormAutofillStorage.jsm"
+ global.formAutofillStorage = ChromeUtils.importESModule(
+ "resource://formautofill/FormAutofillStorage.sys.mjs"
).formAutofillStorage;
} catch(e) {
return false;
diff --git a/browser/components/migration/tests/unit/test_Chrome_permissions.js b/browser/components/migration/tests/unit/test_Chrome_permissions.js
index 6dfd8bcceb..04bded3c8e 100644
--- a/browser/components/migration/tests/unit/test_Chrome_permissions.js
+++ b/browser/components/migration/tests/unit/test_Chrome_permissions.js
@@ -35,7 +35,7 @@ add_setup(async () => {
gTempDir = do_get_tempdir();
await IOUtils.writeJSON(PathUtils.join(gTempDir.path, "Local State"), []);
- MockFilePicker.init(globalThis);
+ MockFilePicker.init(/* mock BrowsingContext */ { window: globalThis });
registerCleanupFunction(() => {
MockFilePicker.cleanup();
});
diff --git a/browser/components/migration/tests/unit/test_Safari_permissions.js b/browser/components/migration/tests/unit/test_Safari_permissions.js
index eaa6c7788e..3e11adc3d8 100644
--- a/browser/components/migration/tests/unit/test_Safari_permissions.js
+++ b/browser/components/migration/tests/unit/test_Safari_permissions.js
@@ -30,7 +30,7 @@ add_setup(async () => {
registerFakePath("ULibDir", tempDir);
- MockFilePicker.init(globalThis);
+ MockFilePicker.init(/* mock BrowsingContext */ { window: globalThis });
registerCleanupFunction(() => {
MockFilePicker.cleanup();
});
diff --git a/browser/components/moz.build b/browser/components/moz.build
index 6fd8695565..0f91b90fb0 100644
--- a/browser/components/moz.build
+++ b/browser/components/moz.build
@@ -32,6 +32,7 @@ DIRS += [
"aboutwelcome",
"asrouter",
"attribution",
+ "backup",
"contentanalysis",
"contextualidentity",
"customizableui",
@@ -50,6 +51,7 @@ DIRS += [
"pocket",
"preferences",
"privatebrowsing",
+ "profiles",
"prompts",
"protections",
"protocolhandler",
@@ -60,6 +62,7 @@ DIRS += [
"sessionstore",
"shell",
"shopping",
+ "sidebar",
"syncedtabs",
"tabpreview",
"tabunloader",
diff --git a/browser/components/newtab/.eslintrc.js b/browser/components/newtab/.eslintrc.js
index 5fc7a4dcff..f541cdd988 100644
--- a/browser/components/newtab/.eslintrc.js
+++ b/browser/components/newtab/.eslintrc.js
@@ -58,7 +58,7 @@ module.exports = {
{
// Use a configuration that's appropriate for modules, workers and
// non-production files.
- files: ["*.jsm", "lib/cache.worker.js", "test/**"],
+ files: ["lib/cache.worker.js", "test/**"],
rules: {
"no-implicit-globals": "off",
},
@@ -123,15 +123,12 @@ module.exports = {
"consistent-this": ["error", "use-bind"],
eqeqeq: "error",
"func-name-matching": "error",
- "getter-return": "error",
"guard-for-in": "error",
- "max-depth": ["error", 4],
"max-nested-callbacks": ["error", 4],
"max-params": ["error", 6],
"max-statements": ["error", 50],
"new-cap": ["error", { newIsCap: true, capIsNew: false }],
"no-alert": "error",
- "no-console": ["error", { allow: ["error"] }],
"no-div-regex": "error",
"no-duplicate-imports": "error",
"no-eq-null": "error",
diff --git a/browser/components/newtab/AboutNewTabService.sys.mjs b/browser/components/newtab/AboutNewTabService.sys.mjs
index e73e1b1880..73502fcb4f 100644
--- a/browser/components/newtab/AboutNewTabService.sys.mjs
+++ b/browser/components/newtab/AboutNewTabService.sys.mjs
@@ -339,7 +339,7 @@ export const AboutHomeStartupCacheChild = {
});
},
- observe(subject, topic, data) {
+ observe(subject, topic) {
if (topic === "memory-pressure" && this._cacheWorker) {
this._cacheWorker.terminate();
this._cacheWorker = null;
@@ -447,7 +447,7 @@ class BaseAboutNewTabService {
return this.defaultURL;
}
- aboutHomeChannel(uri, loadInfo) {
+ aboutHomeChannel() {
throw Components.Exception(
"AboutHomeChannel not implemented for this process.",
Cr.NS_ERROR_NOT_IMPLEMENTED
diff --git a/browser/components/newtab/components/CustomElements/paragraph.js b/browser/components/newtab/components/CustomElements/paragraph.js
index dce8a229a4..f9818dbde9 100644
--- a/browser/components/newtab/components/CustomElements/paragraph.js
+++ b/browser/components/newtab/components/CustomElements/paragraph.js
@@ -49,7 +49,7 @@
return ["fluent-remote-id"];
}
- attributeChangedCallback(name, oldValue, newValue) {
+ attributeChangedCallback() {
this.render();
}
diff --git a/browser/components/newtab/content-src/components/Base/Base.jsx b/browser/components/newtab/content-src/components/Base/Base.jsx
index 0580267f26..20402b09f5 100644
--- a/browser/components/newtab/content-src/components/Base/Base.jsx
+++ b/browser/components/newtab/content-src/components/Base/Base.jsx
@@ -165,6 +165,7 @@ export class BaseContent extends React.PureComponent {
const { App } = props;
const { initialized, customizeMenuVisible } = App;
const prefs = props.Prefs.values;
+ const { pocketConfig } = prefs;
const isDiscoveryStream =
props.DiscoveryStream.config && props.DiscoveryStream.config.enabled;
@@ -172,6 +173,14 @@ export class BaseContent extends React.PureComponent {
section => section.id !== "topstories"
);
+ let spocMessageVariant = "";
+ if (
+ props.App.locale?.startsWith("en-") &&
+ pocketConfig?.spocMessageVariant === "variant-c"
+ ) {
+ spocMessageVariant = pocketConfig.spocMessageVariant;
+ }
+
const pocketEnabled =
prefs["feeds.section.topstories"] && prefs["feeds.system.topstories"];
const noSectionsEnabled =
@@ -218,6 +227,7 @@ export class BaseContent extends React.PureComponent {
pocketRegion={pocketRegion}
mayHaveSponsoredTopSites={mayHaveSponsoredTopSites}
mayHaveSponsoredStories={mayHaveSponsoredStories}
+ spocMessageVariant={spocMessageVariant}
showing={customizeMenuVisible}
/>
{/* eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions*/}
@@ -239,7 +249,10 @@ export class BaseContent extends React.PureComponent {
<div className={`body-wrapper${initialized ? " on" : ""}`}>
{isDiscoveryStream ? (
<ErrorBoundary className="borderless-error">
- <DiscoveryStreamBase locale={props.App.locale} />
+ <DiscoveryStreamBase
+ locale={props.App.locale}
+ mayHaveSponsoredStories={mayHaveSponsoredStories}
+ />
</ErrorBoundary>
) : (
<Sections />
diff --git a/browser/components/newtab/content-src/components/CollapsibleSection/CollapsibleSection.jsx b/browser/components/newtab/content-src/components/CollapsibleSection/CollapsibleSection.jsx
index 679e8e137f..98bf88fbea 100644
--- a/browser/components/newtab/content-src/components/CollapsibleSection/CollapsibleSection.jsx
+++ b/browser/components/newtab/content-src/components/CollapsibleSection/CollapsibleSection.jsx
@@ -4,6 +4,7 @@
import { ErrorBoundary } from "content-src/components/ErrorBoundary/ErrorBoundary";
import { FluentOrText } from "content-src/components/FluentOrText/FluentOrText";
+import { SponsoredContentHighlight } from "../DiscoveryStreamComponents/FeatureHighlight/SponsoredContentHighlight";
import React from "react";
import { connect } from "react-redux";
@@ -48,7 +49,14 @@ export class _CollapsibleSection extends React.PureComponent {
render() {
const { isAnimating, maxHeight, menuButtonHover, showContextMenu } =
this.state;
- const { id, collapsed, learnMore, title, subTitle } = this.props;
+ const {
+ id,
+ collapsed,
+ learnMore,
+ title,
+ subTitle,
+ mayHaveSponsoredStories,
+ } = this.props;
const active = menuButtonHover || showContextMenu;
let bodyStyle;
if (isAnimating && !collapsed) {
@@ -91,6 +99,13 @@ export class _CollapsibleSection extends React.PureComponent {
<FluentOrText message={subTitle} />
</span>
)}
+ {mayHaveSponsoredStories &&
+ this.props.spocMessageVariant === "variant-a" && (
+ <SponsoredContentHighlight
+ position="inset-block-start inset-inline-start"
+ dispatch={this.props.dispatch}
+ />
+ )}
</h3>
</div>
<ErrorBoundary className="section-body-fallback">
diff --git a/browser/components/newtab/content-src/components/ContextMenu/ContextMenuButton.jsx b/browser/components/newtab/content-src/components/ContextMenu/ContextMenuButton.jsx
index 0364f5386a..58df7d012b 100644
--- a/browser/components/newtab/content-src/components/ContextMenu/ContextMenuButton.jsx
+++ b/browser/components/newtab/content-src/components/ContextMenu/ContextMenuButton.jsx
@@ -16,7 +16,7 @@ export class ContextMenuButton extends React.PureComponent {
this.onUpdate = this.onUpdate.bind(this);
}
- openContextMenu(isKeyBoard, event) {
+ openContextMenu(isKeyBoard) {
if (this.props.onUpdate) {
this.props.onUpdate(true);
}
diff --git a/browser/components/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx b/browser/components/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx
index 57ed935e93..298dedcee5 100644
--- a/browser/components/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx
+++ b/browser/components/newtab/content-src/components/CustomizeMenu/ContentSection/ContentSection.jsx
@@ -4,6 +4,7 @@
import React from "react";
import { actionCreators as ac } from "common/Actions.sys.mjs";
+import { SafeAnchor } from "../../DiscoveryStreamComponents/SafeAnchor/SafeAnchor";
export class ContentSection extends React.PureComponent {
constructor(props) {
@@ -96,6 +97,7 @@ export class ContentSection extends React.PureComponent {
mayHaveSponsoredStories,
mayHaveRecentSaves,
openPreferences,
+ spocMessageVariant,
} = this.props;
const {
topSitesEnabled,
@@ -254,6 +256,23 @@ export class ContentSection extends React.PureComponent {
</label>
</div>
+ {pocketRegion &&
+ mayHaveSponsoredStories &&
+ spocMessageVariant === "variant-c" && (
+ <div className="sponsored-content-info">
+ <div className="icon icon-help"></div>
+ <div>
+ Sponsored content supports our mission to build a better web.{" "}
+ <SafeAnchor
+ dispatch={this.props.dispatch}
+ url="https://support.mozilla.org/kb/pocket-sponsored-stories-new-tabs"
+ >
+ Find out how
+ </SafeAnchor>
+ </div>
+ </div>
+ )}
+
<span className="divider" role="separator"></span>
<div>
diff --git a/browser/components/newtab/content-src/components/CustomizeMenu/CustomizeMenu.jsx b/browser/components/newtab/content-src/components/CustomizeMenu/CustomizeMenu.jsx
index 3d33f6fde7..54dcd550c4 100644
--- a/browser/components/newtab/content-src/components/CustomizeMenu/CustomizeMenu.jsx
+++ b/browser/components/newtab/content-src/components/CustomizeMenu/CustomizeMenu.jsx
@@ -71,6 +71,7 @@ export class _CustomizeMenu extends React.PureComponent {
mayHaveSponsoredTopSites={this.props.mayHaveSponsoredTopSites}
mayHaveSponsoredStories={this.props.mayHaveSponsoredStories}
mayHaveRecentSaves={this.props.DiscoveryStream.recentSavesEnabled}
+ spocMessageVariant={this.props.spocMessageVariant}
dispatch={this.props.dispatch}
/>
</div>
diff --git a/browser/components/newtab/content-src/components/CustomizeMenu/_CustomizeMenu.scss b/browser/components/newtab/content-src/components/CustomizeMenu/_CustomizeMenu.scss
index f534b8701b..579e455a3f 100644
--- a/browser/components/newtab/content-src/components/CustomizeMenu/_CustomizeMenu.scss
+++ b/browser/components/newtab/content-src/components/CustomizeMenu/_CustomizeMenu.scss
@@ -143,6 +143,10 @@
border-radius: 4px;
appearance: none;
background-color: var(--newtab-element-secondary-color);
+
+ &:hover {
+ background-color: var(--newtab-element-secondary-hover-color);
+ }
}
.sponsored-checkbox:checked {
@@ -151,6 +155,14 @@
background: url('chrome://global/skin/icons/check.svg') center no-repeat;
background-color: var(--newtab-primary-action-background);
+ &:hover {
+ background-color: var(--newtab-primary-element-hover-color);
+ }
+
+ &:active {
+ background-color: var(--newtab-primary-element-active-color);
+ }
+
@media (forced-colors: active) {
fill: $black;
}
@@ -178,6 +190,10 @@
background-origin: content-box;
background-color: var(--newtab-background-color-secondary);
+ &:hover {
+ background-color: var(--newtab-element-secondary-hover-color);
+ }
+
&:dir(rtl) {
background-position-x: left;
}
@@ -201,6 +217,25 @@
}
}
+ .sponsored-content-info {
+ display: flex;
+ gap: var(--space-small);
+ font-size: var(--font-size-small);
+ border-radius: var(--border-radius-medium);
+ background-color: var(--newtab-element-secondary-color);
+ padding: var(--space-small) var(--space-large);
+
+ .icon-help {
+ flex-shrink: 0;
+ color: var(--color-accent-primary);
+ height: 20px;
+ }
+
+ a {
+ color: var(--newtab-primary-action-background);
+ }
+ }
+
.divider {
border-top: 1px var(--newtab-border-color) solid;
margin: 0 -16px;
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamAdmin/DiscoveryStreamAdmin.jsx b/browser/components/newtab/content-src/components/DiscoveryStreamAdmin/DiscoveryStreamAdmin.jsx
index 0112013391..3c31a5a29f 100644
--- a/browser/components/newtab/content-src/components/DiscoveryStreamAdmin/DiscoveryStreamAdmin.jsx
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamAdmin/DiscoveryStreamAdmin.jsx
@@ -143,7 +143,7 @@ export class DiscoveryStreamAdminUI extends React.PureComponent {
);
}
- restorePrefDefaults(event) {
+ restorePrefDefaults() {
this.props.dispatch(
ac.OnlyToMain({
type: at.DISCOVERY_STREAM_CONFIG_RESET_DEFAULTS,
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx b/browser/components/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
index dff122b366..0f0ee51ab9 100644
--- a/browser/components/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamBase/DiscoveryStreamBase.jsx
@@ -110,7 +110,7 @@ export class _DiscoveryStreamBase extends React.PureComponent {
});
}
- renderComponent(component, embedWidth) {
+ renderComponent(component) {
switch (component.type) {
case "Highlights":
return <Highlights />;
@@ -196,6 +196,7 @@ export class _DiscoveryStreamBase extends React.PureComponent {
onboardingExperience={component.properties.onboardingExperience}
ctaButtonSponsors={component.properties.ctaButtonSponsors}
ctaButtonVariant={component.properties.ctaButtonVariant}
+ spocMessageVariant={component.properties.spocMessageVariant}
editorsPicksHeader={component.properties.editorsPicksHeader}
recentSavesEnabled={this.props.DiscoveryStream.recentSavesEnabled}
hideDescriptions={this.props.DiscoveryStream.hideDescriptions}
@@ -218,7 +219,7 @@ export class _DiscoveryStreamBase extends React.PureComponent {
}
render() {
- const { locale } = this.props;
+ const { locale, mayHaveSponsoredStories } = this.props;
// Select layout render data by adding spocs and position to recommendations
const { layoutRender } = selectLayoutRender({
state: this.props.DiscoveryStream,
@@ -322,6 +323,8 @@ export class _DiscoveryStreamBase extends React.PureComponent {
showPrefName={topStories.pref.feed}
title={sectionTitle}
subTitle={subTitle}
+ mayHaveSponsoredStories={mayHaveSponsoredStories}
+ spocMessageVariant={message?.properties?.spocMessageVariant}
eventSource="CARDGRID"
>
{this.renderLayout(layoutRender)}
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid.jsx b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid.jsx
index f13e0eb7ed..cf00361df2 100644
--- a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid.jsx
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/CardGrid/CardGrid.jsx
@@ -31,11 +31,7 @@ export function DSSubHeader({ children }) {
);
}
-export function OnboardingExperience({
- children,
- dispatch,
- windowObj = global,
-}) {
+export function OnboardingExperience({ dispatch, windowObj = global }) {
const [dismissed, setDismissed] = useState(false);
const [maxHeight, setMaxHeight] = useState(null);
const heightElement = useRef(null);
@@ -330,6 +326,7 @@ export class _CardGrid extends React.PureComponent {
onboardingExperience,
ctaButtonSponsors,
ctaButtonVariant,
+ spocMessageVariant,
widgets,
recentSavesEnabled,
hideDescriptions,
@@ -378,6 +375,7 @@ export class _CardGrid extends React.PureComponent {
saveToPocketCard={saveToPocketCard}
ctaButtonSponsors={ctaButtonSponsors}
ctaButtonVariant={ctaButtonVariant}
+ spocMessageVariant={spocMessageVariant}
recommendation_id={rec.recommendation_id}
/>
)
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/DSCard.jsx b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/DSCard.jsx
index 6aef56fb33..f3e1eab503 100644
--- a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/DSCard.jsx
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/DSCard.jsx
@@ -85,8 +85,9 @@ export const DefaultMeta = ({
sponsor,
sponsored_by_override,
saveToPocketCard,
- isRecentSave,
ctaButtonVariant,
+ dispatch,
+ spocMessageVariant,
}) => (
<div className="meta">
<div className="info-wrap">
@@ -100,9 +101,7 @@ export const DefaultMeta = ({
sponsored_by_override={sponsored_by_override}
/>
)}
- <header title={title} className="title clamp">
- {title}
- </header>
+ <header className="title clamp">{title}</header>
{excerpt && <p className="excerpt clamp">{excerpt}</p>}
</div>
{!newSponsoredLabel && (
@@ -113,6 +112,8 @@ export const DefaultMeta = ({
sponsored_by_override={sponsored_by_override}
cta_button_variant={ctaButtonVariant}
source={source}
+ dispatch={dispatch}
+ spocMessageVariant={spocMessageVariant}
/>
)}
{/* Sponsored label is normally in the way of any message.
@@ -183,7 +184,7 @@ export class _DSCard extends React.PureComponent {
];
}
- onLinkClick(event) {
+ onLinkClick() {
if (this.props.dispatch) {
this.props.dispatch(
ac.DiscoveryStreamUserEvent({
@@ -223,7 +224,7 @@ export class _DSCard extends React.PureComponent {
}
}
- onSaveClick(event) {
+ onSaveClick() {
if (this.props.dispatch) {
this.props.dispatch(
ac.AlsoToMain({
@@ -408,43 +409,28 @@ export class _DSCard extends React.PureComponent {
};
return (
- <div
+ <article
className={`ds-card ${compactImagesClassName} ${imageGradientClassName} ${titleLinesName} ${descLinesClassName} ${ctaButtonClassName} ${ctaButtonVariantClassName}`}
ref={this.setContextMenuButtonHostRef}
>
+ <div className="img-wrapper">
+ <DSImage
+ extraClassNames="img"
+ source={this.props.image_src}
+ rawSource={this.props.raw_image_src}
+ sizes={this.dsImageSizes}
+ url={this.props.url}
+ title={this.props.title}
+ isRecentSave={isRecentSave}
+ />
+ </div>
<SafeAnchor
className="ds-card-link"
dispatch={this.props.dispatch}
onLinkClick={!this.props.placeholder ? this.onLinkClick : undefined}
url={this.props.url}
+ title={this.props.title}
>
- <div className="img-wrapper">
- <DSImage
- extraClassNames="img"
- source={this.props.image_src}
- rawSource={this.props.raw_image_src}
- sizes={this.dsImageSizes}
- url={this.props.url}
- title={this.props.title}
- isRecentSave={isRecentSave}
- />
- </div>
- {ctaButtonVariant === "variant-b" && (
- <div className="cta-header">Shop Now</div>
- )}
- <DefaultMeta
- source={source}
- title={this.props.title}
- excerpt={excerpt}
- newSponsoredLabel={newSponsoredLabel}
- timeToRead={timeToRead}
- context={this.props.context}
- context_type={this.props.context_type}
- sponsor={this.props.sponsor}
- sponsored_by_override={this.props.sponsored_by_override}
- saveToPocketCard={saveToPocketCard}
- ctaButtonVariant={ctaButtonVariant}
- />
<ImpressionStats
flightId={this.props.flightId}
rows={[
@@ -461,6 +447,24 @@ export class _DSCard extends React.PureComponent {
source={this.props.type}
/>
</SafeAnchor>
+ {ctaButtonVariant === "variant-b" && (
+ <div className="cta-header">Shop Now</div>
+ )}
+ <DefaultMeta
+ source={source}
+ title={this.props.title}
+ excerpt={excerpt}
+ newSponsoredLabel={newSponsoredLabel}
+ timeToRead={timeToRead}
+ context={this.props.context}
+ context_type={this.props.context_type}
+ sponsor={this.props.sponsor}
+ sponsored_by_override={this.props.sponsored_by_override}
+ saveToPocketCard={saveToPocketCard}
+ ctaButtonVariant={ctaButtonVariant}
+ dispatch={this.props.dispatch}
+ spocMessageVariant={this.props.spocMessageVariant}
+ />
{saveToPocketCard && (
<div className="card-stp-button-hover-background">
<div className="card-stp-button-position-wrapper">
@@ -512,7 +516,7 @@ export class _DSCard extends React.PureComponent {
isRecentSave={isRecentSave}
/>
)}
- </div>
+ </article>
);
}
}
@@ -526,4 +530,4 @@ export const DSCard = connect(state => ({
DiscoveryStream: state.DiscoveryStream,
}))(_DSCard);
-export const PlaceholderDSCard = props => <DSCard placeholder={true} />;
+export const PlaceholderDSCard = () => <DSCard placeholder={true} />;
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/_DSCard.scss b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/_DSCard.scss
index 92afedff26..9004e609df 100644
--- a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/_DSCard.scss
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSCard/_DSCard.scss
@@ -118,6 +118,16 @@ $ds-card-image-gradient-solid: rgba(0, 0, 0, 100%);
transform: scale(1);
}
}
+
+ header {
+ color: var(--newtab-primary-action-background);
+ }
+ }
+
+ &:active {
+ header {
+ color: var(--newtab-primary-element-active-color);
+ }
}
.img {
@@ -131,31 +141,15 @@ $ds-card-image-gradient-solid: rgba(0, 0, 0, 100%);
}
.ds-card-link {
+ position: absolute;
height: 100%;
- display: flex;
- flex-direction: column;
+ width: 100%;
text-decoration: none;
- &:hover {
- header {
- color: var(--newtab-primary-action-background);
- }
- }
-
&:focus {
@include ds-focus;
transition: none;
-
- header {
- color: var(--newtab-primary-action-background);
- }
- }
-
- &:active {
- header {
- color: var(--newtab-primary-element-active-color);
- }
}
}
@@ -255,7 +249,7 @@ $ds-card-image-gradient-solid: rgba(0, 0, 0, 100%);
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
- column-gap: var(--space-small);
+ gap: 0 var(--space-small);
margin-top: 0;
}
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSContextFooter/DSContextFooter.jsx b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSContextFooter/DSContextFooter.jsx
index 5c7e79685e..6c0641cfc1 100644
--- a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSContextFooter/DSContextFooter.jsx
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSContextFooter/DSContextFooter.jsx
@@ -3,6 +3,7 @@
* You can obtain one at http://mozilla.org/MPL/2.0/. */
import { cardContextTypes } from "../../Card/types.js";
+import { SponsoredContentHighlight } from "../FeatureHighlight/SponsoredContentHighlight";
import { CSSTransition, TransitionGroup } from "react-transition-group";
import { FluentOrText } from "../../FluentOrText/FluentOrText.jsx";
import React from "react";
@@ -82,6 +83,8 @@ export class DSContextFooter extends React.PureComponent {
sponsored_by_override,
cta_button_variant,
source,
+ spocMessageVariant,
+ dispatch,
} = this.props;
const sponsorLabel = SponsorLabel({
@@ -119,6 +122,12 @@ export class DSContextFooter extends React.PureComponent {
return (
<div className="story-footer">
{sponsorLabel}
+ {sponsorLabel && spocMessageVariant === "variant-b" && (
+ <SponsoredContentHighlight
+ dispatch={dispatch}
+ position="inset-block-end inset-inline-start"
+ />
+ )}
{dsMessageLabel}
</div>
);
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSContextFooter/_DSContextFooter.scss b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSContextFooter/_DSContextFooter.scss
index c23bb1c661..b28b498682 100644
--- a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSContextFooter/_DSContextFooter.scss
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSContextFooter/_DSContextFooter.scss
@@ -2,7 +2,10 @@
color: var(--newtab-text-secondary-color);
inset-inline-start: 0;
margin-top: 12px;
+ display: flex;
+ gap: var(--space-large);
position: relative;
+ pointer-events: none;
.story-sponsored-label span {
display: inline-block;
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSPrivacyModal/DSPrivacyModal.jsx b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSPrivacyModal/DSPrivacyModal.jsx
index f342c9829b..b251fb0401 100644
--- a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSPrivacyModal/DSPrivacyModal.jsx
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/DSPrivacyModal/DSPrivacyModal.jsx
@@ -17,7 +17,7 @@ export class DSPrivacyModal extends React.PureComponent {
this.onManageLinkClick = this.onManageLinkClick.bind(this);
}
- onLearnLinkClick(event) {
+ onLearnLinkClick() {
this.props.dispatch(
ac.DiscoveryStreamUserEvent({
event: "CLICK_PRIVACY_INFO",
@@ -26,7 +26,7 @@ export class DSPrivacyModal extends React.PureComponent {
);
}
- onManageLinkClick(event) {
+ onManageLinkClick() {
this.props.dispatch(ac.OnlyToMain({ type: at.SETTINGS_OPEN }));
}
@@ -50,7 +50,7 @@ export class DSPrivacyModal extends React.PureComponent {
className="modal-link modal-link-privacy"
data-l10n-id="newtab-privacy-modal-link"
onClick={this.onLearnLinkClick}
- href="https://help.getpocket.com/article/1142-firefox-new-tab-recommendations-faq"
+ href="https://support.mozilla.org/kb/pocket-recommendations-firefox-new-tab"
/>
<button
className="modal-link modal-link-manage"
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/FeatureHighlight.jsx b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/FeatureHighlight.jsx
new file mode 100644
index 0000000000..792be40ba3
--- /dev/null
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/FeatureHighlight.jsx
@@ -0,0 +1,74 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import React, { useState, useCallback, useRef, useEffect } from "react";
+import { actionCreators as ac } from "common/Actions.sys.mjs";
+
+export function FeatureHighlight({
+ message,
+ icon,
+ toggle,
+ position = "top-left",
+ title,
+ ariaLabel,
+ feature = "FEATURE_HIGHLIGHT_DEFAULT",
+ dispatch = () => {},
+ windowObj = global,
+}) {
+ const [opened, setOpened] = useState(false);
+ const ref = useRef(null);
+
+ useEffect(() => {
+ const handleOutsideClick = e => {
+ if (!ref?.current?.contains(e.target)) {
+ setOpened(false);
+ }
+ };
+
+ windowObj.document.addEventListener("click", handleOutsideClick);
+ return () => {
+ windowObj.document.removeEventListener("click", handleOutsideClick);
+ };
+ }, [windowObj]);
+
+ const onToggleClick = useCallback(() => {
+ if (!opened) {
+ dispatch(
+ ac.DiscoveryStreamUserEvent({
+ event: "CLICK",
+ source: "FEATURE_HIGHLIGHT",
+ value: {
+ feature,
+ },
+ })
+ );
+ }
+ setOpened(!opened);
+ }, [dispatch, feature, opened]);
+
+ const openedClassname = opened ? `opened` : `closed`;
+ return (
+ <div ref={ref} className="feature-highlight">
+ <button
+ title={title}
+ aria-haspopup="true"
+ aria-label={ariaLabel}
+ className="toggle-button"
+ onClick={onToggleClick}
+ >
+ {toggle}
+ </button>
+ <div className={`feature-highlight-modal ${position} ${openedClassname}`}>
+ <div className="message-icon">{icon}</div>
+ <p>{message}</p>
+ <button
+ title="Dismiss"
+ aria-label="Close sponsored content more info popup"
+ className="icon icon-dismiss"
+ onClick={() => setOpened(false)}
+ ></button>
+ </div>
+ </div>
+ );
+}
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/SponsoredContentHighlight.jsx b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/SponsoredContentHighlight.jsx
new file mode 100644
index 0000000000..8fdd03be6d
--- /dev/null
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/SponsoredContentHighlight.jsx
@@ -0,0 +1,34 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import { FeatureHighlight } from "./FeatureHighlight";
+import { SafeAnchor } from "../SafeAnchor/SafeAnchor";
+import React from "react";
+
+export function SponsoredContentHighlight({ position, dispatch }) {
+ return (
+ <div className="sponsored-content-highlight">
+ <FeatureHighlight
+ position={position}
+ ariaLabel="Sponsored content supports our mission to build a better web."
+ title="Sponsored content more info"
+ feature="SPONSORED_CONTENT_INFO"
+ dispatch={dispatch}
+ message={
+ <span>
+ Sponsored content supports our mission to build a better web.{" "}
+ <SafeAnchor
+ dispatch={dispatch}
+ url="https://support.mozilla.org/kb/pocket-sponsored-stories-new-tabs"
+ >
+ Find out how
+ </SafeAnchor>
+ </span>
+ }
+ icon={<div className="sponsored-message-icon"></div>}
+ toggle={<div className="icon icon-help"></div>}
+ />
+ </div>
+ );
+}
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/_FeatureHighlight.scss b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/_FeatureHighlight.scss
new file mode 100644
index 0000000000..c0fdd52f58
--- /dev/null
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/_FeatureHighlight.scss
@@ -0,0 +1,98 @@
+.feature-highlight {
+ position: relative;
+ // This is needed because in 1 case this is positioned under a link
+ // and in an element that's not clickable.
+ pointer-events: auto;
+ z-index: 1;
+
+ .feature-highlight-modal {
+ position: absolute;
+ display: flex;
+ opacity: 0;
+ visibility: hidden;
+ cursor: default;
+ justify-content: space-between;
+ border-radius: var(--border-radius-small);
+ background: var(--newtab-background-color-secondary);
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 15%);
+ width: 298px;
+ transition: opacity 0.3s, visibility 0.3s;
+
+ .icon-dismiss {
+ flex-shrink: 0;
+ cursor: pointer;
+ background-size: $smaller-icon-size;
+ height: $smaller-icon-size;
+ width: $smaller-icon-size;
+ margin: var(--space-medium);
+ color: var(--icon-color);
+ border: none;
+ }
+
+ .message-icon {
+ margin-block: var(--space-large);
+ margin-inline: var(--space-large) var(--space-medium);
+ }
+
+ &.opened {
+ opacity: 1;
+ visibility: visible;
+ }
+
+ &::after {
+ content: '';
+ position: absolute;
+ height: 24px;
+ width: 24px;
+ background: var(--newtab-background-color-secondary);
+ box-shadow: 4px 4px 6px -2px rgba(0, 0, 0, 15%);
+ }
+
+ &.inset-block-start {
+ inset-block-end: 100%;
+ margin-bottom: var(--space-xlarge);
+
+ &::after {
+ inset-block-end: -12px;
+ transform: rotate(45deg);
+ }
+ }
+
+ &.inset-block-end {
+ inset-block-start: 100%;
+ margin-top: var(--space-xlarge);
+
+ &::after {
+ inset-block-start: -12px;
+ transform: rotate(225deg);
+ }
+ }
+
+ &.inset-inline-start {
+ inset-inline-end: calc(var(--space-xxlarge) * -1);
+
+ &::after {
+ inset-inline-end: calc(var(--space-xxlarge) - 12px);
+ }
+ }
+
+ &.inset-inline-end {
+ inset-inline-start: calc(var(--space-xxlarge) * -1);
+
+ &::after {
+ inset-inline-start: calc(var(--space-xxlarge) - 12px);
+ }
+ }
+
+ p {
+ font-size: var(--font-size-small);
+ font-weight: normal;
+ margin: var(--space-large) 0;
+ }
+ }
+
+ .toggle-button {
+ border: none;
+ padding: 0;
+ }
+}
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/_SponsoredContentHighlight.scss b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/_SponsoredContentHighlight.scss
new file mode 100644
index 0000000000..1dc024b7c0
--- /dev/null
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/FeatureHighlight/_SponsoredContentHighlight.scss
@@ -0,0 +1,33 @@
+.sponsored-content-highlight {
+ float: inline-end;
+
+ .sponsored-message-icon {
+ background-image: url('chrome://activity-stream/content/data/content/assets/sponsor-message-icon.svg');
+ background-size: 18px;
+ height: 18px;
+ width: 18px;
+ }
+
+ .icon-help {
+ cursor: pointer;
+ height: 20px;
+ width: 20px;
+ background-size: 20px;
+ color: var(--icon-color);
+ vertical-align: text-bottom;
+ }
+
+ .feature-highlight-modal {
+ &.inset-inline-start {
+ &::after {
+ margin-inline-end: 11px;
+ }
+ }
+
+ &.inset-inline-end {
+ &::after {
+ margin-inline-start: 9px;
+ }
+ }
+ }
+}
diff --git a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/SafeAnchor/SafeAnchor.jsx b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/SafeAnchor/SafeAnchor.jsx
index cfbc6fe6cb..72ec94e1fe 100644
--- a/browser/components/newtab/content-src/components/DiscoveryStreamComponents/SafeAnchor/SafeAnchor.jsx
+++ b/browser/components/newtab/content-src/components/DiscoveryStreamComponents/SafeAnchor/SafeAnchor.jsx
@@ -55,9 +55,14 @@ export class SafeAnchor extends React.PureComponent {
}
render() {
- const { url, className } = this.props;
+ const { url, className, title } = this.props;
return (
- <a href={this.safeURI(url)} className={className} onClick={this.onClick}>
+ <a
+ href={this.safeURI(url)}
+ title={title}
+ className={className}
+ onClick={this.onClick}
+ >
{this.props.children}
</a>
);
diff --git a/browser/components/newtab/content-src/components/ErrorBoundary/ErrorBoundary.jsx b/browser/components/newtab/content-src/components/ErrorBoundary/ErrorBoundary.jsx
index 1834a0a521..6bf1614ce7 100644
--- a/browser/components/newtab/content-src/components/ErrorBoundary/ErrorBoundary.jsx
+++ b/browser/components/newtab/content-src/components/ErrorBoundary/ErrorBoundary.jsx
@@ -52,7 +52,7 @@ export class ErrorBoundary extends React.PureComponent {
this.state = { hasError: false };
}
- componentDidCatch(error, info) {
+ componentDidCatch() {
this.setState({ hasError: true });
}
diff --git a/browser/components/newtab/content-src/components/TopSites/TopSite.jsx b/browser/components/newtab/content-src/components/TopSites/TopSite.jsx
index b7f0038558..c0932104af 100644
--- a/browser/components/newtab/content-src/components/TopSites/TopSite.jsx
+++ b/browser/components/newtab/content-src/components/TopSites/TopSite.jsx
@@ -159,7 +159,10 @@ export class TopSiteLink extends React.PureComponent {
// If we have tabbed to a search shortcut top site, and we click 'enter',
// we should execute the onClick function. This needs to be added because
// search top sites are anchor tags without an href. See bug 1483135
- if (this.props.link.searchTopSite && event.key === "Enter") {
+ if (
+ event.key === "Enter" &&
+ (this.props.link.searchTopSite || this.props.isAddButton)
+ ) {
this.props.onClick(event);
}
}
@@ -250,8 +253,15 @@ export class TopSiteLink extends React.PureComponent {
}
render() {
- const { children, className, isDraggable, link, onClick, title } =
- this.props;
+ const {
+ children,
+ className,
+ isDraggable,
+ link,
+ onClick,
+ title,
+ isAddButton,
+ } = this.props;
const topSiteOuterClassName = `top-site-outer${
className ? ` ${className}` : ""
}${link.isDragged ? " dragged" : ""}${
@@ -266,6 +276,10 @@ export class TopSiteLink extends React.PureComponent {
selectedColor,
} = this.calculateStyle();
+ let addButtonl10n = {
+ "data-l10n-id": "newtab-topsites-add-shortcut-label",
+ };
+
let draggableProps = {};
if (isDraggable) {
draggableProps = {
@@ -380,14 +394,14 @@ export class TopSiteLink extends React.PureComponent {
: ""
}`}
>
- <span dir="auto">
+ <span dir="auto" {...(isAddButton && { ...addButtonl10n })}>
{link.isPinned && <div className="icon icon-pin-small" />}
{title || <br />}
- <span
- className="sponsored-label"
- data-l10n-id="newtab-topsite-sponsored"
- />
</span>
+ <span
+ className="sponsored-label"
+ data-l10n-id="newtab-topsite-sponsored"
+ />
</div>
</a>
{children}
@@ -635,19 +649,23 @@ export class TopSitePlaceholder extends React.PureComponent {
}
render() {
+ let addButtonProps = {};
+ if (this.props.isAddButton) {
+ addButtonProps = {
+ title: "newtab-topsites-add-shortcut-label",
+ onClick: this.onEditButtonClick,
+ };
+ }
+
return (
<TopSiteLink
{...this.props}
- className={`placeholder ${this.props.className || ""}`}
+ {...(this.props.isAddButton ? { ...addButtonProps } : {})}
+ className={`placeholder ${this.props.className || ""} ${
+ this.props.isAddButton ? "add-button" : ""
+ }`}
isDraggable={false}
- >
- <button
- aria-haspopup="dialog"
- className="context-menu-button edit-button icon"
- data-l10n-id="newtab-menu-topsites-placeholder-tooltip"
- onClick={this.onEditButtonClick}
- />
- </TopSiteLink>
+ />
);
}
}
@@ -758,6 +776,17 @@ export class _TopSiteList extends React.PureComponent {
// Make a copy of the sites to truncate or extend to desired length
let topSites = this.props.TopSites.rows.slice();
topSites.length = this.props.TopSitesRows * TOP_SITES_MAX_SITES_PER_ROW;
+ // if topSites do not fill an entire row add 'Add shortcut' button to array of topSites
+ // (there should only be one of these)
+ let firstPlaceholder = topSites.findIndex(Object.is.bind(null, undefined));
+ // make sure placeholder exists and there already isnt a add button
+ if (firstPlaceholder && !topSites.includes(site => site.isAddButton)) {
+ topSites[firstPlaceholder] = { isAddButton: true };
+ } else if (topSites.includes(site => site.isAddButton)) {
+ topSites.push(
+ topSites.splice(topSites.indexOf({ isAddButton: true }), 1)[0]
+ );
+ }
return topSites;
}
@@ -855,8 +884,20 @@ export class _TopSiteList extends React.PureComponent {
let topSiteLink;
// Use a placeholder if the link is empty or it's rendering a sponsored
// tile for the about:home startup cache.
- if (!link || (props.App.isForStartupCache && isSponsored(link))) {
- topSiteLink = <TopSitePlaceholder {...slotProps} {...commonProps} />;
+ if (
+ !link ||
+ (props.App.isForStartupCache && isSponsored(link)) ||
+ topSites[i]?.isAddButton
+ ) {
+ if (link) {
+ topSiteLink = (
+ <TopSitePlaceholder
+ {...slotProps}
+ {...commonProps}
+ isAddButton={topSites[i] && topSites[i].isAddButton}
+ />
+ );
+ }
} else {
topSiteLink = (
<TopSite
diff --git a/browser/components/newtab/content-src/components/TopSites/TopSites.jsx b/browser/components/newtab/content-src/components/TopSites/TopSites.jsx
index c69156c514..ba7676fd10 100644
--- a/browser/components/newtab/content-src/components/TopSites/TopSites.jsx
+++ b/browser/components/newtab/content-src/components/TopSites/TopSites.jsx
@@ -206,7 +206,7 @@ export class _TopSites extends React.PureComponent {
}
}
-export const TopSites = connect((state, props) => ({
+export const TopSites = connect(state => ({
TopSites: state.TopSites,
Prefs: state.Prefs,
TopSitesRows: state.Prefs.values.topSitesRows,
diff --git a/browser/components/newtab/content-src/components/TopSites/_TopSites.scss b/browser/components/newtab/content-src/components/TopSites/_TopSites.scss
index ff2e2df826..4e4019513d 100644
--- a/browser/components/newtab/content-src/components/TopSites/_TopSites.scss
+++ b/browser/components/newtab/content-src/components/TopSites/_TopSites.scss
@@ -246,7 +246,24 @@ $letter-fallback-color: $white;
&.placeholder {
.tile {
- box-shadow: $inner-box-shadow;
+ box-shadow: $shadow-card;
+ cursor: default;
+ }
+
+ &.add-button {
+ .tile {
+ background-color: var(--button-background-color);
+
+ .icon-wrapper {
+ background-image: url('chrome://global/skin/icons/plus-20.svg');
+ background-size: cover;
+ background-repeat: no-repeat;
+ height: 20px;
+ width: 20px;
+ fill: var(--icon-color);
+ -moz-context-properties: fill;
+ }
+ }
}
}
diff --git a/browser/components/newtab/content-src/lib/init-store.js b/browser/components/newtab/content-src/lib/init-store.js
index 20fcedc6c0..f0ab2db86a 100644
--- a/browser/components/newtab/content-src/lib/init-store.js
+++ b/browser/components/newtab/content-src/lib/init-store.js
@@ -44,7 +44,7 @@ function mergeStateReducer(mainReducer) {
/**
* messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary
*/
-const messageMiddleware = store => next => action => {
+const messageMiddleware = () => next => action => {
const skipLocal = action.meta && action.meta.skipLocal;
if (au.isSendToMain(action)) {
RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);
diff --git a/browser/components/newtab/content-src/lib/link-menu-options.js b/browser/components/newtab/content-src/lib/link-menu-options.js
index caac738170..12e47259c1 100644
--- a/browser/components/newtab/content-src/lib/link-menu-options.js
+++ b/browser/components/newtab/content-src/lib/link-menu-options.js
@@ -25,7 +25,7 @@ const _OpenInPrivateWindow = site => ({
export const LinkMenuOptions = {
Separator: () => ({ type: "separator" }),
EmptyItem: () => ({ type: "empty" }),
- ShowPrivacyInfo: site => ({
+ ShowPrivacyInfo: () => ({
id: "newtab-menu-show-privacy-info",
icon: "info",
action: {
diff --git a/browser/components/newtab/content-src/lib/selectLayoutRender.js b/browser/components/newtab/content-src/lib/selectLayoutRender.js
index aa3eb927d2..8ef4dd428f 100644
--- a/browser/components/newtab/content-src/lib/selectLayoutRender.js
+++ b/browser/components/newtab/content-src/lib/selectLayoutRender.js
@@ -2,7 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
-export const selectLayoutRender = ({ state = {}, prefs = {}, locale = "" }) => {
+export const selectLayoutRender = ({ state = {}, prefs = {} }) => {
const { layout, feeds, spocs } = state;
let spocIndexPlacementMap = {};
diff --git a/browser/components/newtab/content-src/styles/_activity-stream.scss b/browser/components/newtab/content-src/styles/_activity-stream.scss
index 8bd3a7a397..88ed530b6a 100644
--- a/browser/components/newtab/content-src/styles/_activity-stream.scss
+++ b/browser/components/newtab/content-src/styles/_activity-stream.scss
@@ -166,6 +166,8 @@ input {
@import '../components/DiscoveryStreamComponents/DSPrivacyModal/DSPrivacyModal';
@import '../components/DiscoveryStreamComponents/PrivacyLink/PrivacyLink';
@import '../components/DiscoveryStreamComponents/TopicsWidget/TopicsWidget';
+@import '../components/DiscoveryStreamComponents/FeatureHighlight/FeatureHighlight';
+@import '../components/DiscoveryStreamComponents/FeatureHighlight/SponsoredContentHighlight';
// AS Router
@import '../../../asrouter/content-src/components/Button/Button';
diff --git a/browser/components/newtab/content-src/styles/_icons.scss b/browser/components/newtab/content-src/styles/_icons.scss
index 4074f0a6a6..8be97ad9ae 100644
--- a/browser/components/newtab/content-src/styles/_icons.scss
+++ b/browser/components/newtab/content-src/styles/_icons.scss
@@ -70,6 +70,10 @@
background-image: url('chrome://global/skin/icons/info.svg');
}
+ &.icon-help {
+ background-image: url('chrome://global/skin/icons/help.svg');
+ }
+
&.icon-new-window {
@include flip-icon;
diff --git a/browser/components/newtab/css/activity-stream-linux.css b/browser/components/newtab/css/activity-stream-linux.css
index 336c7573ab..8773159737 100644
--- a/browser/components/newtab/css/activity-stream-linux.css
+++ b/browser/components/newtab/css/activity-stream-linux.css
@@ -142,6 +142,9 @@ input {
.icon.icon-info {
background-image: url("chrome://global/skin/icons/info.svg");
}
+.icon.icon-help {
+ background-image: url("chrome://global/skin/icons/help.svg");
+}
.icon.icon-new-window {
background-image: url("chrome://activity-stream/content/data/content/assets/glyph-newWindow-16.svg");
}
@@ -722,7 +725,20 @@ main section {
inset-inline-end: -6px;
}
.top-site-outer.placeholder .tile {
- box-shadow: 0 0 0 1px var(--newtab-inner-box-shadow-color);
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
+ cursor: default;
+}
+.top-site-outer.placeholder.add-button .tile {
+ background-color: var(--button-background-color);
+}
+.top-site-outer.placeholder.add-button .tile .icon-wrapper {
+ background-image: url("chrome://global/skin/icons/plus-20.svg");
+ background-size: cover;
+ background-repeat: no-repeat;
+ height: 20px;
+ width: 20px;
+ fill: var(--icon-color);
+ -moz-context-properties: fill;
}
.top-site-outer .title {
color: var(--newtab-text-primary-color);
@@ -1699,12 +1715,21 @@ main section {
appearance: none;
background-color: var(--newtab-element-secondary-color);
}
+.home-section .section .sponsored-checkbox:hover {
+ background-color: var(--newtab-element-secondary-hover-color);
+}
.home-section .section .sponsored-checkbox:checked {
-moz-context-properties: fill;
fill: var(--newtab-primary-element-text-color);
background: url("chrome://global/skin/icons/check.svg") center no-repeat;
background-color: var(--newtab-primary-action-background);
}
+.home-section .section .sponsored-checkbox:checked:hover {
+ background-color: var(--newtab-primary-element-hover-color);
+}
+.home-section .section .sponsored-checkbox:checked:active {
+ background-color: var(--newtab-primary-element-active-color);
+}
@media (forced-colors: active) {
.home-section .section .sponsored-checkbox:checked {
fill: #000;
@@ -1731,6 +1756,9 @@ main section {
background-origin: content-box;
background-color: var(--newtab-background-color-secondary);
}
+.home-section .section .selector:hover {
+ background-color: var(--newtab-element-secondary-hover-color);
+}
.home-section .section .selector:dir(rtl) {
background-position-x: left;
}
@@ -1747,6 +1775,22 @@ main section {
.home-section .section .more-info-top-wrapper .check-wrapper {
margin-top: 10px;
}
+.home-section .sponsored-content-info {
+ display: flex;
+ gap: var(--space-small);
+ font-size: var(--font-size-small);
+ border-radius: var(--border-radius-medium);
+ background-color: var(--newtab-element-secondary-color);
+ padding: var(--space-small) var(--space-large);
+}
+.home-section .sponsored-content-info .icon-help {
+ flex-shrink: 0;
+ color: var(--color-accent-primary);
+ height: 20px;
+}
+.home-section .sponsored-content-info a {
+ color: var(--newtab-primary-action-background);
+}
.home-section .divider {
border-top: 1px var(--newtab-border-color) solid;
margin: 0 -16px;
@@ -3518,6 +3562,12 @@ main section {
opacity: 1;
transform: scale(1);
}
+.ds-card.active header, .ds-card:focus-within header, .ds-card:hover header {
+ color: var(--newtab-primary-action-background);
+}
+.ds-card:active header {
+ color: var(--newtab-primary-element-active-color);
+}
.ds-card .img {
height: 0;
padding-top: 50%;
@@ -3527,26 +3577,17 @@ main section {
box-shadow: inset 0 0 0 0.5px rgba(0, 0, 0, 0.15);
}
.ds-card .ds-card-link {
+ position: absolute;
height: 100%;
- display: flex;
- flex-direction: column;
+ width: 100%;
text-decoration: none;
}
-.ds-card .ds-card-link:hover header {
- color: var(--newtab-primary-action-background);
-}
.ds-card .ds-card-link:focus {
border: 0;
outline: 0;
box-shadow: 0 0 0 3px var(--newtab-primary-action-background-dimmed), 0 0 0 1px var(--newtab-primary-action-background);
transition: none;
}
-.ds-card .ds-card-link:focus header {
- color: var(--newtab-primary-action-background);
-}
-.ds-card .ds-card-link:active header {
- color: var(--newtab-primary-element-active-color);
-}
.ds-card .meta {
display: flex;
flex-direction: column;
@@ -3623,7 +3664,7 @@ main section {
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
- column-gap: var(--space-small);
+ gap: 0 var(--space-small);
margin-top: 0;
}
.ds-card.ds-card-cta-button.variant-a .story-cta-button, .ds-card.ds-card-cta-button.variant-b .story-cta-button {
@@ -3667,7 +3708,10 @@ main section {
color: var(--newtab-text-secondary-color);
inset-inline-start: 0;
margin-top: 12px;
+ display: flex;
+ gap: var(--space-large);
position: relative;
+ pointer-events: none;
}
.story-footer .story-sponsored-label span {
display: inline-block;
@@ -4203,6 +4247,112 @@ main section {
transition: box-shadow 150ms;
}
+.feature-highlight {
+ position: relative;
+ pointer-events: auto;
+ z-index: 1;
+}
+.feature-highlight .feature-highlight-modal {
+ position: absolute;
+ display: flex;
+ opacity: 0;
+ visibility: hidden;
+ cursor: default;
+ justify-content: space-between;
+ border-radius: var(--border-radius-small);
+ background: var(--newtab-background-color-secondary);
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
+ width: 298px;
+ transition: opacity 0.3s, visibility 0.3s;
+}
+.feature-highlight .feature-highlight-modal .icon-dismiss {
+ flex-shrink: 0;
+ cursor: pointer;
+ background-size: 12px;
+ height: 12px;
+ width: 12px;
+ margin: var(--space-medium);
+ color: var(--icon-color);
+ border: none;
+}
+.feature-highlight .feature-highlight-modal .message-icon {
+ margin-block: var(--space-large);
+ margin-inline: var(--space-large) var(--space-medium);
+}
+.feature-highlight .feature-highlight-modal.opened {
+ opacity: 1;
+ visibility: visible;
+}
+.feature-highlight .feature-highlight-modal::after {
+ content: "";
+ position: absolute;
+ height: 24px;
+ width: 24px;
+ background: var(--newtab-background-color-secondary);
+ box-shadow: 4px 4px 6px -2px rgba(0, 0, 0, 0.15);
+}
+.feature-highlight .feature-highlight-modal.inset-block-start {
+ inset-block-end: 100%;
+ margin-bottom: var(--space-xlarge);
+}
+.feature-highlight .feature-highlight-modal.inset-block-start::after {
+ inset-block-end: -12px;
+ transform: rotate(45deg);
+}
+.feature-highlight .feature-highlight-modal.inset-block-end {
+ inset-block-start: 100%;
+ margin-top: var(--space-xlarge);
+}
+.feature-highlight .feature-highlight-modal.inset-block-end::after {
+ inset-block-start: -12px;
+ transform: rotate(225deg);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-start {
+ inset-inline-end: calc(var(--space-xxlarge) * -1);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-start::after {
+ inset-inline-end: calc(var(--space-xxlarge) - 12px);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-end {
+ inset-inline-start: calc(var(--space-xxlarge) * -1);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-end::after {
+ inset-inline-start: calc(var(--space-xxlarge) - 12px);
+}
+.feature-highlight .feature-highlight-modal p {
+ font-size: var(--font-size-small);
+ font-weight: normal;
+ margin: var(--space-large) 0;
+}
+.feature-highlight .toggle-button {
+ border: none;
+ padding: 0;
+}
+
+.sponsored-content-highlight {
+ float: inline-end;
+}
+.sponsored-content-highlight .sponsored-message-icon {
+ background-image: url("chrome://activity-stream/content/data/content/assets/sponsor-message-icon.svg");
+ background-size: 18px;
+ height: 18px;
+ width: 18px;
+}
+.sponsored-content-highlight .icon-help {
+ cursor: pointer;
+ height: 20px;
+ width: 20px;
+ background-size: 20px;
+ color: var(--icon-color);
+ vertical-align: text-bottom;
+}
+.sponsored-content-highlight .feature-highlight-modal.inset-inline-start::after {
+ margin-inline-end: 11px;
+}
+.sponsored-content-highlight .feature-highlight-modal.inset-inline-end::after {
+ margin-inline-start: 9px;
+}
+
.ASRouterButton {
font-weight: 600;
font-size: 14px;
diff --git a/browser/components/newtab/css/activity-stream-mac.css b/browser/components/newtab/css/activity-stream-mac.css
index 01eff46415..87b942818a 100644
--- a/browser/components/newtab/css/activity-stream-mac.css
+++ b/browser/components/newtab/css/activity-stream-mac.css
@@ -146,6 +146,9 @@ input {
.icon.icon-info {
background-image: url("chrome://global/skin/icons/info.svg");
}
+.icon.icon-help {
+ background-image: url("chrome://global/skin/icons/help.svg");
+}
.icon.icon-new-window {
background-image: url("chrome://activity-stream/content/data/content/assets/glyph-newWindow-16.svg");
}
@@ -726,7 +729,20 @@ main section {
inset-inline-end: -6px;
}
.top-site-outer.placeholder .tile {
- box-shadow: 0 0 0 1px var(--newtab-inner-box-shadow-color);
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
+ cursor: default;
+}
+.top-site-outer.placeholder.add-button .tile {
+ background-color: var(--button-background-color);
+}
+.top-site-outer.placeholder.add-button .tile .icon-wrapper {
+ background-image: url("chrome://global/skin/icons/plus-20.svg");
+ background-size: cover;
+ background-repeat: no-repeat;
+ height: 20px;
+ width: 20px;
+ fill: var(--icon-color);
+ -moz-context-properties: fill;
}
.top-site-outer .title {
color: var(--newtab-text-primary-color);
@@ -1703,12 +1719,21 @@ main section {
appearance: none;
background-color: var(--newtab-element-secondary-color);
}
+.home-section .section .sponsored-checkbox:hover {
+ background-color: var(--newtab-element-secondary-hover-color);
+}
.home-section .section .sponsored-checkbox:checked {
-moz-context-properties: fill;
fill: var(--newtab-primary-element-text-color);
background: url("chrome://global/skin/icons/check.svg") center no-repeat;
background-color: var(--newtab-primary-action-background);
}
+.home-section .section .sponsored-checkbox:checked:hover {
+ background-color: var(--newtab-primary-element-hover-color);
+}
+.home-section .section .sponsored-checkbox:checked:active {
+ background-color: var(--newtab-primary-element-active-color);
+}
@media (forced-colors: active) {
.home-section .section .sponsored-checkbox:checked {
fill: #000;
@@ -1735,6 +1760,9 @@ main section {
background-origin: content-box;
background-color: var(--newtab-background-color-secondary);
}
+.home-section .section .selector:hover {
+ background-color: var(--newtab-element-secondary-hover-color);
+}
.home-section .section .selector:dir(rtl) {
background-position-x: left;
}
@@ -1751,6 +1779,22 @@ main section {
.home-section .section .more-info-top-wrapper .check-wrapper {
margin-top: 10px;
}
+.home-section .sponsored-content-info {
+ display: flex;
+ gap: var(--space-small);
+ font-size: var(--font-size-small);
+ border-radius: var(--border-radius-medium);
+ background-color: var(--newtab-element-secondary-color);
+ padding: var(--space-small) var(--space-large);
+}
+.home-section .sponsored-content-info .icon-help {
+ flex-shrink: 0;
+ color: var(--color-accent-primary);
+ height: 20px;
+}
+.home-section .sponsored-content-info a {
+ color: var(--newtab-primary-action-background);
+}
.home-section .divider {
border-top: 1px var(--newtab-border-color) solid;
margin: 0 -16px;
@@ -3522,6 +3566,12 @@ main section {
opacity: 1;
transform: scale(1);
}
+.ds-card.active header, .ds-card:focus-within header, .ds-card:hover header {
+ color: var(--newtab-primary-action-background);
+}
+.ds-card:active header {
+ color: var(--newtab-primary-element-active-color);
+}
.ds-card .img {
height: 0;
padding-top: 50%;
@@ -3531,26 +3581,17 @@ main section {
box-shadow: inset 0 0 0 0.5px rgba(0, 0, 0, 0.15);
}
.ds-card .ds-card-link {
+ position: absolute;
height: 100%;
- display: flex;
- flex-direction: column;
+ width: 100%;
text-decoration: none;
}
-.ds-card .ds-card-link:hover header {
- color: var(--newtab-primary-action-background);
-}
.ds-card .ds-card-link:focus {
border: 0;
outline: 0;
box-shadow: 0 0 0 3px var(--newtab-primary-action-background-dimmed), 0 0 0 1px var(--newtab-primary-action-background);
transition: none;
}
-.ds-card .ds-card-link:focus header {
- color: var(--newtab-primary-action-background);
-}
-.ds-card .ds-card-link:active header {
- color: var(--newtab-primary-element-active-color);
-}
.ds-card .meta {
display: flex;
flex-direction: column;
@@ -3627,7 +3668,7 @@ main section {
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
- column-gap: var(--space-small);
+ gap: 0 var(--space-small);
margin-top: 0;
}
.ds-card.ds-card-cta-button.variant-a .story-cta-button, .ds-card.ds-card-cta-button.variant-b .story-cta-button {
@@ -3671,7 +3712,10 @@ main section {
color: var(--newtab-text-secondary-color);
inset-inline-start: 0;
margin-top: 12px;
+ display: flex;
+ gap: var(--space-large);
position: relative;
+ pointer-events: none;
}
.story-footer .story-sponsored-label span {
display: inline-block;
@@ -4207,6 +4251,112 @@ main section {
transition: box-shadow 150ms;
}
+.feature-highlight {
+ position: relative;
+ pointer-events: auto;
+ z-index: 1;
+}
+.feature-highlight .feature-highlight-modal {
+ position: absolute;
+ display: flex;
+ opacity: 0;
+ visibility: hidden;
+ cursor: default;
+ justify-content: space-between;
+ border-radius: var(--border-radius-small);
+ background: var(--newtab-background-color-secondary);
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
+ width: 298px;
+ transition: opacity 0.3s, visibility 0.3s;
+}
+.feature-highlight .feature-highlight-modal .icon-dismiss {
+ flex-shrink: 0;
+ cursor: pointer;
+ background-size: 12px;
+ height: 12px;
+ width: 12px;
+ margin: var(--space-medium);
+ color: var(--icon-color);
+ border: none;
+}
+.feature-highlight .feature-highlight-modal .message-icon {
+ margin-block: var(--space-large);
+ margin-inline: var(--space-large) var(--space-medium);
+}
+.feature-highlight .feature-highlight-modal.opened {
+ opacity: 1;
+ visibility: visible;
+}
+.feature-highlight .feature-highlight-modal::after {
+ content: "";
+ position: absolute;
+ height: 24px;
+ width: 24px;
+ background: var(--newtab-background-color-secondary);
+ box-shadow: 4px 4px 6px -2px rgba(0, 0, 0, 0.15);
+}
+.feature-highlight .feature-highlight-modal.inset-block-start {
+ inset-block-end: 100%;
+ margin-bottom: var(--space-xlarge);
+}
+.feature-highlight .feature-highlight-modal.inset-block-start::after {
+ inset-block-end: -12px;
+ transform: rotate(45deg);
+}
+.feature-highlight .feature-highlight-modal.inset-block-end {
+ inset-block-start: 100%;
+ margin-top: var(--space-xlarge);
+}
+.feature-highlight .feature-highlight-modal.inset-block-end::after {
+ inset-block-start: -12px;
+ transform: rotate(225deg);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-start {
+ inset-inline-end: calc(var(--space-xxlarge) * -1);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-start::after {
+ inset-inline-end: calc(var(--space-xxlarge) - 12px);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-end {
+ inset-inline-start: calc(var(--space-xxlarge) * -1);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-end::after {
+ inset-inline-start: calc(var(--space-xxlarge) - 12px);
+}
+.feature-highlight .feature-highlight-modal p {
+ font-size: var(--font-size-small);
+ font-weight: normal;
+ margin: var(--space-large) 0;
+}
+.feature-highlight .toggle-button {
+ border: none;
+ padding: 0;
+}
+
+.sponsored-content-highlight {
+ float: inline-end;
+}
+.sponsored-content-highlight .sponsored-message-icon {
+ background-image: url("chrome://activity-stream/content/data/content/assets/sponsor-message-icon.svg");
+ background-size: 18px;
+ height: 18px;
+ width: 18px;
+}
+.sponsored-content-highlight .icon-help {
+ cursor: pointer;
+ height: 20px;
+ width: 20px;
+ background-size: 20px;
+ color: var(--icon-color);
+ vertical-align: text-bottom;
+}
+.sponsored-content-highlight .feature-highlight-modal.inset-inline-start::after {
+ margin-inline-end: 11px;
+}
+.sponsored-content-highlight .feature-highlight-modal.inset-inline-end::after {
+ margin-inline-start: 9px;
+}
+
.ASRouterButton {
font-weight: 600;
font-size: 14px;
diff --git a/browser/components/newtab/css/activity-stream-windows.css b/browser/components/newtab/css/activity-stream-windows.css
index 69a2459268..25370fdf19 100644
--- a/browser/components/newtab/css/activity-stream-windows.css
+++ b/browser/components/newtab/css/activity-stream-windows.css
@@ -142,6 +142,9 @@ input {
.icon.icon-info {
background-image: url("chrome://global/skin/icons/info.svg");
}
+.icon.icon-help {
+ background-image: url("chrome://global/skin/icons/help.svg");
+}
.icon.icon-new-window {
background-image: url("chrome://activity-stream/content/data/content/assets/glyph-newWindow-16.svg");
}
@@ -722,7 +725,20 @@ main section {
inset-inline-end: -6px;
}
.top-site-outer.placeholder .tile {
- box-shadow: 0 0 0 1px var(--newtab-inner-box-shadow-color);
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
+ cursor: default;
+}
+.top-site-outer.placeholder.add-button .tile {
+ background-color: var(--button-background-color);
+}
+.top-site-outer.placeholder.add-button .tile .icon-wrapper {
+ background-image: url("chrome://global/skin/icons/plus-20.svg");
+ background-size: cover;
+ background-repeat: no-repeat;
+ height: 20px;
+ width: 20px;
+ fill: var(--icon-color);
+ -moz-context-properties: fill;
}
.top-site-outer .title {
color: var(--newtab-text-primary-color);
@@ -1699,12 +1715,21 @@ main section {
appearance: none;
background-color: var(--newtab-element-secondary-color);
}
+.home-section .section .sponsored-checkbox:hover {
+ background-color: var(--newtab-element-secondary-hover-color);
+}
.home-section .section .sponsored-checkbox:checked {
-moz-context-properties: fill;
fill: var(--newtab-primary-element-text-color);
background: url("chrome://global/skin/icons/check.svg") center no-repeat;
background-color: var(--newtab-primary-action-background);
}
+.home-section .section .sponsored-checkbox:checked:hover {
+ background-color: var(--newtab-primary-element-hover-color);
+}
+.home-section .section .sponsored-checkbox:checked:active {
+ background-color: var(--newtab-primary-element-active-color);
+}
@media (forced-colors: active) {
.home-section .section .sponsored-checkbox:checked {
fill: #000;
@@ -1731,6 +1756,9 @@ main section {
background-origin: content-box;
background-color: var(--newtab-background-color-secondary);
}
+.home-section .section .selector:hover {
+ background-color: var(--newtab-element-secondary-hover-color);
+}
.home-section .section .selector:dir(rtl) {
background-position-x: left;
}
@@ -1747,6 +1775,22 @@ main section {
.home-section .section .more-info-top-wrapper .check-wrapper {
margin-top: 10px;
}
+.home-section .sponsored-content-info {
+ display: flex;
+ gap: var(--space-small);
+ font-size: var(--font-size-small);
+ border-radius: var(--border-radius-medium);
+ background-color: var(--newtab-element-secondary-color);
+ padding: var(--space-small) var(--space-large);
+}
+.home-section .sponsored-content-info .icon-help {
+ flex-shrink: 0;
+ color: var(--color-accent-primary);
+ height: 20px;
+}
+.home-section .sponsored-content-info a {
+ color: var(--newtab-primary-action-background);
+}
.home-section .divider {
border-top: 1px var(--newtab-border-color) solid;
margin: 0 -16px;
@@ -3518,6 +3562,12 @@ main section {
opacity: 1;
transform: scale(1);
}
+.ds-card.active header, .ds-card:focus-within header, .ds-card:hover header {
+ color: var(--newtab-primary-action-background);
+}
+.ds-card:active header {
+ color: var(--newtab-primary-element-active-color);
+}
.ds-card .img {
height: 0;
padding-top: 50%;
@@ -3527,26 +3577,17 @@ main section {
box-shadow: inset 0 0 0 0.5px rgba(0, 0, 0, 0.15);
}
.ds-card .ds-card-link {
+ position: absolute;
height: 100%;
- display: flex;
- flex-direction: column;
+ width: 100%;
text-decoration: none;
}
-.ds-card .ds-card-link:hover header {
- color: var(--newtab-primary-action-background);
-}
.ds-card .ds-card-link:focus {
border: 0;
outline: 0;
box-shadow: 0 0 0 3px var(--newtab-primary-action-background-dimmed), 0 0 0 1px var(--newtab-primary-action-background);
transition: none;
}
-.ds-card .ds-card-link:focus header {
- color: var(--newtab-primary-action-background);
-}
-.ds-card .ds-card-link:active header {
- color: var(--newtab-primary-element-active-color);
-}
.ds-card .meta {
display: flex;
flex-direction: column;
@@ -3623,7 +3664,7 @@ main section {
flex-wrap: wrap;
justify-content: space-between;
align-items: center;
- column-gap: var(--space-small);
+ gap: 0 var(--space-small);
margin-top: 0;
}
.ds-card.ds-card-cta-button.variant-a .story-cta-button, .ds-card.ds-card-cta-button.variant-b .story-cta-button {
@@ -3667,7 +3708,10 @@ main section {
color: var(--newtab-text-secondary-color);
inset-inline-start: 0;
margin-top: 12px;
+ display: flex;
+ gap: var(--space-large);
position: relative;
+ pointer-events: none;
}
.story-footer .story-sponsored-label span {
display: inline-block;
@@ -4203,6 +4247,112 @@ main section {
transition: box-shadow 150ms;
}
+.feature-highlight {
+ position: relative;
+ pointer-events: auto;
+ z-index: 1;
+}
+.feature-highlight .feature-highlight-modal {
+ position: absolute;
+ display: flex;
+ opacity: 0;
+ visibility: hidden;
+ cursor: default;
+ justify-content: space-between;
+ border-radius: var(--border-radius-small);
+ background: var(--newtab-background-color-secondary);
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.15);
+ width: 298px;
+ transition: opacity 0.3s, visibility 0.3s;
+}
+.feature-highlight .feature-highlight-modal .icon-dismiss {
+ flex-shrink: 0;
+ cursor: pointer;
+ background-size: 12px;
+ height: 12px;
+ width: 12px;
+ margin: var(--space-medium);
+ color: var(--icon-color);
+ border: none;
+}
+.feature-highlight .feature-highlight-modal .message-icon {
+ margin-block: var(--space-large);
+ margin-inline: var(--space-large) var(--space-medium);
+}
+.feature-highlight .feature-highlight-modal.opened {
+ opacity: 1;
+ visibility: visible;
+}
+.feature-highlight .feature-highlight-modal::after {
+ content: "";
+ position: absolute;
+ height: 24px;
+ width: 24px;
+ background: var(--newtab-background-color-secondary);
+ box-shadow: 4px 4px 6px -2px rgba(0, 0, 0, 0.15);
+}
+.feature-highlight .feature-highlight-modal.inset-block-start {
+ inset-block-end: 100%;
+ margin-bottom: var(--space-xlarge);
+}
+.feature-highlight .feature-highlight-modal.inset-block-start::after {
+ inset-block-end: -12px;
+ transform: rotate(45deg);
+}
+.feature-highlight .feature-highlight-modal.inset-block-end {
+ inset-block-start: 100%;
+ margin-top: var(--space-xlarge);
+}
+.feature-highlight .feature-highlight-modal.inset-block-end::after {
+ inset-block-start: -12px;
+ transform: rotate(225deg);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-start {
+ inset-inline-end: calc(var(--space-xxlarge) * -1);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-start::after {
+ inset-inline-end: calc(var(--space-xxlarge) - 12px);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-end {
+ inset-inline-start: calc(var(--space-xxlarge) * -1);
+}
+.feature-highlight .feature-highlight-modal.inset-inline-end::after {
+ inset-inline-start: calc(var(--space-xxlarge) - 12px);
+}
+.feature-highlight .feature-highlight-modal p {
+ font-size: var(--font-size-small);
+ font-weight: normal;
+ margin: var(--space-large) 0;
+}
+.feature-highlight .toggle-button {
+ border: none;
+ padding: 0;
+}
+
+.sponsored-content-highlight {
+ float: inline-end;
+}
+.sponsored-content-highlight .sponsored-message-icon {
+ background-image: url("chrome://activity-stream/content/data/content/assets/sponsor-message-icon.svg");
+ background-size: 18px;
+ height: 18px;
+ width: 18px;
+}
+.sponsored-content-highlight .icon-help {
+ cursor: pointer;
+ height: 20px;
+ width: 20px;
+ background-size: 20px;
+ color: var(--icon-color);
+ vertical-align: text-bottom;
+}
+.sponsored-content-highlight .feature-highlight-modal.inset-inline-start::after {
+ margin-inline-end: 11px;
+}
+.sponsored-content-highlight .feature-highlight-modal.inset-inline-end::after {
+ margin-inline-start: 9px;
+}
+
.ASRouterButton {
font-weight: 600;
font-size: 14px;
diff --git a/browser/components/newtab/data/content/activity-stream.bundle.js b/browser/components/newtab/data/content/activity-stream.bundle.js
index 14691a95f4..8904ba87d1 100644
--- a/browser/components/newtab/data/content/activity-stream.bundle.js
+++ b/browser/components/newtab/data/content/activity-stream.bundle.js
@@ -682,7 +682,7 @@ class DiscoveryStreamAdminUI extends (external_React_default()).PureComponent {
}
}));
}
- restorePrefDefaults(event) {
+ restorePrefDefaults() {
this.props.dispatch(actionCreators.OnlyToMain({
type: actionTypes.DISCOVERY_STREAM_CONFIG_RESET_DEFAULTS
}));
@@ -1423,7 +1423,7 @@ const LinkMenuOptions = {
EmptyItem: () => ({
type: "empty"
}),
- ShowPrivacyInfo: site => ({
+ ShowPrivacyInfo: () => ({
id: "newtab-menu-show-privacy-info",
icon: "info",
action: {
@@ -1820,7 +1820,7 @@ class ContextMenuButton extends (external_React_default()).PureComponent {
this.onKeyDown = this.onKeyDown.bind(this);
this.onUpdate = this.onUpdate.bind(this);
}
- openContextMenu(isKeyBoard, event) {
+ openContextMenu(isKeyBoard) {
if (this.props.onUpdate) {
this.props.onUpdate(true);
}
@@ -2213,10 +2213,12 @@ class SafeAnchor extends (external_React_default()).PureComponent {
render() {
const {
url,
- className
+ className,
+ title
} = this.props;
return /*#__PURE__*/external_React_default().createElement("a", {
href: this.safeURI(url),
+ title: title,
className: className,
onClick: this.onClick
}, this.props.children);
@@ -2253,6 +2255,102 @@ const cardContextTypes = {
icon: "download"
}
};
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/FeatureHighlight/FeatureHighlight.jsx
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+
+function FeatureHighlight({
+ message,
+ icon,
+ toggle,
+ position = "top-left",
+ title,
+ ariaLabel,
+ feature = "FEATURE_HIGHLIGHT_DEFAULT",
+ dispatch = () => {},
+ windowObj = __webpack_require__.g
+}) {
+ const [opened, setOpened] = (0,external_React_namespaceObject.useState)(false);
+ const ref = (0,external_React_namespaceObject.useRef)(null);
+ (0,external_React_namespaceObject.useEffect)(() => {
+ const handleOutsideClick = e => {
+ if (!ref?.current?.contains(e.target)) {
+ setOpened(false);
+ }
+ };
+ windowObj.document.addEventListener("click", handleOutsideClick);
+ return () => {
+ windowObj.document.removeEventListener("click", handleOutsideClick);
+ };
+ }, [windowObj]);
+ const onToggleClick = (0,external_React_namespaceObject.useCallback)(() => {
+ if (!opened) {
+ dispatch(actionCreators.DiscoveryStreamUserEvent({
+ event: "CLICK",
+ source: "FEATURE_HIGHLIGHT",
+ value: {
+ feature
+ }
+ }));
+ }
+ setOpened(!opened);
+ }, [dispatch, feature, opened]);
+ const openedClassname = opened ? `opened` : `closed`;
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ ref: ref,
+ className: "feature-highlight"
+ }, /*#__PURE__*/external_React_default().createElement("button", {
+ title: title,
+ "aria-haspopup": "true",
+ "aria-label": ariaLabel,
+ className: "toggle-button",
+ onClick: onToggleClick
+ }, toggle), /*#__PURE__*/external_React_default().createElement("div", {
+ className: `feature-highlight-modal ${position} ${openedClassname}`
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "message-icon"
+ }, icon), /*#__PURE__*/external_React_default().createElement("p", null, message), /*#__PURE__*/external_React_default().createElement("button", {
+ title: "Dismiss",
+ "aria-label": "Close sponsored content more info popup",
+ className: "icon icon-dismiss",
+ onClick: () => setOpened(false)
+ })));
+}
+;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/FeatureHighlight/SponsoredContentHighlight.jsx
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+
+
+
+function SponsoredContentHighlight({
+ position,
+ dispatch
+}) {
+ return /*#__PURE__*/external_React_default().createElement("div", {
+ className: "sponsored-content-highlight"
+ }, /*#__PURE__*/external_React_default().createElement(FeatureHighlight, {
+ position: position,
+ ariaLabel: "Sponsored content supports our mission to build a better web.",
+ title: "Sponsored content more info",
+ feature: "SPONSORED_CONTENT_INFO",
+ dispatch: dispatch,
+ message: /*#__PURE__*/external_React_default().createElement("span", null, "Sponsored content supports our mission to build a better web.", " ", /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ dispatch: dispatch,
+ url: "https://support.mozilla.org/kb/pocket-sponsored-stories-new-tabs"
+ }, "Find out how")),
+ icon: /*#__PURE__*/external_React_default().createElement("div", {
+ className: "sponsored-message-icon"
+ }),
+ toggle: /*#__PURE__*/external_React_default().createElement("div", {
+ className: "icon icon-help"
+ })
+ }));
+}
;// CONCATENATED MODULE: external "ReactTransitionGroup"
const external_ReactTransitionGroup_namespaceObject = ReactTransitionGroup;
;// CONCATENATED MODULE: ./content-src/components/FluentOrText/FluentOrText.jsx
@@ -2305,6 +2403,7 @@ class FluentOrText extends (external_React_default()).PureComponent {
+
// Animation time is mirrored in DSContextFooter.scss
const ANIMATION_DURATION = 3000;
const DSMessageLabel = props => {
@@ -2385,7 +2484,9 @@ class DSContextFooter extends (external_React_default()).PureComponent {
sponsor,
sponsored_by_override,
cta_button_variant,
- source
+ source,
+ spocMessageVariant,
+ dispatch
} = this.props;
const sponsorLabel = SponsorLabel({
sponsored_by_override,
@@ -2414,7 +2515,10 @@ class DSContextFooter extends (external_React_default()).PureComponent {
if (sponsorLabel || dsMessageLabel) {
return /*#__PURE__*/external_React_default().createElement("div", {
className: "story-footer"
- }, sponsorLabel, dsMessageLabel);
+ }, sponsorLabel, sponsorLabel && spocMessageVariant === "variant-b" && /*#__PURE__*/external_React_default().createElement(SponsoredContentHighlight, {
+ dispatch: dispatch,
+ position: "inset-block-end inset-inline-start"
+ }), dsMessageLabel);
}
return null;
}
@@ -2517,8 +2621,9 @@ const DefaultMeta = ({
sponsor,
sponsored_by_override,
saveToPocketCard,
- isRecentSave,
- ctaButtonVariant
+ ctaButtonVariant,
+ dispatch,
+ spocMessageVariant
}) => /*#__PURE__*/external_React_default().createElement("div", {
className: "meta"
}, /*#__PURE__*/external_React_default().createElement("div", {
@@ -2531,7 +2636,6 @@ const DefaultMeta = ({
sponsor: sponsor,
sponsored_by_override: sponsored_by_override
}), /*#__PURE__*/external_React_default().createElement("header", {
- title: title,
className: "title clamp"
}, title), excerpt && /*#__PURE__*/external_React_default().createElement("p", {
className: "excerpt clamp"
@@ -2541,7 +2645,9 @@ const DefaultMeta = ({
sponsor: sponsor,
sponsored_by_override: sponsored_by_override,
cta_button_variant: ctaButtonVariant,
- source: source
+ source: source,
+ dispatch: dispatch,
+ spocMessageVariant: spocMessageVariant
}), newSponsoredLabel && /*#__PURE__*/external_React_default().createElement(DSMessageFooter, {
context_type: context_type,
context: null,
@@ -2592,7 +2698,7 @@ class _DSCard extends (external_React_default()).PureComponent {
height: 101
}];
}
- onLinkClick(event) {
+ onLinkClick() {
if (this.props.dispatch) {
this.props.dispatch(actionCreators.DiscoveryStreamUserEvent({
event: "CLICK",
@@ -2624,7 +2730,7 @@ class _DSCard extends (external_React_default()).PureComponent {
}));
}
}
- onSaveClick(event) {
+ onSaveClick() {
if (this.props.dispatch) {
this.props.dispatch(actionCreators.AlsoToMain({
type: actionTypes.SAVE_TO_POCKET,
@@ -2780,14 +2886,9 @@ class _DSCard extends (external_React_default()).PureComponent {
"data-l10n-id": "newtab-pocket-save"
})));
};
- return /*#__PURE__*/external_React_default().createElement("div", {
+ return /*#__PURE__*/external_React_default().createElement("article", {
className: `ds-card ${compactImagesClassName} ${imageGradientClassName} ${titleLinesName} ${descLinesClassName} ${ctaButtonClassName} ${ctaButtonVariantClassName}`,
ref: this.setContextMenuButtonHostRef
- }, /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
- className: "ds-card-link",
- dispatch: this.props.dispatch,
- onLinkClick: !this.props.placeholder ? this.onLinkClick : undefined,
- url: this.props.url
}, /*#__PURE__*/external_React_default().createElement("div", {
className: "img-wrapper"
}, /*#__PURE__*/external_React_default().createElement(DSImage, {
@@ -2798,6 +2899,24 @@ class _DSCard extends (external_React_default()).PureComponent {
url: this.props.url,
title: this.props.title,
isRecentSave: isRecentSave
+ })), /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ className: "ds-card-link",
+ dispatch: this.props.dispatch,
+ onLinkClick: !this.props.placeholder ? this.onLinkClick : undefined,
+ url: this.props.url,
+ title: this.props.title
+ }, /*#__PURE__*/external_React_default().createElement(ImpressionStats_ImpressionStats, {
+ flightId: this.props.flightId,
+ rows: [{
+ id: this.props.id,
+ pos: this.props.pos,
+ ...(this.props.shim && this.props.shim.impression ? {
+ shim: this.props.shim.impression
+ } : {}),
+ recommendation_id: this.props.recommendation_id
+ }],
+ dispatch: this.props.dispatch,
+ source: this.props.type
})), ctaButtonVariant === "variant-b" && /*#__PURE__*/external_React_default().createElement("div", {
className: "cta-header"
}, "Shop Now"), /*#__PURE__*/external_React_default().createElement(DefaultMeta, {
@@ -2811,20 +2930,10 @@ class _DSCard extends (external_React_default()).PureComponent {
sponsor: this.props.sponsor,
sponsored_by_override: this.props.sponsored_by_override,
saveToPocketCard: saveToPocketCard,
- ctaButtonVariant: ctaButtonVariant
- }), /*#__PURE__*/external_React_default().createElement(ImpressionStats_ImpressionStats, {
- flightId: this.props.flightId,
- rows: [{
- id: this.props.id,
- pos: this.props.pos,
- ...(this.props.shim && this.props.shim.impression ? {
- shim: this.props.shim.impression
- } : {}),
- recommendation_id: this.props.recommendation_id
- }],
+ ctaButtonVariant: ctaButtonVariant,
dispatch: this.props.dispatch,
- source: this.props.type
- })), saveToPocketCard && /*#__PURE__*/external_React_default().createElement("div", {
+ spocMessageVariant: this.props.spocMessageVariant
+ }), saveToPocketCard && /*#__PURE__*/external_React_default().createElement("div", {
className: "card-stp-button-hover-background"
}, /*#__PURE__*/external_React_default().createElement("div", {
className: "card-stp-button-position-wrapper"
@@ -2874,7 +2983,7 @@ const DSCard = (0,external_ReactRedux_namespaceObject.connect)(state => ({
App: state.App,
DiscoveryStream: state.DiscoveryStream
}))(_DSCard);
-const PlaceholderDSCard = props => /*#__PURE__*/external_React_default().createElement(DSCard, {
+const PlaceholderDSCard = () => /*#__PURE__*/external_React_default().createElement(DSCard, {
placeholder: true
});
;// CONCATENATED MODULE: ./content-src/components/DiscoveryStreamComponents/DSEmptyState/DSEmptyState.jsx
@@ -3163,7 +3272,6 @@ function DSSubHeader({
}, children));
}
function OnboardingExperience({
- children,
dispatch,
windowObj = __webpack_require__.g
}) {
@@ -3409,6 +3517,7 @@ class _CardGrid extends (external_React_default()).PureComponent {
onboardingExperience,
ctaButtonSponsors,
ctaButtonVariant,
+ spocMessageVariant,
widgets,
recentSavesEnabled,
hideDescriptions,
@@ -3454,6 +3563,7 @@ class _CardGrid extends (external_React_default()).PureComponent {
saveToPocketCard: saveToPocketCard,
ctaButtonSponsors: ctaButtonSponsors,
ctaButtonVariant: ctaButtonVariant,
+ spocMessageVariant: spocMessageVariant,
recommendation_id: rec.recommendation_id
}));
}
@@ -3776,7 +3886,7 @@ class ErrorBoundary extends (external_React_default()).PureComponent {
hasError: false
};
}
- componentDidCatch(error, info) {
+ componentDidCatch() {
this.setState({
hasError: true
});
@@ -3803,6 +3913,7 @@ ErrorBoundary.defaultProps = {
+
/**
* A section that can collapse. As of bug 1710937, it can no longer collapse.
* See bug 1727365 for follow-up work to simplify this component.
@@ -3853,7 +3964,8 @@ class _CollapsibleSection extends (external_React_default()).PureComponent {
collapsed,
learnMore,
title,
- subTitle
+ subTitle,
+ mayHaveSponsoredStories
} = this.props;
const active = menuButtonHover || showContextMenu;
let bodyStyle;
@@ -3899,7 +4011,10 @@ class _CollapsibleSection extends (external_React_default()).PureComponent {
className: "section-sub-title"
}, /*#__PURE__*/external_React_default().createElement(FluentOrText, {
message: subTitle
- })))), /*#__PURE__*/external_React_default().createElement(ErrorBoundary, {
+ })), mayHaveSponsoredStories && this.props.spocMessageVariant === "variant-a" && /*#__PURE__*/external_React_default().createElement(SponsoredContentHighlight, {
+ position: "inset-block-start inset-inline-start",
+ dispatch: this.props.dispatch
+ }))), /*#__PURE__*/external_React_default().createElement(ErrorBoundary, {
className: "section-body-fallback"
}, /*#__PURE__*/external_React_default().createElement("div", {
ref: this.onBodyMount,
@@ -4013,13 +4128,13 @@ class DSPrivacyModal extends (external_React_default()).PureComponent {
this.onLearnLinkClick = this.onLearnLinkClick.bind(this);
this.onManageLinkClick = this.onManageLinkClick.bind(this);
}
- onLearnLinkClick(event) {
+ onLearnLinkClick() {
this.props.dispatch(actionCreators.DiscoveryStreamUserEvent({
event: "CLICK_PRIVACY_INFO",
source: "DS_PRIVACY_MODAL"
}));
}
- onManageLinkClick(event) {
+ onManageLinkClick() {
this.props.dispatch(actionCreators.OnlyToMain({
type: actionTypes.SETTINGS_OPEN
}));
@@ -4044,7 +4159,7 @@ class DSPrivacyModal extends (external_React_default()).PureComponent {
className: "modal-link modal-link-privacy",
"data-l10n-id": "newtab-privacy-modal-link",
onClick: this.onLearnLinkClick,
- href: "https://help.getpocket.com/article/1142-firefox-new-tab-recommendations-faq"
+ href: "https://support.mozilla.org/kb/pocket-recommendations-firefox-new-tab"
}), /*#__PURE__*/external_React_default().createElement("button", {
className: "modal-link modal-link-manage",
"data-l10n-id": "newtab-privacy-modal-button-manage",
@@ -6477,7 +6592,7 @@ class TopSiteLink extends (external_React_default()).PureComponent {
// If we have tabbed to a search shortcut top site, and we click 'enter',
// we should execute the onClick function. This needs to be added because
// search top sites are anchor tags without an href. See bug 1483135
- if (this.props.link.searchTopSite && event.key === "Enter") {
+ if (event.key === "Enter" && (this.props.link.searchTopSite || this.props.isAddButton)) {
this.props.onClick(event);
}
}
@@ -6572,7 +6687,8 @@ class TopSiteLink extends (external_React_default()).PureComponent {
isDraggable,
link,
onClick,
- title
+ title,
+ isAddButton
} = this.props;
const topSiteOuterClassName = `top-site-outer${className ? ` ${className}` : ""}${link.isDragged ? " dragged" : ""}${link.searchTopSite ? " search-shortcut" : ""}`;
const [letterFallback] = title;
@@ -6583,6 +6699,9 @@ class TopSiteLink extends (external_React_default()).PureComponent {
imageClassName,
selectedColor
} = this.calculateStyle();
+ let addButtonl10n = {
+ "data-l10n-id": "newtab-topsites-add-shortcut-label"
+ };
let draggableProps = {};
if (isDraggable) {
draggableProps = {
@@ -6674,14 +6793,16 @@ class TopSiteLink extends (external_React_default()).PureComponent {
className: "top-site-icon search-topsite"
})), /*#__PURE__*/external_React_default().createElement("div", {
className: `title${link.isPinned ? " has-icon pinned" : ""}${link.type === SPOC_TYPE || link.show_sponsored_label ? " sponsored" : ""}`
- }, /*#__PURE__*/external_React_default().createElement("span", {
+ }, /*#__PURE__*/external_React_default().createElement("span", TopSite_extends({
dir: "auto"
- }, link.isPinned && /*#__PURE__*/external_React_default().createElement("div", {
+ }, isAddButton && {
+ ...addButtonl10n
+ }), link.isPinned && /*#__PURE__*/external_React_default().createElement("div", {
className: "icon icon-pin-small"
- }), title || /*#__PURE__*/external_React_default().createElement("br", null), /*#__PURE__*/external_React_default().createElement("span", {
+ }), title || /*#__PURE__*/external_React_default().createElement("br", null)), /*#__PURE__*/external_React_default().createElement("span", {
className: "sponsored-label",
"data-l10n-id": "newtab-topsite-sponsored"
- })))), children, impressionStats));
+ }))), children, impressionStats));
}
}
TopSiteLink.defaultProps = {
@@ -6903,14 +7024,18 @@ class TopSitePlaceholder extends (external_React_default()).PureComponent {
});
}
render() {
- return /*#__PURE__*/external_React_default().createElement(TopSiteLink, TopSite_extends({}, this.props, {
- className: `placeholder ${this.props.className || ""}`,
+ let addButtonProps = {};
+ if (this.props.isAddButton) {
+ addButtonProps = {
+ title: "newtab-topsites-add-shortcut-label",
+ onClick: this.onEditButtonClick
+ };
+ }
+ return /*#__PURE__*/external_React_default().createElement(TopSiteLink, TopSite_extends({}, this.props, this.props.isAddButton ? {
+ ...addButtonProps
+ } : {}, {
+ className: `placeholder ${this.props.className || ""} ${this.props.isAddButton ? "add-button" : ""}`,
isDraggable: false
- }), /*#__PURE__*/external_React_default().createElement("button", {
- "aria-haspopup": "dialog",
- className: "context-menu-button edit-button icon",
- "data-l10n-id": "newtab-menu-topsites-placeholder-tooltip",
- onClick: this.onEditButtonClick
}));
}
}
@@ -7004,6 +7129,19 @@ class _TopSiteList extends (external_React_default()).PureComponent {
// Make a copy of the sites to truncate or extend to desired length
let topSites = this.props.TopSites.rows.slice();
topSites.length = this.props.TopSitesRows * TOP_SITES_MAX_SITES_PER_ROW;
+ // if topSites do not fill an entire row add 'Add shortcut' button to array of topSites
+ // (there should only be one of these)
+ let firstPlaceholder = topSites.findIndex(Object.is.bind(null, undefined));
+ // make sure placeholder exists and there already isnt a add button
+ if (firstPlaceholder && !topSites.includes(site => site.isAddButton)) {
+ topSites[firstPlaceholder] = {
+ isAddButton: true
+ };
+ } else if (topSites.includes(site => site.isAddButton)) {
+ topSites.push(topSites.splice(topSites.indexOf({
+ isAddButton: true
+ }), 1)[0]);
+ }
return topSites;
}
@@ -7090,8 +7228,12 @@ class _TopSiteList extends (external_React_default()).PureComponent {
let topSiteLink;
// Use a placeholder if the link is empty or it's rendering a sponsored
// tile for the about:home startup cache.
- if (!link || props.App.isForStartupCache && isSponsored(link)) {
- topSiteLink = /*#__PURE__*/external_React_default().createElement(TopSitePlaceholder, TopSite_extends({}, slotProps, commonProps));
+ if (!link || props.App.isForStartupCache && isSponsored(link) || topSites[i]?.isAddButton) {
+ if (link) {
+ topSiteLink = /*#__PURE__*/external_React_default().createElement(TopSitePlaceholder, TopSite_extends({}, slotProps, commonProps, {
+ isAddButton: topSites[i] && topSites[i].isAddButton
+ }));
+ }
} else {
topSiteLink = /*#__PURE__*/external_React_default().createElement(TopSite, TopSite_extends({
link: link,
@@ -7551,7 +7693,7 @@ class _TopSites extends (external_React_default()).PureComponent {
}))))));
}
}
-const TopSites_TopSites = (0,external_ReactRedux_namespaceObject.connect)((state, props) => ({
+const TopSites_TopSites = (0,external_ReactRedux_namespaceObject.connect)(state => ({
TopSites: state.TopSites,
Prefs: state.Prefs,
TopSitesRows: state.Prefs.values.topSitesRows
@@ -8053,8 +8195,7 @@ class SectionTitle extends (external_React_default()).PureComponent {
const selectLayoutRender = ({
state = {},
- prefs = {},
- locale = ""
+ prefs = {}
}) => {
const {
layout,
@@ -8337,7 +8478,7 @@ class _DiscoveryStreamBase extends (external_React_default()).PureComponent {
});
});
}
- renderComponent(component, embedWidth) {
+ renderComponent(component) {
switch (component.type) {
case "Highlights":
return /*#__PURE__*/external_React_default().createElement(Highlights, null);
@@ -8417,6 +8558,7 @@ class _DiscoveryStreamBase extends (external_React_default()).PureComponent {
onboardingExperience: component.properties.onboardingExperience,
ctaButtonSponsors: component.properties.ctaButtonSponsors,
ctaButtonVariant: component.properties.ctaButtonVariant,
+ spocMessageVariant: component.properties.spocMessageVariant,
editorsPicksHeader: component.properties.editorsPicksHeader,
recentSavesEnabled: this.props.DiscoveryStream.recentSavesEnabled,
hideDescriptions: this.props.DiscoveryStream.hideDescriptions
@@ -8443,7 +8585,8 @@ class _DiscoveryStreamBase extends (external_React_default()).PureComponent {
}
render() {
const {
- locale
+ locale,
+ mayHaveSponsoredStories
} = this.props;
// Select layout render data by adding spocs and position to recommendations
const {
@@ -8538,6 +8681,8 @@ class _DiscoveryStreamBase extends (external_React_default()).PureComponent {
showPrefName: topStories.pref.feed,
title: sectionTitle,
subTitle: subTitle,
+ mayHaveSponsoredStories: mayHaveSponsoredStories,
+ spocMessageVariant: message?.properties?.spocMessageVariant,
eventSource: "CARDGRID"
}, this.renderLayout(layoutRender)), this.renderLayout([{
width: 12,
@@ -8594,6 +8739,7 @@ class BackgroundsSection extends (external_React_default()).PureComponent {
+
class ContentSection extends (external_React_default()).PureComponent {
constructor(props) {
super(props);
@@ -8671,7 +8817,8 @@ class ContentSection extends (external_React_default()).PureComponent {
pocketRegion,
mayHaveSponsoredStories,
mayHaveRecentSaves,
- openPreferences
+ openPreferences,
+ spocMessageVariant
} = this.props;
const {
topSitesEnabled,
@@ -8805,7 +8952,14 @@ class ContentSection extends (external_React_default()).PureComponent {
"data-eventSource": "HIGHLIGHTS",
"data-l10n-id": "newtab-custom-recent-toggle",
"data-l10n-attrs": "label, description"
- }))), /*#__PURE__*/external_React_default().createElement("span", {
+ }))), pocketRegion && mayHaveSponsoredStories && spocMessageVariant === "variant-c" && /*#__PURE__*/external_React_default().createElement("div", {
+ className: "sponsored-content-info"
+ }, /*#__PURE__*/external_React_default().createElement("div", {
+ className: "icon icon-help"
+ }), /*#__PURE__*/external_React_default().createElement("div", null, "Sponsored content supports our mission to build a better web.", " ", /*#__PURE__*/external_React_default().createElement(SafeAnchor, {
+ dispatch: this.props.dispatch,
+ url: "https://support.mozilla.org/kb/pocket-sponsored-stories-new-tabs"
+ }, "Find out how"))), /*#__PURE__*/external_React_default().createElement("span", {
className: "divider",
role: "separator"
}), /*#__PURE__*/external_React_default().createElement("div", null, /*#__PURE__*/external_React_default().createElement("button", {
@@ -8877,6 +9031,7 @@ class _CustomizeMenu extends (external_React_default()).PureComponent {
mayHaveSponsoredTopSites: this.props.mayHaveSponsoredTopSites,
mayHaveSponsoredStories: this.props.mayHaveSponsoredStories,
mayHaveRecentSaves: this.props.DiscoveryStream.recentSavesEnabled,
+ spocMessageVariant: this.props.spocMessageVariant,
dispatch: this.props.dispatch
}))));
}
@@ -9253,8 +9408,15 @@ class BaseContent extends (external_React_default()).PureComponent {
customizeMenuVisible
} = App;
const prefs = props.Prefs.values;
+ const {
+ pocketConfig
+ } = prefs;
const isDiscoveryStream = props.DiscoveryStream.config && props.DiscoveryStream.config.enabled;
let filteredSections = props.Sections.filter(section => section.id !== "topstories");
+ let spocMessageVariant = "";
+ if (props.App.locale?.startsWith("en-") && pocketConfig?.spocMessageVariant === "variant-c") {
+ spocMessageVariant = pocketConfig.spocMessageVariant;
+ }
const pocketEnabled = prefs["feeds.section.topstories"] && prefs["feeds.system.topstories"];
const noSectionsEnabled = !prefs["feeds.topsites"] && !pocketEnabled && filteredSections.filter(section => section.enabled).length === 0;
const searchHandoffEnabled = prefs["improvesearch.handoffToAwesomebar"];
@@ -9282,6 +9444,7 @@ class BaseContent extends (external_React_default()).PureComponent {
pocketRegion: pocketRegion,
mayHaveSponsoredTopSites: mayHaveSponsoredTopSites,
mayHaveSponsoredStories: mayHaveSponsoredStories,
+ spocMessageVariant: spocMessageVariant,
showing: customizeMenuVisible
}), /*#__PURE__*/external_React_default().createElement("div", {
className: outerClassName,
@@ -9296,7 +9459,8 @@ class BaseContent extends (external_React_default()).PureComponent {
}, isDiscoveryStream ? /*#__PURE__*/external_React_default().createElement(ErrorBoundary, {
className: "borderless-error"
}, /*#__PURE__*/external_React_default().createElement(DiscoveryStreamBase, {
- locale: props.App.locale
+ locale: props.App.locale,
+ mayHaveSponsoredStories: mayHaveSponsoredStories
})) : /*#__PURE__*/external_React_default().createElement(Sections_Sections, null)), /*#__PURE__*/external_React_default().createElement(ConfirmDialog, null))));
}
}
@@ -9420,7 +9584,7 @@ function mergeStateReducer(mainReducer) {
/**
* messageMiddleware - Middleware that looks for SentToMain type actions, and sends them if necessary
*/
-const messageMiddleware = store => next => action => {
+const messageMiddleware = () => next => action => {
const skipLocal = action.meta && action.meta.skipLocal;
if (actionUtils.isSendToMain(action)) {
RPMSendAsyncMessage(OUTGOING_MESSAGE_NAME, action);
diff --git a/browser/components/newtab/data/content/assets/sponsor-message-icon.svg b/browser/components/newtab/data/content/assets/sponsor-message-icon.svg
new file mode 100644
index 0000000000..09e171fcd9
--- /dev/null
+++ b/browser/components/newtab/data/content/assets/sponsor-message-icon.svg
@@ -0,0 +1,6 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at https://mozilla.org/MPL/2.0/. -->
+<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path id="Vector" d="M17.7598 0.927468L17.7505 0.920946C17.5 0.742695 17.1526 0.537416 16.7513 0.36344C15.9486 0.0162127 14.9513 -0.104324 14.0229 0.0989256C13.094 0.299531 12.2334 0.821423 11.6408 1.4615C11.3448 1.78286 11.1105 2.10874 10.9539 2.37127C10.9148 2.43505 10.8774 2.49984 10.8417 2.56557C10.7874 2.58861 10.7323 2.61339 10.6777 2.64187C10.461 2.74947 10.2348 2.88486 10.0191 3.05558C9.80233 3.22492 9.59191 3.42393 9.39579 3.64631C9.19845 3.8681 9.02216 4.11675 8.85927 4.37703C8.69518 4.63719 8.55497 4.91406 8.42867 5.19531L8.3365 5.40722L8.25361 5.62142L8.21238 5.72837L8.17554 5.83604L8.10242 6.0507C8.07953 6.12229 8.05913 6.19407 8.03757 6.26529C8.01717 6.3367 7.99326 6.40728 7.97616 6.4784L7.96345 6.52753C7.85559 6.36663 7.73933 6.21689 7.61557 6.08175C7.47438 5.92767 7.32573 5.79054 7.17472 5.66931C6.87206 5.42701 6.55805 5.25419 6.26847 5.13166C6.11579 5.06849 5.95919 5.01524 5.79965 4.97225L5.80171 4.96497L5.80175 4.96493C5.80175 4.96493 5.66129 4.86359 5.43844 4.74994C5.21392 4.63187 4.90727 4.50245 4.5599 4.40456C3.86526 4.20939 3.03654 4.22109 2.29995 4.48988C1.5626 4.75661 0.916726 5.27843 0.50298 5.86724C0.296469 6.16273 0.140971 6.45507 0.0418817 6.68701L0.0388746 6.69382C-0.0591635 6.91747 0.0342372 7.17977 0.251472 7.29129L0.259877 7.2956C0.484394 7.41364 0.791044 7.54309 1.13842 7.64098C1.83305 7.83615 2.66178 7.82445 3.39837 7.55566C4.13572 7.28897 4.78159 6.76715 5.19533 6.17831C5.28317 6.05241 5.36509 5.9225 5.44083 5.78898C5.55814 5.82094 5.67307 5.86104 5.7848 5.90901C5.97815 5.99462 6.18796 6.11342 6.38926 6.2795C6.48958 6.36264 7.27754 7.18586 7.27754 8.1353C7.30831 8.29686 7.32318 8.46104 7.32192 8.62549L7.31761 9.25589L7.30844 10.5451L7.25928 17.4565V17.4666C7.26207 17.8571 8.67623 17.8471 8.67344 17.4565L8.62428 10.5451L8.62066 10.0378C8.6275 10.0019 8.63098 9.96477 8.63055 9.9268L8.62616 9.52747L8.62537 9.42773L8.62703 9.32288L8.63062 9.08666C8.63073 9.00272 8.63558 8.91153 8.63971 8.81573C8.64446 8.72001 8.64696 8.6189 8.6541 8.51416L8.67797 8.18747C8.68681 8.07465 8.70105 7.95904 8.71279 7.83952C8.73964 7.60124 8.77456 7.35118 8.82075 7.09518L8.83738 6.99851L8.85746 6.90218L8.89792 6.70726C8.91028 6.64136 8.92894 6.57741 8.94426 6.51177C8.96067 6.44655 8.97589 6.38047 8.99339 6.315L9.04976 6.11932L9.07806 6.02092L9.1103 5.92404L9.17483 5.72949L9.24736 5.53838C9.34681 5.28502 9.45771 5.03656 9.5881 4.80653C9.71741 4.57611 9.85711 4.35677 10.0131 4.16396C10.1681 3.97031 10.3335 3.79825 10.5031 3.65178C10.6719 3.50385 10.8481 3.38752 11.0166 3.2931C11.0791 3.25607 11.1424 3.22644 11.2036 3.19782C11.445 3.36107 11.759 3.54048 12.1159 3.69522C12.9186 4.04244 13.9159 4.16298 14.8443 3.95973C15.7733 3.75909 16.6338 3.2372 17.2264 2.59716C17.5224 2.27576 17.7567 1.94988 17.9134 1.68735L17.9181 1.67964C18.0723 1.42686 18.0028 1.09677 17.7598 0.927468Z" fill="#2BA52E"/>
+</svg>
diff --git a/browser/components/newtab/docs/index.rst b/browser/components/newtab/docs/index.rst
index 48cf01c331..5a11688267 100644
--- a/browser/components/newtab/docs/index.rst
+++ b/browser/components/newtab/docs/index.rst
@@ -8,7 +8,7 @@ Some of these source files (such as ``.js``, ``.jsx``, and ``.scss``) require an
We are working on migrating this to work with ``mach``, but in the meantime, please
follow the following steps if you need to make changes in this directory:
-For ``.jsm`` or ``.sys.mjs`` files (system modules)
+For ``.sys.mjs`` files (system modules)
---------------------------------------------------
No build step is necessary. Use ``mach`` and run mochitests according to your regular Firefox workflow.
diff --git a/browser/components/newtab/docs/v2-system-addon/preferences.md b/browser/components/newtab/docs/v2-system-addon/preferences.md
index ec6ba82491..d709e830e4 100644
--- a/browser/components/newtab/docs/v2-system-addon/preferences.md
+++ b/browser/components/newtab/docs/v2-system-addon/preferences.md
@@ -43,7 +43,7 @@ pref in the following files:
You can see an example in [this patch](https://github.com/mozilla/activity-stream/pull/2977).
-## Reading, setting, and observing preferences from `.jsm`s
+## Reading, setting, and observing preferences from `.sys.mjs`s
To read/set/observe Activity Stream preferences, construct a `Prefs` instance found in `lib/ActivityStreamPrefs.sys.mjs`.
diff --git a/browser/components/newtab/docs/v2-system-addon/unit_testing_guide.md b/browser/components/newtab/docs/v2-system-addon/unit_testing_guide.md
index c3dd369a2d..bc0b2e8b53 100644
--- a/browser/components/newtab/docs/v2-system-addon/unit_testing_guide.md
+++ b/browser/components/newtab/docs/v2-system-addon/unit_testing_guide.md
@@ -4,7 +4,7 @@
Our unit tests in Activity Stream are written with mocha, chai, and sinon, and run
with karma. They include unit tests for both content code (React components, etc.)
-and `.jsm`s.
+and `.sys.mjs`s.
You can find unit tests in `tests/unit`.
@@ -32,7 +32,7 @@ If you are creating a new test, add it to a subdirectory of the `tests/unit`
that corresponds to the file you are testing. Tests should end with `.test.js` or
`.test.jsx` if the test includes any jsx.
-For example, if the file you are testing is `lib/Foo.jsm`, the test
+For example, if the file you are testing is `lib/Foo.sys.mjs`, the test
file should be `test/unit/lib/Foo.test.js`
## Mocha tests
@@ -96,9 +96,9 @@ assert.isUserEventAction({type: "FOO"});
assert.isUserEventAction(ac.UserEvent({event: "BLOOP"}));
```
-## Overriding globals in `.jsm`s
+## Overriding globals in `.sys.mjs`s
-Most `.jsm`s you will be testing use `Cu.import` or `XPCOMUtils` to inject globals.
+Most `.sys.mjs`s you will be testing use `Cu.import` or `XPCOMUtils` to inject globals.
In order to add mocks/stubs/fakes for these globals, you should use the `GlobalOverrider`
utility in `test/unit/utils`:
diff --git a/browser/components/newtab/karma.mc.config.js b/browser/components/newtab/karma.mc.config.js
index 78ef457865..fa3ac14587 100644
--- a/browser/components/newtab/karma.mc.config.js
+++ b/browser/components/newtab/karma.mc.config.js
@@ -209,18 +209,10 @@ module.exports = function (config) {
webpack: {
mode: "none",
devtool: "inline-source-map",
- // This loader allows us to override required files in tests
- resolveLoader: {
- alias: { inject: path.join(__dirname, "loaders/inject-loader") },
- },
// This resolve config allows us to import with paths relative to the root directory, e.g. "lib/ActivityStream.sys.mjs"
resolve: {
extensions: [".js", ".jsx"],
modules: [PATHS.moduleResolveDirectory, "node_modules"],
- fallback: {
- stream: require.resolve("stream-browserify"),
- buffer: require.resolve("buffer"),
- },
alias: {
asrouter: path.join(__dirname, "../asrouter"),
},
diff --git a/browser/components/newtab/lib/ActivityStream.sys.mjs b/browser/components/newtab/lib/ActivityStream.sys.mjs
index f2287fe45e..f46e8aadf0 100644
--- a/browser/components/newtab/lib/ActivityStream.sys.mjs
+++ b/browser/components/newtab/lib/ActivityStream.sys.mjs
@@ -306,7 +306,7 @@ export const PREFS_CONFIG = new Map([
"discoverystream.config",
{
title: "Configuration for the new pocket new tab",
- getValue: ({ geo, locale }) => {
+ getValue: () => {
return JSON.stringify({
api_key_pref: "extensions.pocket.oAuthConsumerKey",
collapsible: true,
@@ -689,7 +689,7 @@ export class ActivityStream {
}
}
- observe(subject, topic, data) {
+ observe(subject, topic) {
switch (topic) {
case "intl:app-locales-changed":
case lazy.Region.REGION_TOPIC:
diff --git a/browser/components/newtab/lib/ActivityStreamMessageChannel.sys.mjs b/browser/components/newtab/lib/ActivityStreamMessageChannel.sys.mjs
index de9d2cb800..5392a421ca 100644
--- a/browser/components/newtab/lib/ActivityStreamMessageChannel.sys.mjs
+++ b/browser/components/newtab/lib/ActivityStreamMessageChannel.sys.mjs
@@ -67,7 +67,7 @@ export class ActivityStreamMessageChannel {
* @param {object} store A redux store
* @return {function} Redux middleware
*/
- middleware(store) {
+ middleware() {
return next => action => {
const skipMain = action.meta && action.meta.skipMain;
if (au.isSendToOneContent(action)) {
diff --git a/browser/components/newtab/lib/DiscoveryStreamFeed.sys.mjs b/browser/components/newtab/lib/DiscoveryStreamFeed.sys.mjs
index 257036b9da..ee08462503 100644
--- a/browser/components/newtab/lib/DiscoveryStreamFeed.sys.mjs
+++ b/browser/components/newtab/lib/DiscoveryStreamFeed.sys.mjs
@@ -331,7 +331,7 @@ export class DiscoveryStreamFeed {
},
});
},
- error(error) {},
+ error() {},
});
}
}
@@ -606,6 +606,13 @@ export class DiscoveryStreamFeed {
) {
ctaButtonVariant = pocketConfig.ctaButtonVariant;
}
+ let spocMessageVariant = "";
+ if (
+ pocketConfig.spocMessageVariant === "variant-a" ||
+ pocketConfig.spocMessageVariant === "variant-b"
+ ) {
+ spocMessageVariant = pocketConfig.spocMessageVariant;
+ }
const prepConfArr = arr => {
return arr
@@ -681,6 +688,9 @@ export class DiscoveryStreamFeed {
// For now button variants are for experimentation and English only.
ctaButtonSponsors: this.locale.startsWith("en-") ? ctaButtonSponsors : [],
ctaButtonVariant: this.locale.startsWith("en-") ? ctaButtonVariant : "",
+ spocMessageVariant: this.locale.startsWith("en-")
+ ? spocMessageVariant
+ : "",
});
sendUpdate({
@@ -2040,6 +2050,7 @@ export class DiscoveryStreamFeed {
`onboardingExperience` Show new users some UI explaining Pocket above the Pocket section.
`ctaButtonSponsors` An array of sponsors we want to show a cta button on the card for.
`ctaButtonVariant` Sets the variant for the cta sponsor button.
+ `spocMessageVariant` Sets the variant for the sponsor message dialog.
*/
getHardcodedLayout = ({
spocsUrl = SPOCS_URL,
@@ -2063,6 +2074,7 @@ getHardcodedLayout = ({
onboardingExperience = false,
ctaButtonSponsors = [],
ctaButtonVariant = "",
+ spocMessageVariant = "",
}) => ({
lastUpdate: Date.now(),
spocs: {
@@ -2144,7 +2156,9 @@ getHardcodedLayout = ({
link_url: "https://getpocket.com/firefox/new_tab_learn_more",
icon: "chrome://global/skin/icons/pocket.svg",
},
- properties: {},
+ properties: {
+ spocMessageVariant,
+ },
styles: {
".ds-message": "margin-bottom: -20px",
},
@@ -2162,6 +2176,7 @@ getHardcodedLayout = ({
onboardingExperience,
ctaButtonSponsors,
ctaButtonVariant,
+ spocMessageVariant,
},
widgets: {
positions: widgetPositions.map(position => {
diff --git a/browser/components/newtab/lib/DownloadsManager.sys.mjs b/browser/components/newtab/lib/DownloadsManager.sys.mjs
index f095645d41..a9a57222ee 100644
--- a/browser/components/newtab/lib/DownloadsManager.sys.mjs
+++ b/browser/components/newtab/lib/DownloadsManager.sys.mjs
@@ -16,7 +16,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
const DOWNLOAD_CHANGED_DELAY_TIME = 1000; // time in ms to delay timer for downloads changed events
export class DownloadsManager {
- constructor(store) {
+ constructor() {
this._downloadData = null;
this._store = null;
this._downloadItems = new Map();
diff --git a/browser/components/newtab/lib/PersonalityProvider/RecipeExecutor.mjs b/browser/components/newtab/lib/PersonalityProvider/RecipeExecutor.mjs
index 4f420c0812..ed15f8a59a 100644
--- a/browser/components/newtab/lib/PersonalityProvider/RecipeExecutor.mjs
+++ b/browser/components/newtab/lib/PersonalityProvider/RecipeExecutor.mjs
@@ -161,7 +161,7 @@ export class RecipeExecutor {
* Config:
* Not configurable
*/
- conditionallyNmfTag(item, config) {
+ conditionallyNmfTag(item) {
let nestedNmfTags = {};
let parentTags = {};
let parentWeights = {};
@@ -1052,7 +1052,7 @@ export class RecipeExecutor {
} else if (config.operation === "overwrite") {
op = (a, b) => b;
} else if (config.operation === "count") {
- op = (a, b) => a + 1;
+ op = a => a + 1;
} else {
return null;
}
diff --git a/browser/components/newtab/lib/PrefsFeed.sys.mjs b/browser/components/newtab/lib/PrefsFeed.sys.mjs
index 1c6f9b0d45..bb2502ac55 100644
--- a/browser/components/newtab/lib/PrefsFeed.sys.mjs
+++ b/browser/components/newtab/lib/PrefsFeed.sys.mjs
@@ -79,7 +79,7 @@ export class PrefsFeed {
/**
* Handler for when experiment data updates.
*/
- onExperimentUpdated(event, reason) {
+ onExperimentUpdated() {
const value = lazy.NimbusFeatures.newtab.getAllVariables() || {};
this.store.dispatch(
ac.BroadcastToContent({
@@ -238,7 +238,7 @@ export class PrefsFeed {
}
}
- observe(subject, topic, data) {
+ observe(subject, topic) {
switch (topic) {
case lazy.Region.REGION_TOPIC:
this.store.dispatch(
diff --git a/browser/components/newtab/lib/RecommendationProvider.sys.mjs b/browser/components/newtab/lib/RecommendationProvider.sys.mjs
index 03e976544f..875c90492b 100644
--- a/browser/components/newtab/lib/RecommendationProvider.sys.mjs
+++ b/browser/components/newtab/lib/RecommendationProvider.sys.mjs
@@ -242,7 +242,7 @@ export class RecommendationProvider {
);
}
- async observe(subject, topic, data) {
+ async observe(subject, topic) {
switch (topic) {
case "idle-daily":
await this.updatePersonalizationScores();
diff --git a/browser/components/newtab/lib/SectionsManager.sys.mjs b/browser/components/newtab/lib/SectionsManager.sys.mjs
index 96bba0c9ea..069ddbb224 100644
--- a/browser/components/newtab/lib/SectionsManager.sys.mjs
+++ b/browser/components/newtab/lib/SectionsManager.sys.mjs
@@ -31,7 +31,7 @@ ChromeUtils.defineESModuleGetters(lazy, {
* `${feed_pref_name}.options`.
*/
-const BUILT_IN_SECTIONS = ({ newtab, pocketNewtab }) => ({
+const BUILT_IN_SECTIONS = ({ pocketNewtab }) => ({
"feeds.section.topstories": options => ({
id: "topstories",
pref: {
@@ -107,7 +107,7 @@ const BUILT_IN_SECTIONS = ({ newtab, pocketNewtab }) => ({
shouldSendImpressionStats: true,
dedupeFrom: ["highlights"],
}),
- "feeds.section.highlights": options => ({
+ "feeds.section.highlights": () => ({
id: "highlights",
pref: {
titleString: {
diff --git a/browser/components/newtab/lib/Store.sys.mjs b/browser/components/newtab/lib/Store.sys.mjs
index 3a4fdfa98d..ea66c36f50 100644
--- a/browser/components/newtab/lib/Store.sys.mjs
+++ b/browser/components/newtab/lib/Store.sys.mjs
@@ -144,7 +144,7 @@ export class Store {
this._messageChannel.simulateMessagesForExistingTabs();
}
- async _initIndexedDB(telemetryKey) {
+ async _initIndexedDB() {
// "snippets" is the name of one storage space, but these days it is used
// not for snippet-related data (snippets were removed in bug 1715158),
// but storage for impression or session data for all ASRouter messages.
diff --git a/browser/components/newtab/lib/TelemetryFeed.sys.mjs b/browser/components/newtab/lib/TelemetryFeed.sys.mjs
index 99bed168a8..1a9e9e3d34 100644
--- a/browser/components/newtab/lib/TelemetryFeed.sys.mjs
+++ b/browser/components/newtab/lib/TelemetryFeed.sys.mjs
@@ -714,8 +714,8 @@ export class TelemetryFeed {
});
const session = this.sessions.get(au.getPortIdOfSender(action));
switch (action.data?.event) {
- case "CLICK":
- const { card_type, topic, recommendation_id, tile_id, shim } =
+ case "CLICK": {
+ const { card_type, topic, recommendation_id, tile_id, shim, feature } =
action.data.value ?? {};
if (
action.data.source === "POPULAR_TOPICS" ||
@@ -725,6 +725,11 @@ export class TelemetryFeed {
newtab_visit_id: session.session_id,
topic,
});
+ } else if (action.data.source === "FEATURE_HIGHLIGHT") {
+ Glean.newtab.tooltipClick.record({
+ newtab_visit_id: session.session_id,
+ feature,
+ });
} else if (["spoc", "organic"].includes(card_type)) {
Glean.pocket.click.record({
newtab_visit_id: session.session_id,
@@ -739,6 +744,7 @@ export class TelemetryFeed {
}
}
break;
+ }
case "SAVE_TO_POCKET":
Glean.pocket.save.record({
newtab_visit_id: session.session_id,
diff --git a/browser/components/newtab/lib/TopSitesFeed.sys.mjs b/browser/components/newtab/lib/TopSitesFeed.sys.mjs
index db21411fdd..796211085b 100644
--- a/browser/components/newtab/lib/TopSitesFeed.sys.mjs
+++ b/browser/components/newtab/lib/TopSitesFeed.sys.mjs
@@ -165,7 +165,7 @@ class TopSitesTelemetry {
{},
...Object.entries(this.allSponsoredTiles)
.filter(
- ([k, v]) =>
+ ([, v]) =>
v.display_fail_reason === null ||
v.display_fail_reason === undefined
)
@@ -196,8 +196,8 @@ class TopSitesTelemetry {
clearTilesForProvider(provider) {
Object.entries(this.allSponsoredTiles)
- .filter(([k, v]) => k.startsWith(provider))
- .map(([k, v]) => delete this.allSponsoredTiles[k]);
+ .filter(([k]) => k.startsWith(provider))
+ .map(([k]) => delete this.allSponsoredTiles[k]);
}
_getAdvertiser(tile) {
diff --git a/browser/components/newtab/loaders/inject-loader.js b/browser/components/newtab/loaders/inject-loader.js
deleted file mode 100644
index 8729baf270..0000000000
--- a/browser/components/newtab/loaders/inject-loader.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this file,
- * You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-// Note: this is based on https://github.com/plasticine/inject-loader,
-// patched to make istanbul work properly
-
-const loaderUtils = require("loader-utils");
-const QUOTE_REGEX_STRING = "['|\"]{1}";
-
-const hasOnlyExcludeFlags = query =>
- Object.keys(query).filter(key => query[key] === true).length === 0;
-const escapePath = path => path.replace("/", "\\/");
-
-function createRequireStringRegex(query) {
- const regexArray = [];
-
- // if there is no query then replace everything
- if (Object.keys(query).length === 0) {
- regexArray.push("([^\\)]+)");
- } else if (hasOnlyExcludeFlags(query)) {
- // if there are only negation matches in the query then replace everything
- // except them
- Object.keys(query).forEach(key =>
- regexArray.push(`(?!${QUOTE_REGEX_STRING}${escapePath(key)})`)
- );
- regexArray.push("([^\\)]+)");
- } else {
- regexArray.push(`(${QUOTE_REGEX_STRING}(`);
- regexArray.push(
- Object.keys(query)
- .map(key => escapePath(key))
- .join("|")
- );
- regexArray.push(`)${QUOTE_REGEX_STRING})`);
- }
-
- // Wrap the regex to match `require()`
- regexArray.unshift("require\\(");
- regexArray.push("\\)");
-
- return new RegExp(regexArray.join(""), "g");
-}
-
-module.exports = function inject(src) {
- if (this.cacheable) {
- this.cacheable();
- }
- const regex = createRequireStringRegex(
- loaderUtils.urlToRequest(this.resourcePath) || {}
- );
-
- return `module.exports = function inject(injections) {
- var module = {exports: {}};
- var exports = module.exports;
- ${src.replace(regex, "(injections[$1] || /* istanbul ignore next */ $&)")}
- return module.exports;
-}\n`;
-};
diff --git a/browser/components/newtab/metrics.yaml b/browser/components/newtab/metrics.yaml
index 04845fcda0..bd74e609ad 100644
--- a/browser/components/newtab/metrics.yaml
+++ b/browser/components/newtab/metrics.yaml
@@ -212,6 +212,27 @@ newtab:
- newtab
lifetime: application
+ tooltip_click:
+ type: event
+ description: >
+ Recorded when a feature highlight tooltip is opened.
+ bugs:
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1888983
+ data_reviews:
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1888983
+ data_sensitivity:
+ - interaction
+ notification_emails:
+ - sdowne@mozilla.com
+ expires: never
+ extra_keys:
+ newtab_visit_id: *newtab_visit_id
+ feature:
+ description: The feature that was clicked on.
+ type: string
+ send_in_pings:
+ - newtab
+
newtab.search:
enabled:
lifetime: application
diff --git a/browser/components/newtab/package-lock.json b/browser/components/newtab/package-lock.json
index 7a9fead1b8..2da0b42dbe 100644
--- a/browser/components/newtab/package-lock.json
+++ b/browser/components/newtab/package-lock.json
@@ -21,10 +21,7 @@
"@babel/core": "7.23.5",
"@babel/preset-react": "7.23.3",
"@jsdevtools/coverage-istanbul-loader": "^3.0.5",
- "acorn": "8.5.0",
"babel-loader": "8.2.3",
- "babel-plugin-jsm-to-esmodules": "0.6.0",
- "buffer": "6.0.3",
"chai": "4.3.4",
"enzyme": "3.11.0",
"enzyme-adapter-react-16": "1.15.6",
@@ -39,7 +36,6 @@
"karma-sinon": "1.0.5",
"karma-sourcemap-loader": "0.3.8",
"karma-webpack": "5.0.0",
- "loader-utils": "3.2.1",
"lodash": "4.17.21",
"mocha": "9.2.2",
"mock-raf": "1.0.1",
@@ -51,8 +47,6 @@
"sass": "1.43.4",
"shelljs": "0.8.5",
"sinon": "12.0.1",
- "stream-browserify": "3.0.0",
- "util": "0.10.4",
"webpack": "5.89.0",
"webpack-cli": "4.9.1",
"yamscripts": "0.1.0"
@@ -1008,6 +1002,7 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
"integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
"dev": true,
+ "peer": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -1273,38 +1268,12 @@
"node": ">=4.0.0"
}
},
- "node_modules/babel-plugin-jsm-to-esmodules": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jsm-to-esmodules/-/babel-plugin-jsm-to-esmodules-0.6.0.tgz",
- "integrity": "sha512-463Yuq2sLkjoGHl5vPYUQQONnDjxnmxZuhsR1swL5N76hDFGyYZAVd6HoS4E02jBF8bORpS4aFmdr1XjEZ0buQ==",
- "dev": true
- },
"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",
@@ -1437,30 +1406,6 @@
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
- "node_modules/buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "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.2.1"
- }
- },
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -3217,26 +3162,6 @@
"node": ">=0.10.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/import-local": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
@@ -4140,15 +4065,6 @@
"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": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -5546,20 +5462,6 @@
"node": ">=4"
}
},
- "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",
@@ -6112,16 +6014,6 @@
"node": ">= 0.6"
}
},
- "node_modules/stream-browserify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
- "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
- "dev": true,
- "dependencies": {
- "inherits": "~2.0.4",
- "readable-stream": "^3.5.0"
- }
- },
"node_modules/streamroller": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
@@ -6136,15 +6028,6 @@
"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",
@@ -6638,27 +6521,6 @@
"punycode": "^2.1.0"
}
},
- "node_modules/util": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
- "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
- "dev": true,
- "dependencies": {
- "inherits": "2.0.3"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
- "node_modules/util/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/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
@@ -7943,7 +7805,8 @@
"version": "8.5.0",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz",
"integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==",
- "dev": true
+ "dev": true,
+ "peer": true
},
"acorn-import-assertions": {
"version": "1.9.0",
@@ -8133,24 +7996,12 @@
}
}
},
- "babel-plugin-jsm-to-esmodules": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-jsm-to-esmodules/-/babel-plugin-jsm-to-esmodules-0.6.0.tgz",
- "integrity": "sha512-463Yuq2sLkjoGHl5vPYUQQONnDjxnmxZuhsR1swL5N76hDFGyYZAVd6HoS4E02jBF8bORpS4aFmdr1XjEZ0buQ==",
- "dev": true
- },
"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
- },
"base64id": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz",
@@ -8249,16 +8100,6 @@
"update-browserslist-db": "^1.0.13"
}
},
- "buffer": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz",
- "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==",
- "dev": true,
- "requires": {
- "base64-js": "^1.3.1",
- "ieee754": "^1.2.1"
- }
- },
"buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
@@ -9584,12 +9425,6 @@
"safer-buffer": ">= 2.1.2 < 3"
}
},
- "ieee754": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
- "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
- "dev": true
- },
"import-local": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz",
@@ -10245,12 +10080,6 @@
"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": "6.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
@@ -11275,17 +11104,6 @@
"path-type": "^3.0.0"
}
},
- "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",
@@ -11708,16 +11526,6 @@
"integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==",
"dev": true
},
- "stream-browserify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz",
- "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==",
- "dev": true,
- "requires": {
- "inherits": "~2.0.4",
- "readable-stream": "^3.5.0"
- }
- },
"streamroller": {
"version": "3.1.5",
"resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz",
@@ -11729,15 +11537,6 @@
"fs-extra": "^8.1.0"
}
},
- "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",
@@ -12061,29 +11860,6 @@
"punycode": "^2.1.0"
}
},
- "util": {
- "version": "0.10.4",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
- "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
- "dev": true,
- "requires": {
- "inherits": "2.0.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "dev": true
- }
- }
- },
- "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",
diff --git a/browser/components/newtab/package.json b/browser/components/newtab/package.json
index b878deb975..0724ae78ee 100644
--- a/browser/components/newtab/package.json
+++ b/browser/components/newtab/package.json
@@ -19,10 +19,7 @@
"@babel/core": "7.23.5",
"@babel/preset-react": "7.23.3",
"@jsdevtools/coverage-istanbul-loader": "^3.0.5",
- "acorn": "8.5.0",
"babel-loader": "8.2.3",
- "babel-plugin-jsm-to-esmodules": "0.6.0",
- "buffer": "6.0.3",
"chai": "4.3.4",
"enzyme": "3.11.0",
"enzyme-adapter-react-16": "1.15.6",
@@ -37,7 +34,6 @@
"karma-sinon": "1.0.5",
"karma-sourcemap-loader": "0.3.8",
"karma-webpack": "5.0.0",
- "loader-utils": "3.2.1",
"lodash": "4.17.21",
"mocha": "9.2.2",
"mock-raf": "1.0.1",
@@ -49,8 +45,6 @@
"sass": "1.43.4",
"shelljs": "0.8.5",
"sinon": "12.0.1",
- "stream-browserify": "3.0.0",
- "util": "0.10.4",
"webpack": "5.89.0",
"webpack-cli": "4.9.1",
"yamscripts": "0.1.0"
diff --git a/browser/components/newtab/test/browser/browser_newtab_ping.js b/browser/components/newtab/test/browser/browser_newtab_ping.js
index 009305eb7a..4ed2fd7200 100644
--- a/browser/components/newtab/test/browser/browser_newtab_ping.js
+++ b/browser/components/newtab/test/browser/browser_newtab_ping.js
@@ -187,7 +187,7 @@ add_task(async function test_newtab_doesnt_send_nimbus() {
let { sessions } =
AboutNewTab.activityStream.store.feeds.get("feeds.telemetry");
return !Array.from(sessions.entries()).filter(
- ([k, v]) => v.session_id === sessionId
+ ([, v]) => v.session_id === sessionId
).length;
}, "Waiting for sessions to clean up.");
// Session ended without a ping being sent. Success!
diff --git a/browser/components/newtab/test/schemas/pings.js b/browser/components/newtab/test/schemas/pings.js
index 825083066e..fb52602bd4 100644
--- a/browser/components/newtab/test/schemas/pings.js
+++ b/browser/components/newtab/test/schemas/pings.js
@@ -143,7 +143,7 @@ export const UTSessionPing = Joi.array().items(
eventsTelemetryExtraKeys
);
-export function chaiAssertions(_chai, utils) {
+export function chaiAssertions(_chai) {
const { Assertion } = _chai;
Assertion.addMethod("validate", function (schema, schemaName) {
diff --git a/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSCard.test.jsx b/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSCard.test.jsx
index dad4d19fa5..1d572ee3ce 100644
--- a/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSCard.test.jsx
+++ b/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSCard.test.jsx
@@ -54,9 +54,9 @@ describe("<DSCard>", () => {
it("should render a SafeAnchor", () => {
wrapper.setProps({ url: "https://foo.com" });
- assert.equal(wrapper.children().at(0).type(), SafeAnchor);
+ assert.equal(wrapper.children().at(1).type(), SafeAnchor);
assert.propertyVal(
- wrapper.children().at(0).props(),
+ wrapper.children().at(1).props(),
"url",
"https://foo.com"
);
@@ -64,14 +64,14 @@ describe("<DSCard>", () => {
it("should pass onLinkClick prop", () => {
assert.propertyVal(
- wrapper.children().at(0).props(),
+ wrapper.children().at(1).props(),
"onLinkClick",
wrapper.instance().onLinkClick
);
});
it("should render DSLinkMenu", () => {
- assert.equal(wrapper.children().at(1).type(), DSLinkMenu);
+ assert.equal(wrapper.children().at(3).type(), DSLinkMenu);
});
it("should start with no .active class", () => {
diff --git a/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/FeatureHighlight.test.jsx b/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/FeatureHighlight.test.jsx
new file mode 100644
index 0000000000..2d7ef66ecf
--- /dev/null
+++ b/browser/components/newtab/test/unit/content-src/components/DiscoveryStreamComponents/FeatureHighlight.test.jsx
@@ -0,0 +1,60 @@
+import { FeatureHighlight } from "content-src/components/DiscoveryStreamComponents/FeatureHighlight/FeatureHighlight";
+import { SponsoredContentHighlight } from "content-src/components/DiscoveryStreamComponents/FeatureHighlight/SponsoredContentHighlight";
+import React from "react";
+import { mount } from "enzyme";
+
+describe("<FeatureHighlight>", () => {
+ let wrapper;
+ let fakeWindow;
+
+ beforeEach(() => {
+ wrapper = mount(<FeatureHighlight />);
+ });
+
+ it("should render", () => {
+ assert.ok(wrapper.exists());
+ assert.ok(wrapper.find(".feature-highlight").exists());
+ });
+
+ it("should render a title", () => {
+ wrapper.setProps({ message: "foo" });
+ assert.ok(wrapper.find(".feature-highlight-modal p").exists());
+ assert.equal(wrapper.find(".feature-highlight-modal p").text(), "foo");
+ });
+
+ it("should open a modal", () => {
+ assert.ok(wrapper.find(".feature-highlight-modal.closed").exists());
+ wrapper.find(".toggle-button").simulate("click");
+ assert.ok(wrapper.find(".feature-highlight-modal.opened").exists());
+ wrapper.find(".icon-dismiss").simulate("click");
+ assert.ok(wrapper.find(".feature-highlight-modal.closed").exists());
+ });
+
+ it("should close a modal if clicking outside", () => {
+ fakeWindow = {
+ document: {
+ addEventListener: (event, handler) => {
+ fakeWindow.document.handleOutsideClick = handler;
+ },
+ removeEventListener: () => {},
+ },
+ };
+ wrapper.setProps({ windowObj: fakeWindow });
+
+ wrapper.find(".toggle-button").simulate("click");
+ fakeWindow.document.handleOutsideClick({ target: null });
+ });
+});
+
+describe("<SponsoredContentHighlight>", () => {
+ let wrapper;
+
+ beforeEach(() => {
+ wrapper = mount(<SponsoredContentHighlight />);
+ });
+
+ it("should render", () => {
+ assert.ok(wrapper.exists());
+ assert.ok(wrapper.find(".sponsored-content-highlight").exists());
+ });
+});
diff --git a/browser/components/asrouter/tests/unit/ModalOverlay.test.jsx b/browser/components/newtab/test/unit/content-src/components/ModalOverlay.test.jsx
index 2320e16fc3..2320e16fc3 100644
--- a/browser/components/asrouter/tests/unit/ModalOverlay.test.jsx
+++ b/browser/components/newtab/test/unit/content-src/components/ModalOverlay.test.jsx
diff --git a/browser/components/newtab/test/unit/content-src/components/TopSites.test.jsx b/browser/components/newtab/test/unit/content-src/components/TopSites.test.jsx
index 1977066f0d..798bb9b8c7 100644
--- a/browser/components/newtab/test/unit/content-src/components/TopSites.test.jsx
+++ b/browser/components/newtab/test/unit/content-src/components/TopSites.test.jsx
@@ -1488,20 +1488,21 @@ describe("<TopSiteList>", () => {
TOP_SITES_DEFAULT_ROWS * TOP_SITES_MAX_SITES_PER_ROW
);
});
- it("should fill with placeholders if TopSites rows is less than TopSitesRows", () => {
+ it("should add a single placeholder is there is availible space in the row", () => {
const rows = [{ url: "https://foo.com" }, { url: "https://bar.com" }];
+ const availibleRows = 1;
const wrapper = shallow(
<TopSiteList
{...DEFAULT_PROPS}
TopSites={{ rows }}
- TopSitesRows={1}
+ TopSitesRows={availibleRows}
App={{ APP }}
/>
);
assert.lengthOf(wrapper.find(TopSite), 2, "topSites");
assert.lengthOf(
wrapper.find(TopSitePlaceholder),
- TOP_SITES_MAX_SITES_PER_ROW - 2,
+ availibleRows >= wrapper.find(TopSite).length ? 0 : 1,
"placeholders"
);
});
@@ -1522,11 +1523,7 @@ describe("<TopSiteList>", () => {
/>
);
assert.lengthOf(wrapper.find(TopSite), 2, "topSites");
- assert.lengthOf(
- wrapper.find(TopSitePlaceholder),
- TOP_SITES_MAX_SITES_PER_ROW - 2,
- "placeholders"
- );
+ assert.lengthOf(wrapper.find(TopSitePlaceholder), 4, "placeholders");
});
it("should fill any holes in TopSites with placeholders", () => {
const rows = [{ url: "https://foo.com" }];
@@ -1540,11 +1537,7 @@ describe("<TopSiteList>", () => {
/>
);
assert.lengthOf(wrapper.find(TopSite), 2, "topSites");
- assert.lengthOf(
- wrapper.find(TopSitePlaceholder),
- TOP_SITES_MAX_SITES_PER_ROW - 2,
- "placeholders"
- );
+ assert.lengthOf(wrapper.find(TopSitePlaceholder), 1, "placeholders");
});
it("should update state onDragStart and clear it onDragEnd", () => {
const wrapper = shallow(<TopSiteList {...DEFAULT_PROPS} App={{ APP }} />);
@@ -1638,6 +1631,7 @@ describe("<TopSiteList>", () => {
App={{ APP }}
/>
);
+ const addButton = { isAddButton: true };
let instance = wrapper.instance();
instance.setState({
draggedIndex: 0,
@@ -1652,7 +1646,7 @@ describe("<TopSiteList>", () => {
site2,
draggedSite,
site3,
- null,
+ addButton,
null,
null,
null,
@@ -1662,7 +1656,7 @@ describe("<TopSiteList>", () => {
site2,
site3,
draggedSite,
- null,
+ addButton,
null,
null,
null,
@@ -1671,7 +1665,7 @@ describe("<TopSiteList>", () => {
assert.deepEqual(instance._makeTopSitesPreview(3), [
site2,
site3,
- null,
+ addButton,
draggedSite,
null,
null,
@@ -1683,7 +1677,7 @@ describe("<TopSiteList>", () => {
site2,
draggedSite,
site3,
- null,
+ addButton,
null,
null,
null,
@@ -1693,7 +1687,7 @@ describe("<TopSiteList>", () => {
site3,
site2,
draggedSite,
- null,
+ addButton,
null,
null,
null,
@@ -1704,7 +1698,7 @@ describe("<TopSiteList>", () => {
site2,
draggedSite,
site3,
- null,
+ addButton,
null,
null,
null,
@@ -1714,7 +1708,7 @@ describe("<TopSiteList>", () => {
site2,
site3,
draggedSite,
- null,
+ addButton,
null,
null,
null,
@@ -1725,7 +1719,7 @@ describe("<TopSiteList>", () => {
site2,
draggedSite,
site3,
- null,
+ addButton,
null,
null,
null,
@@ -1735,7 +1729,7 @@ describe("<TopSiteList>", () => {
site2,
site3,
draggedSite,
- null,
+ addButton,
null,
null,
null,
@@ -1752,7 +1746,7 @@ describe("<TopSiteList>", () => {
draggedSite,
site1,
site3,
- null,
+ addButton,
null,
null,
null,
@@ -1762,7 +1756,7 @@ describe("<TopSiteList>", () => {
site1,
site3,
draggedSite,
- null,
+ addButton,
null,
null,
null,
@@ -1779,7 +1773,7 @@ describe("<TopSiteList>", () => {
draggedSite,
site2,
site1,
- null,
+ addButton,
null,
null,
null,
@@ -1797,7 +1791,7 @@ describe("<TopSiteList>", () => {
draggedSite,
site2,
site1,
- null,
+ addButton,
null,
null,
null,
@@ -1822,13 +1816,13 @@ describe("<TopSiteList>", () => {
});
describe("TopSitePlaceholder", () => {
- it("should dispatch a TOP_SITES_EDIT action when edit-button is clicked", () => {
+ it("should dispatch a TOP_SITES_EDIT action when the addbutton is clicked", () => {
const dispatch = sinon.spy();
const wrapper = shallow(
- <TopSitePlaceholder dispatch={dispatch} index={7} />
+ <TopSitePlaceholder dispatch={dispatch} index={7} isAddButton={true} />
);
- wrapper.find(".edit-button").first().simulate("click");
+ wrapper.find(".add-button").first().simulate("click");
assert.calledOnce(dispatch);
assert.calledWithExactly(dispatch, {
diff --git a/browser/components/newtab/test/unit/lib/AboutPreferences.test.js b/browser/components/newtab/test/unit/lib/AboutPreferences.test.js
index 7438d8247c..20765608fa 100644
--- a/browser/components/newtab/test/unit/lib/AboutPreferences.test.js
+++ b/browser/components/newtab/test/unit/lib/AboutPreferences.test.js
@@ -146,7 +146,7 @@ describe("AboutPreferences Feed", () => {
},
},
createProcessingInstruction: sandbox.stub(),
- createElementNS: sandbox.stub().callsFake((NS, el) => node),
+ createElementNS: sandbox.stub().callsFake(() => node),
getElementById: sandbox.stub().returns(node),
insertBefore: sandbox.stub().returnsArg(0),
querySelector: sandbox
diff --git a/browser/components/newtab/test/unit/lib/ActivityStream.test.js b/browser/components/newtab/test/unit/lib/ActivityStream.test.js
index c127060021..b9deba1069 100644
--- a/browser/components/newtab/test/unit/lib/ActivityStream.test.js
+++ b/browser/components/newtab/test/unit/lib/ActivityStream.test.js
@@ -417,13 +417,11 @@ describe("ActivityStream", () => {
clock = sinon.useFakeTimers();
// Have addObserver cause prefHasUserValue to now return true then observe
- sandbox
- .stub(global.Services.obs, "addObserver")
- .callsFake((pref, obs) => {
- setTimeout(() => {
- Services.obs.notifyObservers("US", "browser-region-updated");
- });
+ sandbox.stub(global.Services.obs, "addObserver").callsFake(() => {
+ setTimeout(() => {
+ Services.obs.notifyObservers("US", "browser-region-updated");
});
+ });
});
afterEach(() => clock.restore());
diff --git a/browser/components/newtab/test/unit/lib/PersonalityProvider/PersonalityProvider.test.js b/browser/components/newtab/test/unit/lib/PersonalityProvider/PersonalityProvider.test.js
index 0058fd7c76..0feabe978e 100644
--- a/browser/components/newtab/test/unit/lib/PersonalityProvider/PersonalityProvider.test.js
+++ b/browser/components/newtab/test/unit/lib/PersonalityProvider/PersonalityProvider.test.js
@@ -19,7 +19,7 @@ describe("Personality Provider", () => {
RemoteSettingsOffStub = sandbox.stub().returns();
RemoteSettingsGetStub = sandbox.stub().returns([]);
- RemoteSettingsStub = name => ({
+ RemoteSettingsStub = () => ({
get: RemoteSettingsGetStub,
on: RemoteSettingsOnStub,
off: RemoteSettingsOffStub,
@@ -142,7 +142,7 @@ describe("Personality Provider", () => {
},
]);
sinon.spy(instance, "getAttachment");
- RemoteSettingsStub = name => ({
+ RemoteSettingsStub = () => ({
get: RemoteSettingsGetStub,
on: RemoteSettingsOnStub,
off: RemoteSettingsOffStub,
diff --git a/browser/components/newtab/test/unit/lib/PersonalityProvider/RecipeExecutor.test.js b/browser/components/newtab/test/unit/lib/PersonalityProvider/RecipeExecutor.test.js
index fdbcae9613..bf8ed1fc2b 100644
--- a/browser/components/newtab/test/unit/lib/PersonalityProvider/RecipeExecutor.test.js
+++ b/browser/components/newtab/test/unit/lib/PersonalityProvider/RecipeExecutor.test.js
@@ -6,7 +6,7 @@ class MockTagger {
this.mode = mode;
this.tagScoreMap = tagScoreMap;
}
- tagTokens(tokens) {
+ tagTokens() {
if (this.mode === "nb") {
// eslint-disable-next-line prefer-destructuring
let tag = Object.keys(this.tagScoreMap)[0];
diff --git a/browser/components/newtab/test/unit/unit-entry.js b/browser/components/newtab/test/unit/unit-entry.js
index 5b32269ca8..73b4b8fcb5 100644
--- a/browser/components/newtab/test/unit/unit-entry.js
+++ b/browser/components/newtab/test/unit/unit-entry.js
@@ -97,8 +97,8 @@ const TEST_GLOBAL = {
JSWindowActorParent,
JSWindowActorChild,
AboutReaderParent: {
- addMessageListener: (messageName, listener) => {},
- removeMessageListener: (messageName, listener) => {},
+ addMessageListener: (_messageName, _listener) => {},
+ removeMessageListener: (_messageName, _listener) => {},
},
AboutWelcomeTelemetry: class {
submitGleanPingForPing() {}
@@ -281,8 +281,8 @@ const TEST_GLOBAL = {
},
dump() {},
EveryWindow: {
- registerCallback: (id, init, uninit) => {},
- unregisterCallback: id => {},
+ registerCallback: (_id, _init, _uninit) => {},
+ unregisterCallback: _id => {},
},
setTimeout: window.setTimeout.bind(window),
clearTimeout: window.clearTimeout.bind(window),
@@ -402,7 +402,7 @@ const TEST_GLOBAL = {
},
urlFormatter: { formatURL: str => str, formatURLPref: str => str },
mm: {
- addMessageListener: (msg, cb) => this.receiveMessage(),
+ addMessageListener: (_msg, _cb) => this.receiveMessage(),
removeMessageListener() {},
},
obs: {
@@ -412,7 +412,7 @@ const TEST_GLOBAL = {
},
telemetry: {
setEventRecordingEnabled: () => {},
- recordEvent: eventDetails => {},
+ recordEvent: _eventDetails => {},
scalarSet: () => {},
keyedScalarAdd: () => {},
},
@@ -570,7 +570,7 @@ const TEST_GLOBAL = {
finish: () => {},
},
Sampling: {
- ratioSample(seed, ratios) {
+ ratioSample(_seed, _ratios) {
return Promise.resolve(0);
},
},
diff --git a/browser/components/newtab/test/unit/utils.js b/browser/components/newtab/test/unit/utils.js
index 22069b8635..e10a284476 100644
--- a/browser/components/newtab/test/unit/utils.js
+++ b/browser/components/newtab/test/unit/utils.js
@@ -176,7 +176,7 @@ export class FakensIPrefBranch {
prefHasUserValue(prefName) {
return this.prefs.has(prefName);
}
- prefIsLocked(prefName) {
+ prefIsLocked(_prefName) {
return false;
}
}
@@ -187,7 +187,7 @@ export class FakensIPrefBranch {
*/
export class FakensIPrefService extends FakensIPrefBranch {
getBranch() {}
- getDefaultBranch(prefix) {
+ getDefaultBranch(_prefix) {
return {
setBoolPref() {},
setIntPref() {},
@@ -208,8 +208,8 @@ export class FakePrefs extends FakensIPrefBranch {
ignore(prefName, callback) {
super.removeObserver(prefName, callback);
}
- observeBranch(listener) {}
- ignoreBranch(listener) {}
+ observeBranch(_listener) {}
+ ignoreBranch(_listener) {}
set(prefName, value) {
this.prefs.set(prefName, value);
@@ -312,7 +312,7 @@ FakePerformance.prototype = {
return 10000.234;
},
// XXX assumes type == "mark"
- getEntriesByName(name, type) {
+ getEntriesByName(name, _type) {
if (this.marks.has(name)) {
return this.marks.get(name);
}
diff --git a/browser/components/newtab/test/xpcshell/test_HighlightsFeed.js b/browser/components/newtab/test/xpcshell/test_HighlightsFeed.js
index 233eb6df73..31a03947cd 100644
--- a/browser/components/newtab/test/xpcshell/test_HighlightsFeed.js
+++ b/browser/components/newtab/test/xpcshell/test_HighlightsFeed.js
@@ -23,7 +23,9 @@ const {
BOOKMARKS_RESTORE_SUCCESS_EVENT,
BOOKMARKS_RESTORE_FAILED_EVENT,
SECTION_ID,
-} = ChromeUtils.import("resource://activity-stream/lib/HighlightsFeed.jsm");
+} = ChromeUtils.importESModule(
+ "resource://activity-stream/lib/HighlightsFeed.sys.mjs"
+);
const FAKE_LINKS = new Array(20)
.fill(null)
diff --git a/browser/components/newtab/test/xpcshell/test_PlacesFeed.js b/browser/components/newtab/test/xpcshell/test_PlacesFeed.js
index 8e7c42d639..19f9e343f5 100644
--- a/browser/components/newtab/test/xpcshell/test_PlacesFeed.js
+++ b/browser/components/newtab/test/xpcshell/test_PlacesFeed.js
@@ -424,7 +424,7 @@ add_task(async function test_onAction_OPEN_LINK() {
data: { url: "https://foo.com" },
_target: {
browser: {
- ownerGlobal: { openTrustedLinkIn, whereToOpenLink: e => "current" },
+ ownerGlobal: { openTrustedLinkIn, whereToOpenLink: () => "current" },
},
},
};
@@ -450,7 +450,7 @@ add_task(async function test_onAction_OPEN_LINK_referrer() {
data: { url: "https://foo.com", referrer: "https://foo.com/ref" },
_target: {
browser: {
- ownerGlobal: { openTrustedLinkIn, whereToOpenLink: e => "tab" },
+ ownerGlobal: { openTrustedLinkIn, whereToOpenLink: () => "tab" },
},
},
};
@@ -496,7 +496,7 @@ add_task(async function test_onAction_OPEN_LINK_typed_bonus() {
},
_target: {
browser: {
- ownerGlobal: { openTrustedLinkIn, whereToOpenLink: e => "tab" },
+ ownerGlobal: { openTrustedLinkIn, whereToOpenLink: () => "tab" },
},
},
};
@@ -524,7 +524,7 @@ add_task(async function test_onAction_OPEN_LINK_pocket() {
},
_target: {
browser: {
- ownerGlobal: { openTrustedLinkIn, whereToOpenLink: e => "current" },
+ ownerGlobal: { openTrustedLinkIn, whereToOpenLink: () => "current" },
},
},
};
@@ -551,7 +551,7 @@ add_task(async function test_onAction_OPEN_LINK_not_http() {
data: { url: "file:///foo.com" },
_target: {
browser: {
- ownerGlobal: { openTrustedLinkIn, whereToOpenLink: e => "current" },
+ ownerGlobal: { openTrustedLinkIn, whereToOpenLink: () => "current" },
},
},
};
diff --git a/browser/components/newtab/test/xpcshell/test_Store.js b/browser/components/newtab/test/xpcshell/test_Store.js
index b05ad36cd6..d872aed61c 100644
--- a/browser/components/newtab/test/xpcshell/test_Store.js
+++ b/browser/components/newtab/test/xpcshell/test_Store.js
@@ -41,7 +41,7 @@ add_task(async function test_messagechannel() {
let sandbox = sinon.createSandbox();
sandbox
.stub(ActivityStreamMessageChannel.prototype, "middleware")
- .returns(s => next => action => next(action));
+ .returns(() => next => action => next(action));
let store = new Store();
info(
diff --git a/browser/components/newtab/test/xpcshell/test_TelemetryFeed.js b/browser/components/newtab/test/xpcshell/test_TelemetryFeed.js
index b54d6094ad..59d82f5583 100644
--- a/browser/components/newtab/test/xpcshell/test_TelemetryFeed.js
+++ b/browser/components/newtab/test/xpcshell/test_TelemetryFeed.js
@@ -2860,6 +2860,38 @@ add_task(async function test_handleDiscoveryStreamUserEvent_popular_click() {
sandbox.restore();
});
+add_task(async function test_handleDiscoveryStreamUserEvent_tooltip_click() {
+ info(
+ "TelemetryFeed.handleDiscoveryStreamUserEvent instruments a " +
+ "tooltip click"
+ );
+
+ let sandbox = sinon.createSandbox();
+ let instance = new TelemetryFeed();
+ Services.fog.testResetFOG();
+ const feature = "SPONSORED_CONTENT_INFO";
+ let action = ac.DiscoveryStreamUserEvent({
+ event: "CLICK",
+ source: "FEATURE_HIGHLIGHT",
+ value: {
+ feature,
+ },
+ });
+
+ const SESSION_ID = "decafc0ffee";
+ sandbox.stub(instance.sessions, "get").returns({ session_id: SESSION_ID });
+
+ instance.handleDiscoveryStreamUserEvent(action);
+ let tooltipClicks = Glean.newtab.tooltipClick.testGetValue();
+ Assert.equal(tooltipClicks.length, 1, "Recorded 1 click");
+ Assert.deepEqual(tooltipClicks[0].extra, {
+ newtab_visit_id: SESSION_ID,
+ feature,
+ });
+
+ sandbox.restore();
+});
+
add_task(
async function test_handleDiscoveryStreamUserEvent_organic_top_stories_click() {
info(
diff --git a/browser/components/newtab/test/xpcshell/xpcshell.toml b/browser/components/newtab/test/xpcshell/xpcshell.toml
index a8470913af..87d73669d3 100644
--- a/browser/components/newtab/test/xpcshell/xpcshell.toml
+++ b/browser/components/newtab/test/xpcshell/xpcshell.toml
@@ -14,12 +14,6 @@ skip-if = ["socketprocess_networking"] # Bug 1759035
["test_AboutNewTab.js"]
-["test_AboutWelcomeAttribution.js"]
-
-["test_AboutWelcomeTelemetry.js"]
-
-["test_AboutWelcomeTelemetry_glean.js"]
-
["test_HighlightsFeed.js"]
["test_PlacesFeed.js"]
diff --git a/browser/components/newtab/tools/resourceUriPlugin.js b/browser/components/newtab/tools/resourceUriPlugin.js
index 938822f410..a2244f27fa 100644
--- a/browser/components/newtab/tools/resourceUriPlugin.js
+++ b/browser/components/newtab/tools/resourceUriPlugin.js
@@ -6,6 +6,8 @@
// and translating the uri into a relative filesytem path where the file may be
// found when running within the Karma / Mocha test framework.
+const path = require("path");
+
module.exports = {
ResourceUriPlugin: class ResourceUriPlugin {
/**
@@ -48,7 +50,12 @@ module.exports = {
if (!url.href.match(regex)) {
continue;
}
- const pathname = url.href.replace(regex, replacement);
+ // path.join() is necessary to normalize the path on Windows.
+ // Without it, the path may contain backslashes, resulting in
+ // different build output on Windows than on Unix systems.
+ const pathname = path.join(
+ url.href.replace(regex, replacement)
+ );
resourceData.path = pathname;
resourceData.query = url.search;
resourceData.fragment = url.hash;
diff --git a/browser/components/newtab/webpack.system-addon.config.js b/browser/components/newtab/webpack.system-addon.config.js
index 8f54186ab4..a0400ec39e 100644
--- a/browser/components/newtab/webpack.system-addon.config.js
+++ b/browser/components/newtab/webpack.system-addon.config.js
@@ -50,9 +50,6 @@ module.exports = (env = {}) => ({
resolve: {
extensions: [".js", ".jsx"],
modules: ["node_modules", "."],
- fallback: {
- stream: require.resolve("stream-browserify"),
- },
},
externals: {
"prop-types": "PropTypes",
diff --git a/browser/components/originattributes/test/browser/browser_firstPartyIsolation_saveAs.js b/browser/components/originattributes/test/browser/browser_firstPartyIsolation_saveAs.js
index b51ac12849..c54bb1aec1 100644
--- a/browser/components/originattributes/test/browser/browser_firstPartyIsolation_saveAs.js
+++ b/browser/components/originattributes/test/browser/browser_firstPartyIsolation_saveAs.js
@@ -27,7 +27,7 @@ const TEST_PATH_PAGE = `${TEST_BASE_PATH}file_favicon.png`;
const TEST_PATH_FRAME = `${TEST_BASE_PATH}file_favicon.png`;
let MockFilePicker = SpecialPowers.MockFilePicker;
-MockFilePicker.init(window);
+MockFilePicker.init(window.browsingContext);
const tempDir = createTemporarySaveDirectory();
MockFilePicker.displayDirectory = tempDir;
@@ -38,6 +38,7 @@ add_setup(async function () {
set: [
["privacy.firstparty.isolate", true],
["dom.security.https_first", false],
+ ["dom.block_download_insecure", false],
],
});
diff --git a/browser/components/originattributes/test/browser/browser_httpauth.js b/browser/components/originattributes/test/browser/browser_httpauth.js
index 085d493c1b..b2e95e13ac 100644
--- a/browser/components/originattributes/test/browser/browser_httpauth.js
+++ b/browser/components/originattributes/test/browser/browser_httpauth.js
@@ -6,11 +6,6 @@ let authPromptModalType = Services.prefs.getIntPref(
"prompts.modalType.httpAuth"
);
-let commonDialogEnabled =
- authPromptModalType === Services.prompt.MODAL_TYPE_WINDOW ||
- (authPromptModalType === Services.prompt.MODAL_TYPE_TAB &&
- Services.prefs.getBoolPref("prompts.tabChromePromptSubDialog"));
-
let server = new HttpServer();
server.registerPathHandler("/file.html", fileHandler);
server.start(-1);
@@ -38,23 +33,15 @@ function fileHandler(metadata, response) {
}
function onCommonDialogLoaded(subject) {
- let dialog;
- if (commonDialogEnabled) {
- dialog = subject.Dialog;
- } else {
- let promptBox =
- subject.ownerGlobal.gBrowser.selectedBrowser.tabModalPromptBox;
- dialog = promptBox.getPrompt(subject).Dialog;
- }
+ let dialog = subject.Dialog;
+
// Submit random account and password
dialog.ui.loginTextbox.setAttribute("value", Math.random());
dialog.ui.password1Textbox.setAttribute("value", Math.random());
dialog.ui.button0.click();
}
-let authPromptTopic = commonDialogEnabled
- ? "common-dialog-loaded"
- : "tabmodal-dialog-loaded";
+let authPromptTopic = "common-dialog-loaded";
Services.obs.addObserver(onCommonDialogLoaded, authPromptTopic);
registerCleanupFunction(() => {
diff --git a/browser/components/places/Interactions.sys.mjs b/browser/components/places/Interactions.sys.mjs
index b8a6b44805..36c629eb82 100644
--- a/browser/components/places/Interactions.sys.mjs
+++ b/browser/components/places/Interactions.sys.mjs
@@ -448,11 +448,8 @@ class _Interactions {
/**
* Handles a window going inactive.
- *
- * @param {DOMWindow} win
- * The window that is going inactive.
*/
- #onDeactivateWindow(win) {
+ #onDeactivateWindow() {
lazy.logConsole.debug("Window deactivate");
this.#updateInteraction();
@@ -504,10 +501,8 @@ class _Interactions {
* The subject of the notification.
* @param {string} topic
* The topic of the notification.
- * @param {string} data
- * The data attached to the notification.
*/
- observe(subject, topic, data) {
+ observe(subject, topic) {
switch (topic) {
case DOMWINDOW_OPENED_TOPIC:
this.#onWindowOpen(subject);
@@ -617,7 +612,7 @@ class InteractionsStore {
// Block async shutdown to ensure the last write goes through.
this.progress = {};
lazy.PlacesUtils.history.shutdownClient.jsclient.addBlocker(
- "Interactions.jsm:: store",
+ "Interactions.sys.mjs:: store",
async () => this.flush(),
{ fetchState: () => this.progress }
);
@@ -645,7 +640,7 @@ class InteractionsStore {
*/
async reset() {
await lazy.PlacesUtils.withConnectionWrapper(
- "Interactions.jsm::reset",
+ "Interactions.sys.mjs::reset",
async db => {
await db.executeCached(`DELETE FROM moz_places_metadata`);
}
@@ -740,7 +735,7 @@ class InteractionsStore {
this.progress.pendingUpdates = i;
await lazy.PlacesUtils.withConnectionWrapper(
- "Interactions.jsm::updateDatabase",
+ "Interactions.sys.mjs::updateDatabase",
async db => {
await db.executeCached(
`
diff --git a/browser/components/places/PlacesUIUtils.sys.mjs b/browser/components/places/PlacesUIUtils.sys.mjs
index 415a97ec6c..b9e9efe70e 100644
--- a/browser/components/places/PlacesUIUtils.sys.mjs
+++ b/browser/components/places/PlacesUIUtils.sys.mjs
@@ -41,8 +41,6 @@ let InternalFaviconLoader = {
* The options object containing:
* @param {object} options.uri
* The URI of the favicon to cancel.
- * @param {number} options.innerWindowID
- * The inner window ID of the window. Unused.
* @param {number} options.timerID
* The timer ID of the timeout to be cancelled
* @param {*} options.callback
@@ -50,7 +48,7 @@ let InternalFaviconLoader = {
* @param {string} reason
* The reason for cancelling the request.
*/
- _cancelRequest({ uri, innerWindowID, timerID, callback }, reason) {
+ _cancelRequest({ uri, timerID, callback }, reason) {
// Break cycle
let request = callback.request;
delete callback.request;
@@ -1232,8 +1230,8 @@ export var PlacesUIUtils = {
* Helpers for consumers of editBookmarkOverlay which don't have a node as their input.
*
* Given a bookmark object for either a url bookmark or a folder, returned by
- * Bookmarks.fetch (see Bookmark.jsm), this creates a node-like object suitable for
- * initialising the edit overlay with it.
+ * Bookmarks.fetch (see Bookmark.sys.mjs), this creates a node-like object
+ * suitable for initialising the edit overlay with it.
*
* @param {object} aFetchInfo
* a bookmark object returned by Bookmarks.fetch.
diff --git a/browser/components/places/content/browserPlacesViews.js b/browser/components/places/content/browserPlacesViews.js
index 35cdd2b9d5..1d849e3297 100644
--- a/browser/components/places/content/browserPlacesViews.js
+++ b/browser/components/places/content/browserPlacesViews.js
@@ -277,7 +277,7 @@ class PlacesViewBase {
return this.controller.buildContextMenu(aPopup);
}
- destroyContextMenu(aPopup) {
+ destroyContextMenu() {
this._contextMenuShown = null;
}
@@ -458,7 +458,7 @@ class PlacesViewBase {
}
}
- nodeURIChanged(aPlacesNode, aURIString) {
+ nodeURIChanged(aPlacesNode) {
let elt = this._getDOMNodeForPlacesNode(aPlacesNode, true);
// There's no DOM node, thus there's nothing to be done when the URI changes.
@@ -519,7 +519,7 @@ class PlacesViewBase {
}
}
- nodeRemoved(aParentPlacesNode, aPlacesNode, aIndex) {
+ nodeRemoved(aParentPlacesNode, aPlacesNode) {
let parentElt = this._getDOMNodeForPlacesNode(aParentPlacesNode);
let elt = this._getDOMNodeForPlacesNode(aPlacesNode);
@@ -1689,7 +1689,7 @@ class PlacesToolbar extends PlacesViewBase {
}
}
- _onMouseOut(aEvent) {
+ _onMouseOut() {
window.XULBrowserWindow.setOverLink("");
}
@@ -1852,7 +1852,7 @@ class PlacesToolbar extends PlacesViewBase {
aEvent.stopPropagation();
}
- _onDragLeave(aEvent) {
+ _onDragLeave() {
PlacesControllerDragHelper.currentDropTarget = null;
this._dropIndicator.collapsed = true;
@@ -1863,7 +1863,7 @@ class PlacesToolbar extends PlacesViewBase {
}
}
- _onDragEnd(aEvent) {
+ _onDragEnd() {
this._cleanupDragDetails();
}
diff --git a/browser/components/places/content/controller.js b/browser/components/places/content/controller.js
index 3c113137df..6eaa129961 100644
--- a/browser/components/places/content/controller.js
+++ b/browser/components/places/content/controller.js
@@ -102,7 +102,7 @@ PlacesController.prototype = {
QueryInterface: ChromeUtils.generateQI(["nsIClipboardOwner"]),
// nsIClipboardOwner
- LosingOwnership: function PC_LosingOwnership(aXferable) {
+ LosingOwnership: function PC_LosingOwnership() {
this.cutNodes = [];
},
@@ -333,7 +333,7 @@ PlacesController.prototype = {
}
},
- onEvent: function PC_onEvent(eventName) {},
+ onEvent: function PC_onEvent() {},
/**
* Determine whether or not the selection can be removed, either by the
@@ -378,8 +378,12 @@ PlacesController.prototype = {
*/
_isRepeatedRemoveOperation() {
let lastRemoveOperationFingerprint = this._lastRemoveOperationFingerprint;
+ // .bookmarkGuid and .pageGuid may either be null or an empty string. While
+ // that should probably change, it's safer to use || here.
this._lastRemoveOperationFingerprint = PlacesUtils.sha256(
- this._view.selectedNodes.map(n => n.guid ?? n.uri).join()
+ this._view.selectedNodes
+ .map(n => n.bookmarkGuid || (n.pageGuid || n.uri) + n.time)
+ .join()
);
return (
lastRemoveOperationFingerprint == this._lastRemoveOperationFingerprint
diff --git a/browser/components/places/content/places-menupopup.js b/browser/components/places/content/places-menupopup.js
index 1d7615aa27..df00268563 100644
--- a/browser/components/places/content/places-menupopup.js
+++ b/browser/components/places/content/places-menupopup.js
@@ -583,7 +583,7 @@ function closingPopupEndsDrag(popup) {
event.stopPropagation();
}
- on_dragend(event) {
+ on_dragend() {
this._cleanupDragDetails();
}
}
diff --git a/browser/components/places/content/places-tree.js b/browser/components/places/content/places-tree.js
index 08437b5e08..9e43558732 100644
--- a/browser/components/places/content/places-tree.js
+++ b/browser/components/places/content/places-tree.js
@@ -15,14 +15,14 @@
constructor() {
super();
- this.addEventListener("focus", event => {
+ this.addEventListener("focus", () => {
this._cachedInsertionPoint = undefined;
// See select handler. We need the sidebar's places commandset to be
// updated as well
document.commandDispatcher.updateCommands("focus");
});
- this.addEventListener("select", event => {
+ this.addEventListener("select", () => {
this._cachedInsertionPoint = undefined;
// This additional complexity is here for the sidebars
@@ -125,7 +125,7 @@
event.stopPropagation();
});
- this.addEventListener("dragend", event => {
+ this.addEventListener("dragend", () => {
this._isDragSource = false;
PlacesControllerDragHelper.currentDropTarget = null;
});
@@ -841,7 +841,7 @@
return this.controller.buildContextMenu(aPopup);
}
- destroyContextMenu(aPopup) {}
+ destroyContextMenu() {}
disconnectedCallback() {
window.removeEventListener("unload", this.disconnectedCallback);
diff --git a/browser/components/places/content/places.js b/browser/components/places/content/places.js
index b58cee70d5..685fa12b51 100644
--- a/browser/components/places/content/places.js
+++ b/browser/components/places/content/places.js
@@ -500,7 +500,7 @@ var PlacesOrganizer = {
};
fp.init(
- window,
+ window.browsingContext,
PlacesUIUtils.promptLocalization.formatValueSync(
"places-bookmarks-import"
),
@@ -525,7 +525,7 @@ var PlacesOrganizer = {
};
fp.init(
- window,
+ window.browsingContext,
PlacesUIUtils.promptLocalization.formatValueSync(
"places-bookmarks-export"
),
@@ -638,7 +638,7 @@ var PlacesOrganizer = {
"places-bookmarks-restore-title",
"places-bookmarks-restore-filter-name",
]);
- fp.init(window, title, Ci.nsIFilePicker.modeOpen);
+ fp.init(window.browsingContext, title, Ci.nsIFilePicker.modeOpen);
fp.appendFilter(filterName, RESTORE_FILEPICKER_FILTER_EXT);
fp.appendFilters(Ci.nsIFilePicker.filterAll);
fp.displayDirectory = backupsDir;
@@ -711,7 +711,7 @@ var PlacesOrganizer = {
"places-bookmarks-backup-title",
"places-bookmarks-restore-filter-name",
]);
- fp.init(window, title, Ci.nsIFilePicker.modeSave);
+ fp.init(window.browsingContext, title, Ci.nsIFilePicker.modeSave);
fp.appendFilter(filterName, RESTORE_FILEPICKER_FILTER_EXT);
fp.defaultString = PlacesBackups.getFilenameForDate();
fp.defaultExtension = "json";
diff --git a/browser/components/places/content/treeView.js b/browser/components/places/content/treeView.js
index f9b6eb6f9a..2a9c483113 100644
--- a/browser/components/places/content/treeView.js
+++ b/browser/components/places/content/treeView.js
@@ -927,7 +927,7 @@ PlacesTreeView.prototype = {
}
},
- nodeTitleChanged: function PTV_nodeTitleChanged(aNode, aNewTitle) {
+ nodeTitleChanged: function PTV_nodeTitleChanged(aNode) {
this._invalidateCellValue(aNode, this.COLUMN_TYPE_TITLE);
},
@@ -949,8 +949,7 @@ PlacesTreeView.prototype = {
nodeHistoryDetailsChanged: function PTV_nodeHistoryDetailsChanged(
aNode,
- aOldVisitDate,
- aOldVisitCount
+ aOldVisitDate
) {
this._nodeDetails.delete(
makeNodeDetailsKey({
@@ -969,24 +968,17 @@ PlacesTreeView.prototype = {
this._invalidateCellValue(aNode, this.COLUMN_TYPE_TAGS);
},
- nodeKeywordChanged(aNode, aNewKeyword) {},
+ nodeKeywordChanged() {},
- nodeDateAddedChanged: function PTV_nodeDateAddedChanged(aNode, aNewValue) {
+ nodeDateAddedChanged: function PTV_nodeDateAddedChanged(aNode) {
this._invalidateCellValue(aNode, this.COLUMN_TYPE_DATEADDED);
},
- nodeLastModifiedChanged: function PTV_nodeLastModifiedChanged(
- aNode,
- aNewValue
- ) {
+ nodeLastModifiedChanged: function PTV_nodeLastModifiedChanged(aNode) {
this._invalidateCellValue(aNode, this.COLUMN_TYPE_LASTMODIFIED);
},
- containerStateChanged: function PTV_containerStateChanged(
- aNode,
- aOldState,
- aNewState
- ) {
+ containerStateChanged: function PTV_containerStateChanged(aNode) {
this.invalidateContainer(aNode);
},
@@ -1340,7 +1332,7 @@ PlacesTreeView.prototype = {
return props + " " + properties;
},
- getColumnProperties(aColumn) {
+ getColumnProperties() {
return "";
},
@@ -1576,7 +1568,7 @@ PlacesTreeView.prototype = {
return node.icon;
},
- getCellValue(aRow, aColumn) {},
+ getCellValue() {},
getCellText: function PTV_getCellText(aRow, aColumn) {
let node = this._getNodeForRow(aRow);
@@ -1858,5 +1850,5 @@ PlacesTreeView.prototype = {
},
selectionChanged() {},
- cycleCell(aRow, aColumn) {},
+ cycleCell() {},
};
diff --git a/browser/components/places/docs/Bookmarks.rst b/browser/components/places/docs/Bookmarks.rst
index 1c830c74ef..a7db0004f3 100644
--- a/browser/components/places/docs/Bookmarks.rst
+++ b/browser/components/places/docs/Bookmarks.rst
@@ -1,5 +1,5 @@
-Bookmarks.jsm
-=============
+Bookmarks.sys.mjs
+=================
Asynchronous API for managing bookmarks.
Bookmarks are organized in a tree structure, and include URLs, folders and separators. Multiple bookmarks for the same URL are allowed.
@@ -47,4 +47,4 @@ Main functions
Each successful operation is notified through the PlacesObservers :doc:`notifyObservers` interface.
-Full file with actual javadoc and description of each method - `Bookmarks.jsm`_
+Full file with actual javadoc and description of each method - `Bookmarks.sys.mjs`_
diff --git a/browser/components/places/docs/History.rst b/browser/components/places/docs/History.rst
index 5dbf3704dc..6eba0164e3 100644
--- a/browser/components/places/docs/History.rst
+++ b/browser/components/places/docs/History.rst
@@ -1,5 +1,5 @@
-History.jsm
-===========
+History.sys.mjs
+===============
Asynchronous API for managing history.
@@ -40,4 +40,4 @@ Main functions
Each successful operation is notified through the PlacesObservers :doc:`notifyObservers` interface.
-Full file with actual javadoc and description of each method - `History.jsm`_
+Full file with actual javadoc and description of each method - `History.sys.mjs`_
diff --git a/browser/components/places/docs/architecture-overview.rst b/browser/components/places/docs/architecture-overview.rst
index 76c93aa8b3..a7b0ac9a22 100644
--- a/browser/components/places/docs/architecture-overview.rst
+++ b/browser/components/places/docs/architecture-overview.rst
@@ -86,7 +86,7 @@ Most part of backend code is located in : `Toolkit/Components/Places`_:
- :doc:`PlacesTransactions` - This module serves as the transactions manager for Places
.. _Toolkit/Components/Places: https://searchfox.org/mozilla-central/source/toolkit/components/places
- .. _PlacesUtils: https://searchfox.org/mozilla-central/source/toolkit/components/places/PlacesUtils.jsm
+ .. _PlacesUtils: https://searchfox.org/mozilla-central/source/toolkit/components/places/PlacesUtils.sys.mjs
Storage
-------
diff --git a/browser/components/places/tests/browser/browser.toml b/browser/components/places/tests/browser/browser.toml
index 1b0e2571d4..8a971684f8 100644
--- a/browser/components/places/tests/browser/browser.toml
+++ b/browser/components/places/tests/browser/browser.toml
@@ -48,13 +48,6 @@ skip-if = ["os != 'mac'"] # Mac-only functionality
["browser_bookmark_add_tags.js"]
https_first_disabled = true
-["browser_bookmark_all_tabs.js"]
-https_first_disabled = true
-support-files = [
- "bookmark_dummy_1.html",
- "bookmark_dummy_2.html",
-]
-
["browser_bookmark_backup_export_import.js"]
["browser_bookmark_change_location.js"]
@@ -63,6 +56,8 @@ support-files = [
["browser_bookmark_copy_folder_tree.js"]
+["browser_bookmark_current_tabs.js"]
+
["browser_bookmark_folder_moveability.js"]
["browser_bookmark_menu_ctrl_click.js"]
diff --git a/browser/components/places/tests/browser/browser_autoshow_bookmarks_toolbar.js b/browser/components/places/tests/browser/browser_autoshow_bookmarks_toolbar.js
index c841eb276b..0dccc88d23 100644
--- a/browser/components/places/tests/browser/browser_autoshow_bookmarks_toolbar.js
+++ b/browser/components/places/tests/browser/browser_autoshow_bookmarks_toolbar.js
@@ -77,7 +77,7 @@ async function checkResponse({ showToolbar, expectedFolder, reason }) {
add_task(async function test_new_on_toolbar() {
await BrowserTestUtils.withNewTab(
{ gBrowser: win.gBrowser, url: "https://example.com/1" },
- async browser => {
+ async () => {
let toolbar = win.document.getElementById("PersonalToolbar");
Assert.equal(
toolbar.collapsed,
@@ -111,7 +111,7 @@ add_task(async function test_new_on_toolbar_never_show_toolbar() {
await BrowserTestUtils.withNewTab(
{ gBrowser: win.gBrowser, url: "https://example.com/1" },
- async browser => {
+ async () => {
let toolbar = win.document.getElementById("PersonalToolbar");
Assert.equal(
toolbar.collapsed,
@@ -144,7 +144,7 @@ add_task(async function test_existing_on_toolbar() {
});
await BrowserTestUtils.withNewTab(
{ gBrowser: win.gBrowser, url: "https://example.com/editing-test" },
- async browser => {
+ async () => {
await TestUtils.waitForCondition(
() => win.BookmarkingUI.status == BookmarkingUI.STATUS_STARRED,
"Page should be starred."
diff --git a/browser/components/places/tests/browser/browser_bookmarkProperties_no_user_actions.js b/browser/components/places/tests/browser/browser_bookmarkProperties_no_user_actions.js
index 67d1406bc1..09dc0c7e45 100644
--- a/browser/components/places/tests/browser/browser_bookmarkProperties_no_user_actions.js
+++ b/browser/components/places/tests/browser/browser_bookmarkProperties_no_user_actions.js
@@ -50,10 +50,10 @@ add_task(async function test_change_title_from_BookmarkStar() {
mozCursor: "auto",
mozItemCount: 1,
types: [PlacesUtils.TYPE_X_MOZ_PLACE],
- mozTypesAt(i) {
+ mozTypesAt() {
return this.types;
},
- mozGetDataAt(i) {
+ mozGetDataAt() {
return bookmarkWithId;
},
};
diff --git a/browser/components/places/tests/browser/browser_bookmark_all_tabs.js b/browser/components/places/tests/browser/browser_bookmark_all_tabs.js
deleted file mode 100644
index 2852bf4019..0000000000
--- a/browser/components/places/tests/browser/browser_bookmark_all_tabs.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Test for Bug 446171 - Name field of bookmarks saved via 'Bookmark All Tabs'
- * has '(null)' value if history is disabled or just in private browsing mode
- */
-"use strict";
-
-add_task(async function () {
- const BASE_URL =
- "http://example.org/browser/browser/components/places/tests/browser/";
- const TEST_PAGES = [
- BASE_URL + "bookmark_dummy_1.html",
- BASE_URL + "bookmark_dummy_2.html",
- BASE_URL + "bookmark_dummy_1.html",
- ];
-
- function promiseAddTab(url) {
- return BrowserTestUtils.openNewForegroundTab(gBrowser, url);
- }
-
- let tabs = await Promise.all(TEST_PAGES.map(promiseAddTab));
-
- let URIs = PlacesCommandHook.uniqueCurrentPages;
- is(URIs.length, 3, "Only unique pages are returned");
-
- Assert.deepEqual(
- URIs.map(URI => URI.uri.spec),
- [
- "about:blank",
- BASE_URL + "bookmark_dummy_1.html",
- BASE_URL + "bookmark_dummy_2.html",
- ],
- "Correct URIs are returned"
- );
-
- Assert.deepEqual(
- URIs.map(URI => URI.title),
- ["New Tab", "Bookmark Dummy 1", "Bookmark Dummy 2"],
- "Correct titles are returned"
- );
-
- registerCleanupFunction(async function () {
- for (let tab of tabs) {
- BrowserTestUtils.removeTab(tab);
- }
- });
-});
diff --git a/browser/components/places/tests/browser/browser_bookmark_backup_export_import.js b/browser/components/places/tests/browser/browser_bookmark_backup_export_import.js
index 8b954a8469..356e9e8d78 100644
--- a/browser/components/places/tests/browser/browser_bookmark_backup_export_import.js
+++ b/browser/components/places/tests/browser/browser_bookmark_backup_export_import.js
@@ -94,7 +94,7 @@ async function validateImportedBookmarks(fromPlaces) {
}
}
-async function promiseImportExport(aWindow) {
+async function promiseImportExport() {
saveDir = Services.dirsvc.get("TmpD", Ci.nsIFile);
saveDir.append("temp-bookmarks-export");
if (!saveDir.exists()) {
diff --git a/browser/components/places/tests/browser/browser_bookmark_context_menu_contents.js b/browser/components/places/tests/browser/browser_bookmark_context_menu_contents.js
index ac9120d3d6..16aeb08ad8 100644
--- a/browser/components/places/tests/browser/browser_bookmark_context_menu_contents.js
+++ b/browser/components/places/tests/browser/browser_bookmark_context_menu_contents.js
@@ -377,7 +377,7 @@ add_task(async function test_sidebar_folder_contextmenu_contents() {
await withSidebarTree("bookmarks", async tree => {
await checkContextMenu(
- async bookmark => {
+ async () => {
let folder = await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.toolbarGuid,
title: "folder",
@@ -416,7 +416,7 @@ add_task(async function test_sidebar_multiple_folders_contextmenu_contents() {
await withSidebarTree("bookmarks", async tree => {
await checkContextMenu(
- async bookmark => {
+ async () => {
let folder1 = await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.toolbarGuid,
title: "folder 1",
@@ -556,7 +556,7 @@ add_task(async function test_library_bookmark_contextmenu_contents() {
);
}
- await withLibraryWindow("BookmarksToolbar", async ({ left, right }) => {
+ await withLibraryWindow("BookmarksToolbar", async ({ right }) => {
await checkContextMenu(
async bookmark => {
let contextMenu = right.ownerDocument.getElementById("placesContext");
@@ -594,7 +594,7 @@ add_task(async function test_library_bookmark_search_contextmenu_contents() {
);
}
- await withLibraryWindow("BookmarksToolbar", async ({ left, right }) => {
+ await withLibraryWindow("BookmarksToolbar", async ({ right }) => {
await checkContextMenu(
async bookmark => {
info("Checking bookmark library menu contents in search context");
@@ -704,7 +704,7 @@ add_task(async function test_sidebar_multiple_links_contextmenu_contents() {
await withSidebarTree("history", async tree => {
await checkContextMenu(
- async bookmark => {
+ async () => {
await PlacesTestUtils.addVisits([
"http://example-1.com/",
"http://example-2.com/",
@@ -774,9 +774,9 @@ add_task(async function test_library_noselection_contextmenu_contents() {
"placesContext_paste",
];
- await withLibraryWindow("BookmarksToolbar", async ({ left, right }) => {
+ await withLibraryWindow("BookmarksToolbar", async ({ right }) => {
await checkContextMenu(
- async bookmark => {
+ async () => {
let contextMenu = right.ownerDocument.getElementById("placesContext");
let popupShownPromise = BrowserTestUtils.waitForEvent(
contextMenu,
diff --git a/browser/components/places/tests/browser/browser_bookmark_current_tabs.js b/browser/components/places/tests/browser/browser_bookmark_current_tabs.js
new file mode 100644
index 0000000000..a6dd77d4c5
--- /dev/null
+++ b/browser/components/places/tests/browser/browser_bookmark_current_tabs.js
@@ -0,0 +1,71 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const { MockRegistrar } = ChromeUtils.importESModule(
+ "resource://testing-common/MockRegistrar.sys.mjs"
+);
+
+add_setup(() => {
+ let mockPromptService = {
+ confirmExBC() {
+ return 0;
+ },
+ QueryInterface: ChromeUtils.generateQI(["nsIPromptService"]),
+ };
+ let mockPromptServiceCID = MockRegistrar.register(
+ "@mozilla.org/prompter;1",
+ mockPromptService
+ );
+ registerCleanupFunction(() => {
+ MockRegistrar.unregister(mockPromptServiceCID);
+ });
+});
+
+add_task(async function bookmarkPage() {
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "https://user:pass@example.com/"
+ );
+
+ let promiseBookmark = PlacesTestUtils.waitForNotification(
+ "bookmark-added",
+ () => true
+ );
+ PlacesCommandHook.bookmarkPage();
+ await promiseBookmark;
+
+ let bookmark = await PlacesUtils.bookmarks.fetch({
+ url: "https://example.com/",
+ });
+ Assert.ok(bookmark, "Found the expected bookmark");
+
+ BrowserTestUtils.removeTab(tab);
+ await PlacesUtils.bookmarks.eraseEverything();
+});
+
+add_task(async function bookmarkTabs() {
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "https://user:pass@example.com/"
+ );
+
+ await withBookmarksDialog(
+ false,
+ PlacesCommandHook.bookmarkTabs,
+ async dialog => {
+ dialog.document
+ .getElementById("bookmarkpropertiesdialog")
+ .getButton("accept")
+ .click();
+ }
+ );
+
+ let bookmark = await PlacesUtils.bookmarks.fetch({
+ url: "https://example.com/",
+ });
+ Assert.ok(bookmark, "Found the expected bookmark");
+
+ BrowserTestUtils.removeTab(tab);
+ await PlacesUtils.bookmarks.eraseEverything();
+});
diff --git a/browser/components/places/tests/browser/browser_bookmark_popup.js b/browser/components/places/tests/browser/browser_bookmark_popup.js
index 616755b7e1..3f9e85b683 100644
--- a/browser/components/places/tests/browser/browser_bookmark_popup.js
+++ b/browser/components/places/tests/browser/browser_bookmark_popup.js
@@ -345,7 +345,7 @@ add_task(async function bookmark_with_invalid_default_folder() {
await test_bookmarks_popup({
isNewBookmark: true,
shouldAutoClose: true,
- async popupShowFn(browser) {
+ async popupShowFn() {
EventUtils.synthesizeKey("d", { accelKey: true }, win);
},
});
@@ -510,7 +510,7 @@ add_task(async function contextmenu_new_bookmark_keypress_no_autoclose() {
add_task(async function bookmarks_menu_new_bookmark_remove_bookmark() {
await test_bookmarks_popup({
isNewBookmark: true,
- popupShowFn(browser) {
+ popupShowFn() {
win.document.getElementById("menu_bookmarkThisPage").doCommand();
},
shouldAutoClose: true,
@@ -524,7 +524,7 @@ add_task(async function bookmarks_menu_new_bookmark_remove_bookmark() {
add_task(async function ctrl_d_edit_bookmark_remove_bookmark() {
await test_bookmarks_popup({
isNewBookmark: false,
- popupShowFn(browser) {
+ popupShowFn() {
EventUtils.synthesizeKey("D", { accelKey: true }, win);
},
shouldAutoClose: true,
@@ -544,7 +544,7 @@ add_task(async function enter_on_remove_bookmark_should_remove_bookmark() {
await test_bookmarks_popup({
isNewBookmark: true,
- popupShowFn(browser) {
+ popupShowFn() {
EventUtils.synthesizeKey("D", { accelKey: true }, win);
},
shouldAutoClose: true,
@@ -589,7 +589,7 @@ add_task(async function mouse_hovering_panel_should_prevent_autoclose() {
add_task(async function ctrl_d_new_bookmark_mousedown_mouseout_no_autoclose() {
await test_bookmarks_popup({
isNewBookmark: true,
- popupShowFn(browser) {
+ popupShowFn() {
EventUtils.synthesizeKey("D", { accelKey: true }, win);
},
async popupEditFn() {
@@ -635,7 +635,7 @@ add_task(async function ctrl_d_new_bookmark_mousedown_mouseout_no_autoclose() {
add_task(async function enter_during_autocomplete_should_prevent_autoclose() {
await test_bookmarks_popup({
isNewBookmark: false,
- async popupShowFn(browser) {
+ async popupShowFn() {
PlacesUtils.tagging.tagURI(makeURI(TEST_URL), ["Abc"]);
EventUtils.synthesizeKey("d", { accelKey: true }, win);
},
@@ -673,7 +673,7 @@ add_task(async function enter_during_autocomplete_should_prevent_autoclose() {
add_task(async function escape_during_autocomplete_should_prevent_autoclose() {
await test_bookmarks_popup({
isNewBookmark: false,
- async popupShowFn(browser) {
+ async popupShowFn() {
PlacesUtils.tagging.tagURI(makeURI(TEST_URL), ["Abc"]);
EventUtils.synthesizeKey("d", { accelKey: true }, win);
},
diff --git a/browser/components/places/tests/browser/browser_bookmarksProperties.js b/browser/components/places/tests/browser/browser_bookmarksProperties.js
index 8f1d783a49..cfa9e6c581 100644
--- a/browser/components/places/tests/browser/browser_bookmarksProperties.js
+++ b/browser/components/places/tests/browser/browser_bookmarksProperties.js
@@ -88,7 +88,7 @@ gTests.push({
let unloadPromise = new Promise(resolve => {
this.window.addEventListener(
"unload",
- function (event) {
+ function () {
tagsField.popup.removeEventListener(
"popuphidden",
popupListener,
@@ -216,7 +216,7 @@ gTests.push({
let hiddenPromise = new Promise(resolve => {
this.window.addEventListener(
"unload",
- function (event) {
+ function () {
tagsField.popup.removeEventListener(
"popuphidden",
popupListener,
@@ -340,7 +340,7 @@ gTests.push({
let unloadPromise = new Promise(resolve => {
this.window.addEventListener(
"unload",
- event => {
+ () => {
Assert.ok(
self._cleanShutdown,
"Dialog window should not be closed by pressing ESC in folder name textbox"
diff --git a/browser/components/places/tests/browser/browser_click_bookmarks_on_toolbar.js b/browser/components/places/tests/browser/browser_click_bookmarks_on_toolbar.js
index 5ecf95d94e..b1fb763fb7 100644
--- a/browser/components/places/tests/browser/browser_click_bookmarks_on_toolbar.js
+++ b/browser/components/places/tests/browser/browser_click_bookmarks_on_toolbar.js
@@ -19,7 +19,7 @@ function waitForBookmarkElements(expectedCount) {
}
return new Promise(resolve => {
info("Waiting for bookmarks");
- let mut = new MutationObserver(mutations => {
+ let mut = new MutationObserver(() => {
info("Elements appeared");
if (container.childElementCount == expectedCount) {
resolve();
@@ -160,7 +160,7 @@ add_task(async function clickWithPrefSet() {
// With loadBookmarksInTabs, reuse current tab if blank
for (let button of [0, 1]) {
- await BrowserTestUtils.withNewTab({ gBrowser }, async tab => {
+ await BrowserTestUtils.withNewTab({ gBrowser }, async () => {
promise = waitForLoad(gBrowser.selectedBrowser, TEST_PAGES[1]);
EventUtils.synthesizeMouseAtCenter(gBookmarkElements[1], {
button,
diff --git a/browser/components/places/tests/browser/browser_controller_onDrop.js b/browser/components/places/tests/browser/browser_controller_onDrop.js
index cbda2612cf..c2edf4164f 100644
--- a/browser/components/places/tests/browser/browser_controller_onDrop.js
+++ b/browser/components/places/tests/browser/browser_controller_onDrop.js
@@ -53,10 +53,10 @@ async function run_drag_test(startBookmarkIndex, insertionIndex) {
mozCursor: "auto",
mozItemCount: 1,
types: [PlacesUtils.TYPE_X_MOZ_PLACE],
- mozTypesAt(i) {
+ mozTypesAt() {
return [this._data[0].type];
},
- mozGetDataAt(i) {
+ mozGetDataAt() {
return this._data[0].data;
},
mozSetDataAt(type, data, index) {
diff --git a/browser/components/places/tests/browser/browser_controller_onDrop_query.js b/browser/components/places/tests/browser/browser_controller_onDrop_query.js
index 10dd6faa3c..f5004d40d0 100644
--- a/browser/components/places/tests/browser/browser_controller_onDrop_query.js
+++ b/browser/components/places/tests/browser/browser_controller_onDrop_query.js
@@ -37,10 +37,10 @@ async function simulateDrop(
mozCursor: "auto",
mozItemCount: 1,
types: [PlacesUtils.TYPE_X_MOZ_PLACE],
- mozTypesAt(i) {
+ mozTypesAt() {
return [this._data[0].type];
},
- mozGetDataAt(i) {
+ mozGetDataAt() {
return this._data[0].data;
},
mozSetDataAt(type, data, index) {
diff --git a/browser/components/places/tests/browser/browser_controller_onDrop_sidebar.js b/browser/components/places/tests/browser/browser_controller_onDrop_sidebar.js
index 2637d4d724..2281e0777e 100644
--- a/browser/components/places/tests/browser/browser_controller_onDrop_sidebar.js
+++ b/browser/components/places/tests/browser/browser_controller_onDrop_sidebar.js
@@ -48,10 +48,10 @@ async function simulateDrop(
mozCursor: "auto",
mozItemCount: 1,
types: [PlacesUtils.TYPE_X_MOZ_PLACE],
- mozTypesAt(i) {
+ mozTypesAt() {
return [this._data[0].type];
},
- mozGetDataAt(i) {
+ mozGetDataAt() {
return this._data[0].data;
},
mozSetDataAt(type, data, index) {
@@ -247,10 +247,10 @@ add_task(async function test_move_within_itself() {
mozCursor: "auto",
mozItemCount: bookmarks.length,
types: [PlacesUtils.TYPE_X_MOZ_PLACE],
- mozTypesAt(i) {
+ mozTypesAt() {
return [this._data[0].type];
},
- mozGetDataAt(i) {
+ mozGetDataAt() {
return this._data[0].data;
},
mozSetDataAt(type, data, index) {
diff --git a/browser/components/places/tests/browser/browser_controller_onDrop_tagFolder.js b/browser/components/places/tests/browser/browser_controller_onDrop_tagFolder.js
index 64c448ec3f..297219d06c 100644
--- a/browser/components/places/tests/browser/browser_controller_onDrop_tagFolder.js
+++ b/browser/components/places/tests/browser/browser_controller_onDrop_tagFolder.js
@@ -81,10 +81,10 @@ async function run_drag_test(startBookmarkIndex, newParentGuid) {
mozCursor: "auto",
mozItemCount: 1,
types: [PlacesUtils.TYPE_X_MOZ_PLACE],
- mozTypesAt(i) {
+ mozTypesAt() {
return this.types;
},
- mozGetDataAt(i) {
+ mozGetDataAt() {
return bookmarkWithId;
},
};
diff --git a/browser/components/places/tests/browser/browser_library_delete.js b/browser/components/places/tests/browser/browser_library_delete.js
index fe95be0604..c11a4bc8b2 100644
--- a/browser/components/places/tests/browser/browser_library_delete.js
+++ b/browser/components/places/tests/browser/browser_library_delete.js
@@ -120,7 +120,6 @@ add_task(async function test_ensure_correct_selection_and_functionality() {
});
add_task(async function test_repeated_remove_bookmark() {
- // Select and open the left pane "History" query.
let PO = gLibrary.PlacesOrganizer;
PO.selectLeftPaneBuiltIn("UnfiledBookmarks");
@@ -154,4 +153,45 @@ add_task(async function test_repeated_remove_bookmark() {
PO._places.controller.doCommand("cmd_delete");
Assert.equal(spy.callCount, 4, "Should have been invoked again");
Assert.equal(stub.callCount, 2, "Should have been invoked again");
+
+ sinon.restore();
+});
+
+add_task(async function test_repeated_remove_separator() {
+ await PlacesUtils.bookmarks.eraseEverything();
+
+ const NUM_SEPARATORS = 2;
+ for (let i = 0; i < NUM_SEPARATORS; ++i) {
+ await PlacesUtils.bookmarks.insert({
+ parentGuid: PlacesUtils.bookmarks.unfiledGuid,
+ type: PlacesUtils.bookmarks.TYPE_SEPARATOR,
+ index: 0,
+ });
+ }
+
+ gLibrary.PlacesOrganizer.selectLeftPaneBuiltIn("UnfiledBookmarks");
+ let view = gLibrary.ContentTree.view;
+ view.focus();
+ let unsortedNode = PlacesUtils.asContainer(view.result.root);
+ Assert.equal(2, unsortedNode.childCount, "Unsorted node has 2 children");
+
+ for (let i = NUM_SEPARATORS - 1; i >= 0; --i) {
+ let node = unsortedNode.getChild(i);
+ Assert.equal(
+ node.type,
+ Ci.nsINavHistoryResultNode.RESULT_TYPE_SEPARATOR,
+ "Separator found in unsorted bookmarks"
+ );
+ view.selectNode(node);
+ Assert.ok(
+ view.controller.isCommandEnabled("cmd_delete"),
+ "Delete command is enabled"
+ );
+ view.controller.doCommand("cmd_delete");
+ await PlacesTestUtils.waitForNotification("bookmark-removed", events =>
+ events.some(({ guid }) => guid == node.bookmarkGuid)
+ );
+ }
+
+ Assert.equal(unsortedNode.childCount, 0, "Unsorted node has no children");
});
diff --git a/browser/components/places/tests/browser/browser_library_delete_bookmarks_in_tags.js b/browser/components/places/tests/browser/browser_library_delete_bookmarks_in_tags.js
index ed124a047a..f1228ba775 100644
--- a/browser/components/places/tests/browser/browser_library_delete_bookmarks_in_tags.js
+++ b/browser/components/places/tests/browser/browser_library_delete_bookmarks_in_tags.js
@@ -20,7 +20,7 @@ add_task(async function test_tags() {
Services.io.newURI("http://example.com/3"),
];
- let children = uris.map((uri, index, arr) => {
+ let children = uris.map((uri, index) => {
return {
title: `bm${index}`,
url: uri,
diff --git a/browser/components/places/tests/browser/browser_panelview_bookmarks_delete.js b/browser/components/places/tests/browser/browser_panelview_bookmarks_delete.js
index 3a5527a689..c00c5973fd 100644
--- a/browser/components/places/tests/browser/browser_panelview_bookmarks_delete.js
+++ b/browser/components/places/tests/browser/browser_panelview_bookmarks_delete.js
@@ -39,7 +39,7 @@ add_task(async function test_panelview_bookmarks_delete() {
await promise;
promise = new Promise(resolve => {
- let observer = new MutationObserver(mutations => {
+ let observer = new MutationObserver(() => {
if (listItem.parentNode == null) {
Assert.ok(true, "The bookmarks list item was removed.");
observer.disconnect();
diff --git a/browser/components/places/tests/browser/browser_sidebar_open_bookmarks.js b/browser/components/places/tests/browser/browser_sidebar_open_bookmarks.js
index 92f98b898c..10f7d45d39 100644
--- a/browser/components/places/tests/browser/browser_sidebar_open_bookmarks.js
+++ b/browser/components/places/tests/browser/browser_sidebar_open_bookmarks.js
@@ -79,7 +79,7 @@ add_task(async function test_open_bookmark_in_tab_from_sidebar() {
set: [[PREF_LOAD_BOOKMARKS_IN_TABS, true]],
});
- await BrowserTestUtils.withNewTab({ gBrowser }, async initialTab => {
+ await BrowserTestUtils.withNewTab({ gBrowser }, async () => {
await withSidebarTree("bookmarks", async tree => {
tree.selectItems([gBms[0].guid]);
let loadedPromise = BrowserTestUtils.browserLoaded(
diff --git a/browser/components/places/tests/browser/browser_sidebarpanels_click.js b/browser/components/places/tests/browser/browser_sidebarpanels_click.js
index 4b231c92b0..3e5b1c6ec6 100644
--- a/browser/components/places/tests/browser/browser_sidebarpanels_click.js
+++ b/browser/components/places/tests/browser/browser_sidebarpanels_click.js
@@ -54,7 +54,7 @@ add_task(async function test_sidebarpanels_click() {
async selectNode(tree) {
tree.selectItems([this._bookmark.guid]);
},
- cleanup(aCallback) {
+ cleanup() {
return PlacesUtils.bookmarks.remove(this._bookmark);
},
sidebarName: BOOKMARKS_SIDEBAR_ID,
@@ -84,7 +84,7 @@ add_task(async function test_sidebarpanels_click() {
);
is(tree.selectedNode.itemId, -1, "The selected node is not bookmarked");
},
- cleanup(aCallback) {
+ cleanup() {
return PlacesUtils.history.clear();
},
sidebarName: HISTORY_SIDEBAR_ID,
diff --git a/browser/components/places/tests/browser/browser_toolbar_overflow.js b/browser/components/places/tests/browser/browser_toolbar_overflow.js
index 3f16c2a126..216ad56700 100644
--- a/browser/components/places/tests/browser/browser_toolbar_overflow.js
+++ b/browser/components/places/tests/browser/browser_toolbar_overflow.js
@@ -419,7 +419,7 @@ async function toggleToolbar(show, expectedMinChildCount = 0) {
if (getPlacesChildren().length < expectedMinChildCount) {
await new Promise(resolve => {
info("Waiting for bookmark elements to appear");
- let mut = new MutationObserver(mutations => {
+ let mut = new MutationObserver(() => {
let children = getPlacesChildren();
info(`${children.length} bookmark elements appeared`);
if (children.length >= expectedMinChildCount) {
diff --git a/browser/components/places/tests/browser/head.js b/browser/components/places/tests/browser/head.js
index 21790d54aa..bcd89bce15 100644
--- a/browser/components/places/tests/browser/head.js
+++ b/browser/components/places/tests/browser/head.js
@@ -456,7 +456,7 @@ function promisePopupShown(popup) {
if (popup.state == "open") {
resolve();
} else {
- let onPopupShown = event => {
+ let onPopupShown = () => {
popup.removeEventListener("popupshown", onPopupShown);
resolve();
};
@@ -468,7 +468,7 @@ function promisePopupShown(popup) {
// Function copied from browser/base/content/test/general/head.js.
function promisePopupHidden(popup) {
return new Promise(resolve => {
- let onPopupHidden = event => {
+ let onPopupHidden = () => {
popup.removeEventListener("popuphidden", onPopupHidden);
resolve();
};
diff --git a/browser/components/places/tests/browser/interactions/browser_interactions_typing.js b/browser/components/places/tests/browser/interactions/browser_interactions_typing.js
index 99269c3265..cccc3a5ce9 100644
--- a/browser/components/places/tests/browser/interactions/browser_interactions_typing.js
+++ b/browser/components/places/tests/browser/interactions/browser_interactions_typing.js
@@ -118,7 +118,7 @@ add_task(async function test_load_type_and_navigate_away() {
add_task(async function test_no_typing_close_tab() {
await Interactions.reset();
- await BrowserTestUtils.withNewTab(TEST_URL, async browser => {});
+ await BrowserTestUtils.withNewTab(TEST_URL, async () => {});
await assertDatabaseValues([
{
diff --git a/browser/components/places/tests/browser/interactions/browser_interactions_view_time.js b/browser/components/places/tests/browser/interactions/browser_interactions_view_time.js
index 278ae10228..bf74bdb2f8 100644
--- a/browser/components/places/tests/browser/interactions/browser_interactions_view_time.js
+++ b/browser/components/places/tests/browser/interactions/browser_interactions_view_time.js
@@ -62,7 +62,7 @@ add_task(async function test_interactions_simple_load_and_change_to_non_http() {
add_task(async function test_interactions_close_tab() {
await Interactions.reset();
- await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
+ await BrowserTestUtils.withNewTab(TEST_URL, async () => {
Interactions._pageViewStartTime = Cu.now() - 20000;
});
@@ -373,7 +373,7 @@ add_task(async function test_interactions_idle() {
await Interactions.reset();
let lastViewTime;
- await BrowserTestUtils.withNewTab(TEST_URL, async browser => {
+ await BrowserTestUtils.withNewTab(TEST_URL, async () => {
Interactions._pageViewStartTime = Cu.now() - 10000;
Interactions.observe(null, "idle", "");
diff --git a/browser/components/places/tests/unit/test_clearHistory_shutdown.js b/browser/components/places/tests/unit/test_clearHistory_shutdown.js
index 27b432e569..e86b511a25 100644
--- a/browser/components/places/tests/unit/test_clearHistory_shutdown.js
+++ b/browser/components/places/tests/unit/test_clearHistory_shutdown.js
@@ -124,7 +124,7 @@ function storeCache(aURL, aContent) {
return new Promise(resolve => {
let storeCacheListener = {
- onCacheEntryCheck(entry) {
+ onCacheEntryCheck() {
return Ci.nsICacheEntryOpenCallback.ENTRY_WANTED;
},
diff --git a/browser/components/preferences/containers.js b/browser/components/preferences/containers.js
index 80d1ec7cc3..171fd47ce1 100644
--- a/browser/components/preferences/containers.js
+++ b/browser/components/preferences/containers.js
@@ -123,7 +123,7 @@ let gContainersPane = {
this.openPreferenceDialog(button.getAttribute("value"));
},
- onAddButtonCommand(button) {
+ onAddButtonCommand() {
this.openPreferenceDialog(null);
},
diff --git a/browser/components/preferences/dialogs/addEngine.js b/browser/components/preferences/dialogs/addEngine.js
index 1faf8622b3..6b9d8f663b 100644
--- a/browser/components/preferences/dialogs/addEngine.js
+++ b/browser/components/preferences/dialogs/addEngine.js
@@ -26,7 +26,7 @@ let gAddEngineDialog = {
document.addEventListener("dialogaccept", this.onAddEngine.bind(this));
},
- async onAddEngine(event) {
+ async onAddEngine() {
let url = document
.getElementById("engineUrl")
.value.replace(/%s/, "{searchTerms}");
diff --git a/browser/components/preferences/dialogs/blocklists.js b/browser/components/preferences/dialogs/blocklists.js
index c28ee09f96..89e21c476f 100644
--- a/browser/components/preferences/dialogs/blocklists.js
+++ b/browser/components/preferences/dialogs/blocklists.js
@@ -26,28 +26,28 @@ var gBlocklistManager = {
return "";
},
- isSeparator(index) {
+ isSeparator() {
return false;
},
isSorted() {
return false;
},
- isContainer(index) {
+ isContainer() {
return false;
},
- setTree(tree) {},
- getImageSrc(row, column) {},
+ setTree() {},
+ getImageSrc() {},
getCellValue(row, column) {
if (column.id == "selectionCol") {
return gBlocklistManager._blockLists[row].selected;
}
return undefined;
},
- cycleHeader(column) {},
- getRowProperties(row) {
+ cycleHeader() {},
+ getRowProperties() {
return "";
},
- getColumnProperties(column) {
+ getColumnProperties() {
return "";
},
getCellProperties(row, column) {
diff --git a/browser/components/preferences/dialogs/clearSiteData.js b/browser/components/preferences/dialogs/clearSiteData.js
index 061534b52a..664ad114fa 100644
--- a/browser/components/preferences/dialogs/clearSiteData.js
+++ b/browser/components/preferences/dialogs/clearSiteData.js
@@ -58,7 +58,7 @@ var gClearSiteDataDialog = {
);
},
- onCheckboxCommand(event) {
+ onCheckboxCommand() {
this._dialog.setAttribute(
"buttondisabledaccept",
!(this._clearSiteDataCheckbox.checked || this._clearCacheCheckbox.checked)
diff --git a/browser/components/preferences/dialogs/colors.xhtml b/browser/components/preferences/dialogs/colors.xhtml
index 1720cf3498..3181dd5c6d 100644
--- a/browser/components/preferences/dialogs/colors.xhtml
+++ b/browser/components/preferences/dialogs/colors.xhtml
@@ -41,7 +41,11 @@
<hbox>
<groupbox flex="1">
- <label><html:h2 data-l10n-id="colors-text-and-background" /></label>
+ <label
+ ><html:h2
+ class="heading-medium"
+ data-l10n-id="colors-text-and-background"
+ /></label>
<hbox align="center">
<label
data-l10n-id="colors-text-header"
@@ -74,7 +78,9 @@
</groupbox>
<groupbox flex="1">
- <label><html:h2 data-l10n-id="colors-links-header" /></label>
+ <label
+ ><html:h2 class="heading-medium" data-l10n-id="colors-links-header"
+ /></label>
<hbox align="center">
<label
data-l10n-id="colors-unvisited-links"
diff --git a/browser/components/preferences/dialogs/connection.js b/browser/components/preferences/dialogs/connection.js
index 0b21b1b5a5..33e8deb279 100644
--- a/browser/components/preferences/dialogs/connection.js
+++ b/browser/components/preferences/dialogs/connection.js
@@ -16,6 +16,7 @@ Preferences.addAll([
// both initialized when network.proxy.type initialization triggers a call to
// gConnectionsDialog.updateReloadButton().
{ id: "network.proxy.autoconfig_url", type: "string" },
+ { id: "network.proxy.system_wpad", type: "bool" },
{ id: "network.proxy.type", type: "int" },
{ id: "network.proxy.http", type: "string" },
{ id: "network.proxy.http_port", type: "int" },
@@ -130,11 +131,20 @@ var gConnectionsDialog = {
checkForSystemProxy() {
if ("@mozilla.org/system-proxy-settings;1" in Cc) {
document.getElementById("systemPref").removeAttribute("hidden");
+
+ var systemWpadAllowed = Preferences.get(
+ "network.proxy.system_wpad.allowed"
+ );
+ if (systemWpadAllowed && Services.appinfo.OS == "WINNT") {
+ document.getElementById("systemWpad").removeAttribute("hidden");
+ }
}
},
proxyTypeChanged() {
var proxyTypePref = Preferences.get("network.proxy.type");
+ var systemWpadPref = Preferences.get("network.proxy.system_wpad");
+ systemWpadPref.updateControlDisabledState(proxyTypePref.value != 5);
// Update http
var httpProxyURLPref = Preferences.get("network.proxy.http");
diff --git a/browser/components/preferences/dialogs/connection.xhtml b/browser/components/preferences/dialogs/connection.xhtml
index 2a1a3c0115..bb9a932033 100644
--- a/browser/components/preferences/dialogs/connection.xhtml
+++ b/browser/components/preferences/dialogs/connection.xhtml
@@ -63,7 +63,11 @@
</hbox>
<groupbox>
- <label><html:h2 data-l10n-id="connection-proxy-configure" /></label>
+ <label
+ ><html:h2
+ class="heading-medium"
+ data-l10n-id="connection-proxy-configure"
+ /></label>
<radiogroup id="networkProxyType" preference="network.proxy.type">
<radio value="0" data-l10n-id="connection-proxy-option-no" />
@@ -74,6 +78,14 @@
id="systemPref"
hidden="true"
/>
+ <checkbox
+ value="true"
+ data-l10n-id="connection-proxy-option-wpad"
+ id="systemWpad"
+ hidden="true"
+ preference="network.proxy.system_wpad"
+ class="indent"
+ />
<radio value="1" data-l10n-id="connection-proxy-option-manual" />
<box id="proxy-grid" class="indent" flex="1">
<html:div class="proxy-grid-row">
diff --git a/browser/components/preferences/dialogs/containers.js b/browser/components/preferences/dialogs/containers.js
index 14526545b6..87368689a0 100644
--- a/browser/components/preferences/dialogs/containers.js
+++ b/browser/components/preferences/dialogs/containers.js
@@ -88,7 +88,7 @@ let gContainersManager = {
this._dialog.setAttribute("buttondisabledaccept", !name.value.trim());
},
- createIconButtons(defaultIcon) {
+ createIconButtons() {
let radiogroup = document.createXULElement("radiogroup");
radiogroup.setAttribute("id", "icon");
radiogroup.className = "icon-buttons radio-buttons";
@@ -116,7 +116,7 @@ let gContainersManager = {
return radiogroup;
},
- createColorSwatches(defaultColor) {
+ createColorSwatches() {
let radiogroup = document.createXULElement("radiogroup");
radiogroup.setAttribute("id", "color");
radiogroup.className = "radio-buttons";
diff --git a/browser/components/preferences/dialogs/dohExceptions.js b/browser/components/preferences/dialogs/dohExceptions.js
index f4c1d4d80d..9bf64bd4ed 100644
--- a/browser/components/preferences/dialogs/dohExceptions.js
+++ b/browser/components/preferences/dialogs/dohExceptions.js
@@ -31,7 +31,6 @@ var gDoHExceptionsManager = {
"network.trr.excluded-domains"
);
- this._btnAddException.disabled = this._prefLocked;
document.getElementById("exceptionDialog").getButton("accept").disabled =
this._prefLocked;
this._urlField.disabled = this._prefLocked;
diff --git a/browser/components/preferences/dialogs/fonts.xhtml b/browser/components/preferences/dialogs/fonts.xhtml
index 44dc473ccb..cd35371324 100644
--- a/browser/components/preferences/dialogs/fonts.xhtml
+++ b/browser/components/preferences/dialogs/fonts.xhtml
@@ -43,7 +43,9 @@
<groupbox>
<hbox align="center">
<label control="selectLangs"
- ><html:h2 data-l10n-id="fonts-langgroup-header"
+ ><html:h2
+ class="heading-medium"
+ data-l10n-id="fonts-langgroup-header"
/></label>
</hbox>
<menulist id="selectLangs" preference="font.language.group">
diff --git a/browser/components/preferences/dialogs/translationExceptions.js b/browser/components/preferences/dialogs/translationExceptions.js
index 27579594c9..a83f7a3de1 100644
--- a/browser/components/preferences/dialogs/translationExceptions.js
+++ b/browser/components/preferences/dialogs/translationExceptions.js
@@ -46,29 +46,29 @@ Tree.prototype = {
get rowCount() {
return this._data.length;
},
- getCellText(aRow, aColumn) {
+ getCellText(aRow) {
return this._data[aRow];
},
- isSeparator(aIndex) {
+ isSeparator() {
return false;
},
isSorted() {
return false;
},
- isContainer(aIndex) {
+ isContainer() {
return false;
},
- setTree(aTree) {},
- getImageSrc(aRow, aColumn) {},
- getCellValue(aRow, aColumn) {},
- cycleHeader(column) {},
- getRowProperties(row) {
+ setTree() {},
+ getImageSrc() {},
+ getCellValue() {},
+ cycleHeader() {},
+ getRowProperties() {
return "";
},
- getColumnProperties(column) {
+ getColumnProperties() {
return "";
},
- getCellProperties(row, column) {
+ getCellProperties() {
return "";
},
QueryInterface: ChromeUtils.generateQI(["nsITreeView"]),
diff --git a/browser/components/preferences/dialogs/translations.js b/browser/components/preferences/dialogs/translations.js
index 826e6efb4b..7af2412b44 100644
--- a/browser/components/preferences/dialogs/translations.js
+++ b/browser/components/preferences/dialogs/translations.js
@@ -60,29 +60,29 @@ Tree.prototype = {
get rowCount() {
return this._data.length;
},
- getCellText(aRow, aColumn) {
+ getCellText(aRow) {
return this._data[aRow];
},
- isSeparator(aIndex) {
+ isSeparator() {
return false;
},
isSorted() {
return false;
},
- isContainer(aIndex) {
+ isContainer() {
return false;
},
- setTree(aTree) {},
- getImageSrc(aRow, aColumn) {},
- getCellValue(aRow, aColumn) {},
- cycleHeader(column) {},
- getRowProperties(row) {
+ setTree() {},
+ getImageSrc() {},
+ getCellValue() {},
+ cycleHeader() {},
+ getRowProperties() {
return "";
},
- getColumnProperties(column) {
+ getColumnProperties() {
return "";
},
- getCellProperties(row, column) {
+ getCellProperties() {
return "";
},
QueryInterface: ChromeUtils.generateQI(["nsITreeView"]),
diff --git a/browser/components/preferences/findInPage.js b/browser/components/preferences/findInPage.js
index 9fcd7b629b..7ee0a0bc06 100644
--- a/browser/components/preferences/findInPage.js
+++ b/browser/components/preferences/findInPage.js
@@ -117,9 +117,9 @@ var gSearchResultsPane = {
},
/**
- * Finds and returns text nodes within node and all descendants
- * Iterates through all the sibilings of the node object and adds the sibilings
- * to an array if sibiling is a TEXT_NODE else checks the text nodes with in current node
+ * Finds and returns text nodes within node and all descendants.
+ * Iterates through all the siblings of the node object and adds each sibling to an
+ * array if it's a TEXT_NODE, and otherwise recurses to check text nodes within it.
* Source - http://stackoverflow.com/questions/10730309/find-all-text-nodes-in-html-page
*
* @param Node nodeObject
@@ -414,14 +414,20 @@ var gSearchResultsPane = {
let matchesFound = false;
if (
nodeObject.childElementCount == 0 ||
- nodeObject.tagName == "button" ||
- nodeObject.tagName == "label" ||
- nodeObject.tagName == "description" ||
- nodeObject.tagName == "menulist" ||
- nodeObject.tagName == "menuitem" ||
- nodeObject.tagName == "checkbox"
+ nodeObject.localName == "button" ||
+ nodeObject.localName == "label" ||
+ nodeObject.localName == "description" ||
+ nodeObject.localName == "menulist" ||
+ nodeObject.localName == "menuitem" ||
+ nodeObject.localName == "checkbox" ||
+ nodeObject.localName == "moz-toggle"
) {
let simpleTextNodes = this.textNodeDescendants(nodeObject);
+ if (nodeObject.shadowRoot) {
+ simpleTextNodes.push(
+ ...this.textNodeDescendants(nodeObject.shadowRoot)
+ );
+ }
for (let node of simpleTextNodes) {
let result = this.highlightMatches(
[node],
@@ -440,8 +446,8 @@ var gSearchResultsPane = {
let accessKeyTextNodes = [];
if (
- nodeObject.tagName == "label" ||
- nodeObject.tagName == "description"
+ nodeObject.localName == "label" ||
+ nodeObject.localName == "description"
) {
accessKeyTextNodes.push(...simpleTextNodes);
}
@@ -469,7 +475,7 @@ var gSearchResultsPane = {
// Searching some elements, such as xul:label, store their user-visible text in a "value" attribute.
// Value will be skipped for menuitem since value in menuitem could represent index number to distinct each item.
let valueResult =
- nodeObject.tagName !== "menuitem" && nodeObject.tagName !== "radio"
+ nodeObject.localName !== "menuitem" && nodeObject.localName !== "radio"
? this.queryMatchesContent(
nodeObject.getAttribute("value"),
searchPhrase
@@ -497,12 +503,13 @@ var gSearchResultsPane = {
// Creating tooltips for buttons
if (
keywordsResult &&
- (nodeObject.tagName === "button" || nodeObject.tagName == "menulist")
+ (nodeObject.localName === "button" ||
+ nodeObject.localName == "menulist")
) {
this.listSearchTooltips.add(nodeObject);
}
- if (keywordsResult && nodeObject.tagName === "menuitem") {
+ if (keywordsResult && nodeObject.localName === "menuitem") {
nodeObject.setAttribute("indicator", "true");
this.listSearchMenuitemIndicators.add(nodeObject);
let menulist = nodeObject.closest("menulist");
@@ -512,8 +519,8 @@ var gSearchResultsPane = {
}
if (
- (nodeObject.tagName == "menulist" ||
- nodeObject.tagName == "menuitem") &&
+ (nodeObject.localName == "menulist" ||
+ nodeObject.localName == "menuitem") &&
(labelResult || valueResult || keywordsResult)
) {
nodeObject.setAttribute("highlightable", "true");
@@ -529,7 +536,7 @@ var gSearchResultsPane = {
// Should not search unselected child nodes of a <xul:deck> element
// except the "historyPane" <xul:deck> element.
- if (nodeObject.tagName == "deck" && nodeObject.id != "historyPane") {
+ if (nodeObject.localName == "deck" && nodeObject.id != "historyPane") {
let index = nodeObject.selectedIndex;
if (index != -1) {
let result = await this.searchChildNodeIfVisible(
@@ -572,7 +579,7 @@ var gSearchResultsPane = {
) {
result = await this.searchWithinNode(child, searchPhrase);
// Creating tooltips for menulist element
- if (result && nodeObject.tagName === "menulist") {
+ if (result && nodeObject.localName === "menulist") {
this.listSearchTooltips.add(nodeObject);
}
diff --git a/browser/components/preferences/home.js b/browser/components/preferences/home.js
index 6aa72b84b8..093248cff6 100644
--- a/browser/components/preferences/home.js
+++ b/browser/components/preferences/home.js
@@ -160,13 +160,14 @@ var gHomePane = {
}
let extensionOptions;
+ await ExtensionSettingsStore.initialize();
if (select.id === "homeMode") {
- extensionOptions = await ExtensionSettingsStore.getAllSettings(
+ extensionOptions = ExtensionSettingsStore.getAllSettings(
PREF_SETTING_TYPE,
HOMEPAGE_OVERRIDE_KEY
);
} else {
- extensionOptions = await ExtensionSettingsStore.getAllSettings(
+ extensionOptions = ExtensionSettingsStore.getAllSettings(
URL_OVERRIDES_TYPE,
NEW_TAB_KEY
);
@@ -344,12 +345,15 @@ var gHomePane = {
},
/**
- * _isTabAboutPreferences: Is a given tab set to about:preferences?
+ * _isTabAboutPreferencesOrSettings: Is a given tab set to about:preferences or about:settings?
* @param {Element} aTab A tab element
- * @returns {bool} Is the linkedBrowser of aElement set to about:preferences?
+ * @returns {bool} Is the linkedBrowser of aElement set to about:preferences or about:settings?
*/
- _isTabAboutPreferences(aTab) {
- return aTab.linkedBrowser.currentURI.spec.startsWith("about:preferences");
+ _isTabAboutPreferencesOrSettings(aTab) {
+ return (
+ aTab.linkedBrowser.currentURI.spec.startsWith("about:preferences") ||
+ aTab.linkedBrowser.currentURI.spec.startsWith("about:settings")
+ );
},
/**
@@ -367,7 +371,7 @@ var gHomePane = {
"navigator:browser"
) {
tabs = win.gBrowser.visibleTabs.slice(win.gBrowser._numPinnedTabs);
- tabs = tabs.filter(tab => !this._isTabAboutPreferences(tab));
+ tabs = tabs.filter(tab => !this._isTabAboutPreferencesOrSettings(tab));
// XXX: Bug 1441637 - Fix tabbrowser to report tab.closing before it blurs it
tabs = tabs.filter(tab => !tab.closing);
}
diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml
index aaacdb6d97..1eb2189c41 100644
--- a/browser/components/preferences/main.inc.xhtml
+++ b/browser/components/preferences/main.inc.xhtml
@@ -159,14 +159,10 @@
<html:h2 data-l10n-id="preferences-web-appearance-header"/>
<html:div id="webAppearanceSettings">
<description class="description-deemphasized" data-l10n-id="preferences-web-appearance-description"/>
- <html:div id="web-appearance-override-warning" class="info-box-container">
- <html:div class="info-icon-container">
- <html:img class="info-icon"/>
- </html:div>
- <description data-l10n-id="preferences-web-appearance-override-warning">
- <html:a class="text-link" data-l10n-name="colors-link" id="web-appearance-manage-colors-link" href="#"/>
- </description>
- </html:div>
+ <html:moz-message-bar id="web-appearance-override-warning" data-l10n-id="preferences-web-appearance-override-warning2"
+ data-l10n-attrs="message">
+ <button slot="actions" class="accessory-button" data-l10n-id="preferences-colors-manage-button" id="web-appearance-manage-colors-button"/>
+ </html:moz-message-bar>
<form xmlns="http://www.w3.org/1999/xhtml" id="web-appearance-chooser" autocomplete="off">
<label class="web-appearance-choice" data-l10n-id="preferences-web-appearance-choice-tooltip-auto">
<div class="web-appearance-choice-image-container"><img role="presentation" alt="" width="54" height="42" /></div>
@@ -817,6 +813,7 @@
connection-proxy-option-no.label,
connection-proxy-option-auto.label,
connection-proxy-option-system.label,
+ connection-proxy-option-wpad.label,
connection-proxy-option-manual.label,
connection-proxy-http,
connection-proxy-https,
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
index b9487ece26..b578e0e29f 100644
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
@@ -278,7 +278,10 @@ var gMainPane = {
let uri = win.gBrowser.currentURI.spec;
if (
- (uri == "about:preferences" || uri == "about:preferences#general") &&
+ (uri == "about:preferences" ||
+ uri == "about:preferences#general" ||
+ uri == "about:settings" ||
+ uri == "about:settings#general") &&
document.visibilityState == "visible"
) {
this.updateSetDefaultBrowser();
@@ -879,7 +882,7 @@ var gMainPane = {
this.readBrowserContainersCheckbox();
},
- async onGetStarted(aEvent) {
+ async onGetStarted() {
if (!AppConstants.MOZ_DEV_EDITION) {
return;
}
@@ -1915,6 +1918,11 @@ var gMainPane = {
if (
Services.prefs.getBoolPref("browser.translations.newSettingsUI.enable")
) {
+ const translationsSettings = document.getElementById(
+ "translations-settings-page"
+ );
+ translationsSettings.setAttribute("data-hidden-from-search", "false");
+ translationsSettings.hidden = false;
gotoPref("translations");
} else {
gSubDialog.open(
@@ -1980,7 +1988,7 @@ var gMainPane = {
}
},
- async checkBrowserContainers(event) {
+ async checkBrowserContainers() {
let checkbox = document.getElementById("browserContainersCheckbox");
if (checkbox.checked) {
Services.prefs.setBoolPref("privacy.userContext.enabled", true);
@@ -2135,7 +2143,7 @@ var gMainPane = {
})().catch(console.error);
},
- onMigrationButtonCommand(command) {
+ onMigrationButtonCommand() {
// Even though we're going to be showing the migration wizard here in
// about:preferences, we'll delegate the call to
// `MigrationUtils.showMigrationWizard`, as this will allow us to
@@ -2288,7 +2296,7 @@ var gMainPane = {
}
},
- updatePerformanceSettingsBox({ duringChangeEvent }) {
+ updatePerformanceSettingsBox() {
let defaultPerformancePref = Preferences.get(
"browser.preferences.defaultPerformanceSettings.enabled"
);
@@ -3333,7 +3341,7 @@ var gMainPane = {
// Prompt the user to pick an app. If they pick one, and it's a valid
// selection, then add it to the list of possible handlers.
- fp.init(window, winTitle, Ci.nsIFilePicker.modeOpen);
+ fp.init(window.browsingContext, winTitle, Ci.nsIFilePicker.modeOpen);
fp.appendFilters(Ci.nsIFilePicker.filterApps);
fp.open(fpCallback);
}
@@ -3451,7 +3459,7 @@ var gMainPane = {
let defDownloads = await this._indexToFolder(1);
let fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
- fp.init(window, title, Ci.nsIFilePicker.modeGetFolder);
+ fp.init(window.browsingContext, title, Ci.nsIFilePicker.modeGetFolder);
fp.appendFilters(Ci.nsIFilePicker.filterAll);
// First try to open what's currently configured
if (currentDirPref && currentDirPref.exists()) {
@@ -4189,7 +4197,7 @@ const AppearanceChooser = {
if (e.type == "click") {
switch (e.target.id) {
// Forward the click to the "colors" button.
- case "web-appearance-manage-colors-link":
+ case "web-appearance-manage-colors-button":
document.getElementById("colors").click();
e.preventDefault();
break;
@@ -4206,7 +4214,7 @@ const AppearanceChooser = {
this._update();
},
- observe(subject, topic, data) {
+ observe() {
this._update();
},
diff --git a/browser/components/preferences/preferences.js b/browser/components/preferences/preferences.js
index 31ae84f382..c30a51c67c 100644
--- a/browser/components/preferences/preferences.js
+++ b/browser/components/preferences/preferences.js
@@ -204,7 +204,10 @@ function init_all() {
register_module("paneSearch", gSearchPane);
register_module("panePrivacy", gPrivacyPane);
register_module("paneContainers", gContainersPane);
- register_module("paneTranslations", gTranslationsPane);
+
+ if (Services.prefs.getBoolPref("browser.translations.newSettingsUI.enable")) {
+ register_module("paneTranslations", gTranslationsPane);
+ }
if (Services.prefs.getBoolPref("browser.preferences.experimental")) {
// Set hidden based on previous load's hidden value.
document.getElementById("category-experimental").hidden =
@@ -475,7 +478,7 @@ async function spotlight(subcategory, category) {
}
}
-async function scrollAndHighlight(subcategory, category) {
+async function scrollAndHighlight(subcategory) {
let element = document.querySelector(`[data-subcategory="${subcategory}"]`);
if (!element) {
return;
@@ -643,7 +646,7 @@ async function ensureScrollPadding() {
let stickyContainer = document.querySelector(".sticky-container");
let height = await window.browsingContext.topChromeWindow
.promiseDocumentFlushed(() => stickyContainer.clientHeight)
- .catch(err => Cu.reportError); // Can reject if the window goes away.
+ .catch(() => Cu.reportError); // Can reject if the window goes away.
// Make it a bit more, to ensure focus rectangles etc. don't get cut off.
// This being 8px causes us to end up with 90px if the policies container
diff --git a/browser/components/preferences/preferences.xhtml b/browser/components/preferences/preferences.xhtml
index 38fba9a726..eee227822a 100644
--- a/browser/components/preferences/preferences.xhtml
+++ b/browser/components/preferences/preferences.xhtml
@@ -12,7 +12,7 @@
<head>
<!-- @CSP: We should remove 'unsafe-inline' from style-src, see Bug 1579160 -->
- <meta http-equiv="Content-Security-Policy" content="default-src chrome:; img-src chrome: moz-icon: https: data:; style-src chrome: data: 'unsafe-inline'; object-src 'none'" />
+ <meta http-equiv="Content-Security-Policy" content="default-src chrome:; img-src chrome: moz-icon: https: blob: data:; style-src chrome: data: 'unsafe-inline'; object-src 'none'" />
<title data-l10n-id="settings-page-title"></title>
@@ -84,6 +84,7 @@
<script src="chrome://browser/content/migration/migration-wizard.mjs" type="module"></script>
<script type="module" src="chrome://global/content/elements/moz-toggle.mjs"/>
<script type="module" src="chrome://global/content/elements/moz-message-bar.mjs" />
+ <script type="module" src="chrome://global/content/elements/moz-label.mjs"/>
</head>
<html:body xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
diff --git a/browser/components/preferences/privacy.inc.xhtml b/browser/components/preferences/privacy.inc.xhtml
index a81764e34f..224a5f5cbb 100644
--- a/browser/components/preferences/privacy.inc.xhtml
+++ b/browser/components/preferences/privacy.inc.xhtml
@@ -985,11 +985,12 @@
<html:input type="checkbox"
id="automaticallySubmitCrashesBox"
preference="browser.crashReports.unsubmittedCheck.autoSubmit2"/>
- <label for="automaticallySubmitCrashesBox"
+ <html:label is="moz-label"
+ for="automaticallySubmitCrashesBox"
id="crashReporterLabel"
- data-l10n-id="collection-backlogged-crash-reports-with-link">
- <html:a data-l10n-name="crash-reports-link" id="crashReporterLearnMore" target="_blank"/>
- </label>
+ data-l10n-id="collection-backlogged-crash-reports"
+ data-l10n-attrs="accesskey"/>
+ <html:a id="crashReporterLearnMore" is="moz-support-link" class="learnMore"/>
</hbox>
#endif
</vbox>
diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js
index 178bc560c7..3b07b9cabf 100644
--- a/browser/components/preferences/privacy.js
+++ b/browser/components/preferences/privacy.js
@@ -435,7 +435,7 @@ var gPrivacyPane = {
);
let trackingProtectionObserver = {
- observe(subject, topic, data) {
+ observe() {
gPrivacyPane._updateTrackingProtectionUI();
},
};
@@ -3230,13 +3230,6 @@ var gPrivacyPane = {
"toolkit.crashreporter.infoURL",
"crashReporterLearnMore"
);
- setEventListener("crashReporterLabel", "click", function (event) {
- if (event.target.localName == "a") {
- return;
- }
- const checkboxId = event.target.getAttribute("for");
- document.getElementById(checkboxId).click();
- });
},
initPrivacySegmentation() {
@@ -3317,7 +3310,7 @@ var gPrivacyPane = {
* Initialize the opt-out-study preference checkbox into about:preferences and
* handles events coming from the UI for it.
*/
- initOptOutStudyCheckbox(doc) {
+ initOptOutStudyCheckbox() {
// The checkbox should be disabled if any of the below are true. This
// prevents the user from changing the value in the box.
//
@@ -3361,7 +3354,7 @@ var gPrivacyPane = {
});
},
- observe(aSubject, aTopic, aData) {
+ observe(aSubject, aTopic) {
switch (aTopic) {
case "sitedatamanager:updating-sites":
// While updating, we want to disable this section and display loading message until updated
diff --git a/browser/components/preferences/search.js b/browser/components/preferences/search.js
index 42776cfa96..a491d6c5ca 100644
--- a/browser/components/preferences/search.js
+++ b/browser/components/preferences/search.js
@@ -9,6 +9,7 @@ const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
SearchUIUtils: "resource:///modules/SearchUIUtils.sys.mjs",
+ SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
});
const PREF_URLBAR_QUICKSUGGEST_BLOCKLIST =
@@ -34,16 +35,27 @@ const ENGINE_FLAVOR = "text/x-moz-search-engine";
const SEARCH_TYPE = "default_search";
const SEARCH_KEY = "defaultSearch";
-// The name of in built engines that support trending results.
-const TRENDING_ENGINES = ["Google", "Bing"];
-
var gEngineView = null;
var gSearchPane = {
+ _engineStore: null,
+ _engineDropDown: null,
+ _engineDropDownPrivate: null,
+
init() {
- gEngineView = new EngineView(new EngineStore());
- document.getElementById("engineList").view = gEngineView;
- this.buildDefaultEngineDropDowns().catch(console.error);
+ this._engineStore = new EngineStore();
+ gEngineView = new EngineView(this._engineStore);
+
+ this._engineDropDown = new DefaultEngineDropDown(
+ "normal",
+ this._engineStore
+ );
+ this._engineDropDownPrivate = new DefaultEngineDropDown(
+ "private",
+ this._engineStore
+ );
+
+ this._engineStore.init().catch(console.error);
if (
Services.policies &&
@@ -55,12 +67,7 @@ var gSearchPane = {
addEnginesLink.setAttribute("href", lazy.SearchUIUtils.searchEnginesURL);
}
- window.addEventListener("click", this);
window.addEventListener("command", this);
- window.addEventListener("dragstart", this);
- window.addEventListener("keypress", this);
- window.addEventListener("select", this);
- window.addEventListener("dblclick", this);
Services.obs.addObserver(this, "browser-search-engine-modified");
Services.obs.addObserver(this, "intl:app-locales-changed");
@@ -115,7 +122,6 @@ var gSearchPane = {
this._initDefaultEngines();
this._initShowSearchTermsCheckbox();
this._updateSuggestionCheckboxes();
- this._showAddEngineButton();
this._initRecentSeachesCheckbox();
this._initAddressBar();
},
@@ -140,7 +146,7 @@ var gSearchPane = {
const listener = () => {
this._updatePrivateEngineDisplayBoxes();
- this.buildDefaultEngineDropDowns().catch(console.error);
+ this._engineStore.notifyRebuildViews();
};
this._separatePrivateDefaultEnabledPref.on("change", listener);
@@ -256,17 +262,6 @@ var gSearchPane = {
this._updateTrendingCheckbox(!suggestsPref.value || permanentPB);
},
- _showAddEngineButton() {
- let aliasRefresh = Services.prefs.getBoolPref(
- "browser.urlbar.update2.engineAliasRefresh",
- false
- );
- if (aliasRefresh) {
- let addButton = document.getElementById("addEngineButton");
- addButton.hidden = false;
- }
- },
-
_initRecentSeachesCheckbox() {
this._recentSearchesEnabledPref = Preferences.get(
"browser.urlbar.recentsearches.featureGate"
@@ -285,38 +280,14 @@ var gSearchPane = {
async _updateTrendingCheckbox(suggestDisabled) {
let trendingBox = document.getElementById("showTrendingSuggestionsBox");
let trendingCheckBox = document.getElementById("showTrendingSuggestions");
- let trendingSupported = TRENDING_ENGINES.includes(
- (await Services.search.getDefault()).name
- );
+ let trendingSupported = (
+ await Services.search.getDefault()
+ ).supportsResponseType(lazy.SearchUtils.URL_TYPE.TRENDING_JSON);
trendingBox.hidden = !Preferences.get("browser.urlbar.trending.featureGate")
.value;
trendingCheckBox.disabled = suggestDisabled || !trendingSupported;
},
- /**
- * Builds the default and private engines drop down lists. This is called
- * each time something affects the list of engines.
- */
- async buildDefaultEngineDropDowns() {
- await this._buildEngineDropDown(
- document.getElementById("defaultEngine"),
- (
- await Services.search.getDefault()
- ).name,
- false
- );
-
- if (this._separatePrivateDefaultEnabledPref.value) {
- await this._buildEngineDropDown(
- document.getElementById("defaultPrivateEngine"),
- (
- await Services.search.getDefaultPrivate()
- ).name,
- true
- );
- }
- },
-
// ADDRESS BAR
/**
@@ -486,125 +457,24 @@ var gSearchPane = {
Services.prefs.clearUserPref(PREF_URLBAR_WEATHER_USER_ENABLED);
},
- /**
- * Builds a drop down menu of search engines.
- *
- * @param {DOMMenuList} list
- * The menu list element to attach the list of engines.
- * @param {string} currentEngine
- * The name of the current default engine.
- * @param {boolean} isPrivate
- * True if we are dealing with the default engine for private mode.
- */
- async _buildEngineDropDown(list, currentEngine, isPrivate) {
- // If the current engine isn't in the list any more, select the first item.
- let engines = gEngineView._engineStore._engines;
- if (!engines.length) {
+ handleEvent(aEvent) {
+ if (aEvent.type != "command") {
return;
}
- if (!engines.some(e => e.name == currentEngine)) {
- currentEngine = engines[0].name;
- }
-
- // Now clean-up and rebuild the list.
- list.removeAllItems();
- gEngineView._engineStore._engines.forEach(e => {
- let item = list.appendItem(e.name);
- item.setAttribute(
- "class",
- "menuitem-iconic searchengine-menuitem menuitem-with-favicon"
- );
- if (e.iconURL) {
- item.setAttribute("image", e.iconURL);
- }
- item.engine = e;
- if (e.name == currentEngine) {
- list.selectedItem = item;
- }
- });
- },
-
- handleEvent(aEvent) {
- switch (aEvent.type) {
- case "dblclick":
- if (aEvent.target.id == "engineChildren") {
- let cell = aEvent.target.parentNode.getCellAt(
- aEvent.clientX,
- aEvent.clientY
- );
- if (cell.col?.id == "engineKeyword") {
- this.startEditingAlias(gEngineView.selectedIndex);
+ switch (aEvent.target.id) {
+ case "":
+ if (aEvent.target.parentNode && aEvent.target.parentNode.parentNode) {
+ if (aEvent.target.parentNode.parentNode.id == "defaultEngine") {
+ gSearchPane.setDefaultEngine();
+ } else if (
+ aEvent.target.parentNode.parentNode.id == "defaultPrivateEngine"
+ ) {
+ gSearchPane.setDefaultPrivateEngine();
}
}
break;
- case "click":
- if (
- aEvent.target.id != "engineChildren" &&
- !aEvent.target.classList.contains("searchEngineAction")
- ) {
- let engineList = document.getElementById("engineList");
- // We don't want to toggle off selection while editing keyword
- // so proceed only when the input field is hidden.
- // We need to check that engineList.view is defined here
- // because the "click" event listener is on <window> and the
- // view might have been destroyed if the pane has been navigated
- // away from.
- if (engineList.inputField.hidden && engineList.view) {
- let selection = engineList.view.selection;
- if (selection?.count > 0) {
- selection.toggleSelect(selection.currentIndex);
- }
- engineList.blur();
- }
- }
- break;
- case "command":
- switch (aEvent.target.id) {
- case "":
- if (
- aEvent.target.parentNode &&
- aEvent.target.parentNode.parentNode
- ) {
- if (aEvent.target.parentNode.parentNode.id == "defaultEngine") {
- gSearchPane.setDefaultEngine();
- } else if (
- aEvent.target.parentNode.parentNode.id == "defaultPrivateEngine"
- ) {
- gSearchPane.setDefaultPrivateEngine();
- }
- }
- break;
- case "restoreDefaultSearchEngines":
- gSearchPane.onRestoreDefaults();
- break;
- case "removeEngineButton":
- Services.search.removeEngine(
- gEngineView.selectedEngine.originalEngine
- );
- break;
- case "addEngineButton":
- gSubDialog.open(
- "chrome://browser/content/preferences/dialogs/addEngine.xhtml",
- { features: "resizable=no, modal=yes" }
- );
- break;
- }
- break;
- case "dragstart":
- if (aEvent.target.id == "engineChildren") {
- onDragEngineStart(aEvent);
- }
- break;
- case "keypress":
- if (aEvent.target.id == "engineList") {
- gSearchPane.onTreeKeyPress(aEvent);
- }
- break;
- case "select":
- if (aEvent.target.id == "engineList") {
- gSearchPane.onTreeSelect();
- }
- break;
+ default:
+ gEngineView.handleEvent(aEvent);
}
},
@@ -617,60 +487,6 @@ var gSearchPane = {
},
/**
- * Update the default engine UI and engine tree view as appropriate when engine changes
- * or locale changes occur.
- *
- * @param {Object} engine
- * @param {string} data
- */
- browserSearchEngineModified(engine, data) {
- engine.QueryInterface(Ci.nsISearchEngine);
- switch (data) {
- case "engine-added":
- gEngineView._engineStore.addEngine(engine);
- gEngineView.rowCountChanged(gEngineView.lastEngineIndex, 1);
- gSearchPane.buildDefaultEngineDropDowns();
- break;
- case "engine-changed":
- gSearchPane.buildDefaultEngineDropDowns();
- gEngineView._engineStore.updateEngine(engine);
- gEngineView.invalidate();
- break;
- case "engine-removed":
- gSearchPane.remove(engine);
- break;
- case "engine-default": {
- // If the user is going through the drop down using up/down keys, the
- // dropdown may still be open (eg. on Windows) when engine-default is
- // fired, so rebuilding the list unconditionally would get in the way.
- let selectedEngine =
- document.getElementById("defaultEngine").selectedItem.engine;
- if (selectedEngine.name != engine.name) {
- gSearchPane.buildDefaultEngineDropDowns();
- }
- gSearchPane._updateSuggestionCheckboxes();
- break;
- }
- case "engine-default-private": {
- if (
- this._separatePrivateDefaultEnabledPref.value &&
- this._separatePrivateDefaultPref.value
- ) {
- // If the user is going through the drop down using up/down keys, the
- // dropdown may still be open (eg. on Windows) when engine-default is
- // fired, so rebuilding the list unconditionally would get in the way.
- const selectedEngine = document.getElementById("defaultPrivateEngine")
- .selectedItem.engine;
- if (selectedEngine.name != engine.name) {
- gSearchPane.buildDefaultEngineDropDowns();
- }
- }
- break;
- }
- }
- },
-
- /**
* nsIObserver implementation.
*/
observe(subject, topic, data) {
@@ -680,144 +496,25 @@ var gSearchPane = {
break;
}
case "browser-search-engine-modified": {
- this.browserSearchEngineModified(subject, data);
- break;
- }
- }
- },
-
- onTreeSelect() {
- document.getElementById("removeEngineButton").disabled =
- !gEngineView.isEngineSelectedAndRemovable();
- },
-
- onTreeKeyPress(aEvent) {
- let index = gEngineView.selectedIndex;
- let tree = document.getElementById("engineList");
- if (tree.hasAttribute("editing")) {
- return;
- }
-
- if (aEvent.charCode == KeyEvent.DOM_VK_SPACE) {
- // Space toggles the checkbox.
- let newValue = !gEngineView.getCellValue(
- index,
- tree.columns.getNamedColumn("engineShown")
- );
- gEngineView.setCellValue(
- index,
- tree.columns.getFirstColumn(),
- newValue.toString()
- );
- // Prevent page from scrolling on the space key.
- aEvent.preventDefault();
- } else {
- let isMac = Services.appinfo.OS == "Darwin";
- if (
- (isMac && aEvent.keyCode == KeyEvent.DOM_VK_RETURN) ||
- (!isMac && aEvent.keyCode == KeyEvent.DOM_VK_F2)
- ) {
- this.startEditingAlias(index);
- } else if (
- aEvent.keyCode == KeyEvent.DOM_VK_DELETE ||
- (isMac &&
- aEvent.shiftKey &&
- aEvent.keyCode == KeyEvent.DOM_VK_BACK_SPACE &&
- gEngineView.isEngineSelectedAndRemovable())
- ) {
- // Delete and Shift+Backspace (Mac) removes selected engine.
- Services.search.removeEngine(gEngineView.selectedEngine.originalEngine);
+ let engine = subject.QueryInterface(Ci.nsISearchEngine);
+ switch (data) {
+ case "engine-default": {
+ // Pass through to the engine store to handle updates.
+ this._engineStore.browserSearchEngineModified(engine, data);
+ gSearchPane._updateSuggestionCheckboxes();
+ break;
+ }
+ default:
+ this._engineStore.browserSearchEngineModified(engine, data);
+ }
}
}
},
- startEditingAlias(index) {
- // Local shortcut aliases can't be edited.
- if (gEngineView._getLocalShortcut(index)) {
- return;
- }
-
- let tree = document.getElementById("engineList");
- let engine = gEngineView._engineStore.engines[index];
- tree.startEditing(index, tree.columns.getLastColumn());
- tree.inputField.value = engine.alias || "";
- tree.inputField.select();
- },
-
- async onRestoreDefaults() {
- let num = await gEngineView._engineStore.restoreDefaultEngines();
- gEngineView.rowCountChanged(0, num);
- gEngineView.invalidate();
- },
-
showRestoreDefaults(aEnable) {
document.getElementById("restoreDefaultSearchEngines").disabled = !aEnable;
},
- remove(aEngine) {
- let index = gEngineView._engineStore.removeEngine(aEngine);
- if (!gEngineView.tree) {
- // Only update the selection if it's visible in the UI.
- return;
- }
-
- gEngineView.rowCountChanged(index, -1);
- gEngineView.invalidate();
-
- gEngineView.selection.select(Math.min(index, gEngineView.rowCount - 1));
- gEngineView.ensureRowIsVisible(gEngineView.currentIndex);
-
- document.getElementById("engineList").focus();
- },
-
- async editKeyword(aEngine, aNewKeyword) {
- let keyword = aNewKeyword.trim();
- if (keyword) {
- let eduplicate = false;
- let dupName = "";
-
- // Check for duplicates in Places keywords.
- let bduplicate = !!(await PlacesUtils.keywords.fetch(keyword));
-
- // Check for duplicates in changes we haven't committed yet
- let engines = gEngineView._engineStore.engines;
- let lc_keyword = keyword.toLocaleLowerCase();
- for (let engine of engines) {
- if (
- engine.alias &&
- engine.alias.toLocaleLowerCase() == lc_keyword &&
- engine.name != aEngine.name
- ) {
- eduplicate = true;
- dupName = engine.name;
- break;
- }
- }
-
- // Notify the user if they have chosen an existing engine/bookmark keyword
- if (eduplicate || bduplicate) {
- let msgids = [{ id: "search-keyword-warning-title" }];
- if (eduplicate) {
- msgids.push({
- id: "search-keyword-warning-engine",
- args: { name: dupName },
- });
- } else {
- msgids.push({ id: "search-keyword-warning-bookmark" });
- }
-
- let [dtitle, msg] = await document.l10n.formatValues(msgids);
-
- Services.prompt.alert(window, dtitle, msg);
- return false;
- }
- }
-
- gEngineView._engineStore.changeEngine(aEngine, "alias", keyword);
- gEngineView.invalidate();
- return true;
- },
-
async setDefaultEngine() {
await Services.search.setDefault(
document.getElementById("defaultEngine").selectedItem.engine,
@@ -840,92 +537,162 @@ var gSearchPane = {
},
};
-function onDragEngineStart(event) {
- var selectedIndex = gEngineView.selectedIndex;
+/**
+ * Keeps track of the search engine objects and notifies the views for updates.
+ */
+class EngineStore {
+ /**
+ * A list of engines that are currently visible in the UI.
+ *
+ * @type {Object[]}
+ */
+ engines = [];
- // Local shortcut rows can't be dragged or re-ordered.
- if (gEngineView._getLocalShortcut(selectedIndex)) {
- event.preventDefault();
- return;
- }
+ /**
+ * A list of application provided engines used when restoring the list of
+ * engines to the default set and order.
+ *
+ * @type {nsISearchEngine[]}
+ */
+ #appProvidedEngines = [];
- var tree = document.getElementById("engineList");
- let cell = tree.getCellAt(event.clientX, event.clientY);
- if (selectedIndex >= 0 && !gEngineView.isCheckBox(cell.row, cell.col)) {
- event.dataTransfer.setData(ENGINE_FLAVOR, selectedIndex.toString());
- event.dataTransfer.effectAllowed = "move";
- }
-}
+ /**
+ * A list of listeners to be notified when the engine list changes.
+ *
+ * @type {Object[]}
+ */
+ #listeners = [];
-function EngineStore() {
- this._engines = [];
- this._defaultEngines = [];
- Promise.all([
- Services.search.getVisibleEngines(),
- Services.search.getAppProvidedEngines(),
- ]).then(([visibleEngines, defaultEngines]) => {
+ async init() {
+ let visibleEngines = await Services.search.getVisibleEngines();
for (let engine of visibleEngines) {
this.addEngine(engine);
- gEngineView.rowCountChanged(gEngineView.lastEngineIndex, 1);
}
- this._defaultEngines = defaultEngines.map(this._cloneEngine, this);
- gSearchPane.buildDefaultEngineDropDowns();
+
+ let appProvidedEngines = await Services.search.getAppProvidedEngines();
+ this.#appProvidedEngines = appProvidedEngines.map(this._cloneEngine, this);
+
+ this.notifyRowCountChanged(0, visibleEngines.length);
// check if we need to disable the restore defaults button
- var someHidden = this._defaultEngines.some(e => e.hidden);
+ var someHidden = this.#appProvidedEngines.some(e => e.hidden);
gSearchPane.showRestoreDefaults(someHidden);
- });
-}
-EngineStore.prototype = {
- _engines: null,
- _defaultEngines: null,
+ }
- get engines() {
- return this._engines;
- },
- set engines(val) {
- this._engines = val;
- },
+ /**
+ * Adds a listener to be notified when the engine list changes.
+ *
+ * @param {object} aListener
+ */
+ addListener(aListener) {
+ this.#listeners.push(aListener);
+ }
+
+ /**
+ * Notifies all listeners that the engine list has changed and they should
+ * rebuild.
+ */
+ notifyRebuildViews() {
+ for (let listener of this.#listeners) {
+ try {
+ listener.rebuild(this.engines);
+ } catch (ex) {
+ console.error("Error notifying EngineStore listener", ex);
+ }
+ }
+ }
+
+ /**
+ * Notifies all listeners that the number of engines in the list has changed.
+ *
+ * @param {number} index
+ * @param {number} count
+ */
+ notifyRowCountChanged(index, count) {
+ for (let listener of this.#listeners) {
+ listener.rowCountChanged(index, count, this.engines);
+ }
+ }
+
+ /**
+ * Notifies all listeners that the default engine has changed.
+ *
+ * @param {string} type
+ * @param {object} engine
+ */
+ notifyDefaultEngineChanged(type, engine) {
+ for (let listener of this.#listeners) {
+ if ("defaultEngineChanged" in listener) {
+ listener.defaultEngineChanged(type, engine, this.engines);
+ }
+ }
+ }
+
+ notifyEngineIconUpdated(engine) {
+ // Check the engine is still in the list.
+ let index = this._getIndexForEngine(engine);
+ if (index != -1) {
+ for (let listener of this.#listeners) {
+ listener.engineIconUpdated(index, this.engines);
+ }
+ }
+ }
_getIndexForEngine(aEngine) {
- return this._engines.indexOf(aEngine);
- },
+ return this.engines.indexOf(aEngine);
+ }
_getEngineByName(aName) {
- return this._engines.find(engine => engine.name == aName);
- },
+ return this.engines.find(engine => engine.name == aName);
+ }
_cloneEngine(aEngine) {
var clonedObj = {
- iconURL: aEngine.getIconURL(),
+ iconURL: null,
};
for (let i of ["id", "name", "alias", "hidden"]) {
clonedObj[i] = aEngine[i];
}
clonedObj.originalEngine = aEngine;
+
+ // Trigger getting the iconURL for this engine.
+ aEngine.getIconURL().then(iconURL => {
+ if (iconURL) {
+ clonedObj.iconURL = iconURL;
+ } else if (window.devicePixelRatio > 1) {
+ clonedObj.iconURL =
+ "chrome://browser/skin/search-engine-placeholder@2x.png";
+ } else {
+ clonedObj.iconURL =
+ "chrome://browser/skin/search-engine-placeholder.png";
+ }
+
+ this.notifyEngineIconUpdated(clonedObj);
+ });
+
return clonedObj;
- },
+ }
// Callback for Array's some(). A thisObj must be passed to some()
_isSameEngine(aEngineClone) {
return aEngineClone.originalEngine.id == this.originalEngine.id;
- },
+ }
addEngine(aEngine) {
- this._engines.push(this._cloneEngine(aEngine));
- },
+ this.engines.push(this._cloneEngine(aEngine));
+ }
updateEngine(newEngine) {
- let engineToUpdate = this._engines.findIndex(
+ let engineToUpdate = this.engines.findIndex(
e => e.originalEngine.id == newEngine.id
);
if (engineToUpdate != -1) {
this.engines[engineToUpdate] = this._cloneEngine(newEngine);
}
- },
+ }
moveEngine(aEngine, aNewIndex) {
- if (aNewIndex < 0 || aNewIndex > this._engines.length - 1) {
+ if (aNewIndex < 0 || aNewIndex > this.engines.length - 1) {
throw new Error("ES_moveEngine: invalid aNewIndex!");
}
var index = this._getIndexForEngine(aEngine);
@@ -938,41 +705,73 @@ EngineStore.prototype = {
} // nothing to do
// Move the engine in our internal store
- var removedEngine = this._engines.splice(index, 1)[0];
- this._engines.splice(aNewIndex, 0, removedEngine);
+ var removedEngine = this.engines.splice(index, 1)[0];
+ this.engines.splice(aNewIndex, 0, removedEngine);
return Services.search.moveEngine(aEngine.originalEngine, aNewIndex);
- },
+ }
removeEngine(aEngine) {
- if (this._engines.length == 1) {
+ if (this.engines.length == 1) {
throw new Error("Cannot remove last engine!");
}
let engineName = aEngine.name;
- let index = this._engines.findIndex(element => element.name == engineName);
+ let index = this.engines.findIndex(element => element.name == engineName);
if (index == -1) {
throw new Error("invalid engine?");
}
- this._engines.splice(index, 1)[0];
+ this.engines.splice(index, 1)[0];
if (aEngine.isAppProvided) {
gSearchPane.showRestoreDefaults(true);
}
- gSearchPane.buildDefaultEngineDropDowns();
- return index;
- },
+
+ this.notifyRowCountChanged(index, -1);
+
+ document.getElementById("engineList").focus();
+ }
+
+ /**
+ * Update the default engine UI and engine tree view as appropriate when engine changes
+ * or locale changes occur.
+ *
+ * @param {nsISearchEngine} engine
+ * @param {string} data
+ */
+ browserSearchEngineModified(engine, data) {
+ engine.QueryInterface(Ci.nsISearchEngine);
+ switch (data) {
+ case "engine-added":
+ this.addEngine(engine);
+ this.notifyRowCountChanged(gEngineView.lastEngineIndex, 1);
+ break;
+ case "engine-changed":
+ this.updateEngine(engine);
+ this.notifyRebuildViews();
+ break;
+ case "engine-removed":
+ this.removeEngine(engine);
+ break;
+ case "engine-default":
+ this.notifyDefaultEngineChanged("normal", engine);
+ break;
+ case "engine-default-private":
+ this.notifyDefaultEngineChanged("private", engine);
+ break;
+ }
+ }
async restoreDefaultEngines() {
var added = 0;
- for (var i = 0; i < this._defaultEngines.length; ++i) {
- var e = this._defaultEngines[i];
+ for (var i = 0; i < this.#appProvidedEngines.length; ++i) {
+ var e = this.#appProvidedEngines[i];
// If the engine is already in the list, just move it.
- if (this._engines.some(this._isSameEngine, e)) {
+ if (this.engines.some(this._isSameEngine, e)) {
await this.moveEngine(this._getEngineByName(e.name), i);
} else {
// Otherwise, add it back to our internal store
@@ -981,7 +780,7 @@ EngineStore.prototype = {
// so clear any alias we may have cached before unhiding the engine.
e.alias = "";
- this._engines.splice(i, 0, e);
+ this.engines.splice(i, 0, e);
let engine = e.originalEngine;
engine.hidden = false;
await Services.search.moveEngine(engine, i);
@@ -1006,9 +805,9 @@ EngineStore.prototype = {
Services.search.resetToAppDefaultEngine();
gSearchPane.showRestoreDefaults(false);
- gSearchPane.buildDefaultEngineDropDowns();
+ this.notifyRebuildViews();
return added;
- },
+ }
changeEngine(aEngine, aProp, aNewValue) {
var index = this._getIndexForEngine(aEngine);
@@ -1016,22 +815,31 @@ EngineStore.prototype = {
throw new Error("invalid engine?");
}
- this._engines[index][aProp] = aNewValue;
+ this.engines[index][aProp] = aNewValue;
aEngine.originalEngine[aProp] = aNewValue;
- },
-};
-
-function EngineView(aEngineStore) {
- this._engineStore = aEngineStore;
-
- UrlbarPrefs.addObserver(this);
-
- this.loadL10nNames();
+ }
}
-EngineView.prototype = {
- _engineStore: null,
- tree: null,
+/**
+ * Manages the view of the Search Shortcuts tree on the search pane of preferences.
+ */
+class EngineView {
+ _engineStore = null;
+ _engineList = null;
+ tree = null;
+
+ constructor(aEngineStore) {
+ this._engineStore = aEngineStore;
+ this._engineList = document.getElementById("engineList");
+ this._engineList.view = this;
+
+ UrlbarPrefs.addObserver(this);
+ aEngineStore.addListener(this);
+
+ this.loadL10nNames();
+ this.#addListeners();
+ this.#showAddEngineButton();
+ }
loadL10nNames() {
// This maps local shortcut sources to their l10n names. The names are needed
@@ -1053,11 +861,33 @@ EngineView.prototype = {
// called before name retrieval finished.
this.invalidate();
});
- },
+ }
+
+ #addListeners() {
+ this._engineList.addEventListener("click", this);
+ this._engineList.addEventListener("dragstart", this);
+ this._engineList.addEventListener("keypress", this);
+ this._engineList.addEventListener("select", this);
+ this._engineList.addEventListener("dblclick", this);
+ }
+
+ /**
+ * Shows the "Add Search Engine" button if the pref is enabled.
+ */
+ #showAddEngineButton() {
+ let aliasRefresh = Services.prefs.getBoolPref(
+ "browser.urlbar.update2.engineAliasRefresh",
+ false
+ );
+ if (aliasRefresh) {
+ let addButton = document.getElementById("addEngineButton");
+ addButton.hidden = false;
+ }
+ }
get lastEngineIndex() {
return this._engineStore.engines.length - 1;
- },
+ }
get selectedIndex() {
var seln = this.selection;
@@ -1067,34 +897,52 @@ EngineView.prototype = {
return min.value;
}
return -1;
- },
+ }
get selectedEngine() {
return this._engineStore.engines[this.selectedIndex];
- },
+ }
// Helpers
+ rebuild() {
+ this.invalidate();
+ }
+
rowCountChanged(index, count) {
- if (this.tree) {
- this.tree.rowCountChanged(index, count);
+ if (!this.tree) {
+ return;
}
- },
+ this.tree.rowCountChanged(index, count);
+
+ // If we're removing elements, ensure that we still have a selection.
+ if (count < 0) {
+ this.selection.select(Math.min(index, this.rowCount - 1));
+ this.ensureRowIsVisible(this.currentIndex);
+ }
+ }
+
+ engineIconUpdated(index) {
+ this.tree?.invalidateCell(
+ index,
+ this.tree.columns.getNamedColumn("engineName")
+ );
+ }
invalidate() {
this.tree?.invalidate();
- },
+ }
ensureRowIsVisible(index) {
this.tree.ensureRowIsVisible(index);
- },
+ }
getSourceIndexFromDrag(dataTransfer) {
return parseInt(dataTransfer.getData(ENGINE_FLAVOR));
- },
+ }
isCheckBox(index, column) {
return column.id == "engineShown";
- },
+ }
isEngineSelectedAndRemovable() {
let defaultEngine = Services.search.defaultEngine;
@@ -1109,7 +957,7 @@ EngineView.prototype = {
this.selectedEngine.name != defaultEngine.name &&
this.selectedEngine.name != defaultPrivateEngine.name
);
- },
+ }
/**
* Returns the local shortcut corresponding to a tree row, or null if the row
@@ -1126,7 +974,7 @@ EngineView.prototype = {
return null;
}
return UrlbarUtils.LOCAL_SEARCH_MODES[index - engineCount];
- },
+ }
/**
* Called by UrlbarPrefs when a urlbar pref changes.
@@ -1141,14 +989,170 @@ EngineView.prototype = {
if (parts[0] == "shortcuts" && parts[1] && parts.length == 2) {
this.invalidate();
}
- },
+ }
+
+ handleEvent(aEvent) {
+ switch (aEvent.type) {
+ case "dblclick":
+ if (aEvent.target.id == "engineChildren") {
+ let cell = aEvent.target.parentNode.getCellAt(
+ aEvent.clientX,
+ aEvent.clientY
+ );
+ if (cell.col?.id == "engineKeyword") {
+ this.#startEditingAlias(this.selectedIndex);
+ }
+ }
+ break;
+ case "click":
+ if (
+ aEvent.target.id != "engineChildren" &&
+ !aEvent.target.classList.contains("searchEngineAction")
+ ) {
+ // We don't want to toggle off selection while editing keyword
+ // so proceed only when the input field is hidden.
+ // We need to check that engineList.view is defined here
+ // because the "click" event listener is on <window> and the
+ // view might have been destroyed if the pane has been navigated
+ // away from.
+ if (this._engineList.inputField.hidden && this._engineList.view) {
+ let selection = this._engineList.view.selection;
+ if (selection?.count > 0) {
+ selection.toggleSelect(selection.currentIndex);
+ }
+ this._engineList.blur();
+ }
+ }
+ break;
+ case "command":
+ switch (aEvent.target.id) {
+ case "restoreDefaultSearchEngines":
+ this.#onRestoreDefaults();
+ break;
+ case "removeEngineButton":
+ Services.search.removeEngine(this.selectedEngine.originalEngine);
+ break;
+ case "addEngineButton":
+ gSubDialog.open(
+ "chrome://browser/content/preferences/dialogs/addEngine.xhtml",
+ { features: "resizable=no, modal=yes" }
+ );
+ break;
+ }
+ break;
+ case "dragstart":
+ if (aEvent.target.id == "engineChildren") {
+ this.#onDragEngineStart(aEvent);
+ }
+ break;
+ case "keypress":
+ if (aEvent.target.id == "engineList") {
+ this.#onTreeKeyPress(aEvent);
+ }
+ break;
+ case "select":
+ if (aEvent.target.id == "engineList") {
+ this.#onTreeSelect();
+ }
+ break;
+ }
+ }
+
+ /**
+ * Called when the restore default engines button is clicked to reset the
+ * list of engines to their defaults.
+ */
+ async #onRestoreDefaults() {
+ let num = await this._engineStore.restoreDefaultEngines();
+ this.rowCountChanged(0, num);
+ }
+
+ #onDragEngineStart(event) {
+ let selectedIndex = this.selectedIndex;
+
+ // Local shortcut rows can't be dragged or re-ordered.
+ if (this._getLocalShortcut(selectedIndex)) {
+ event.preventDefault();
+ return;
+ }
+
+ let tree = document.getElementById("engineList");
+ let cell = tree.getCellAt(event.clientX, event.clientY);
+ if (selectedIndex >= 0 && !this.isCheckBox(cell.row, cell.col)) {
+ event.dataTransfer.setData(ENGINE_FLAVOR, selectedIndex.toString());
+ event.dataTransfer.effectAllowed = "move";
+ }
+ }
+
+ #onTreeSelect() {
+ document.getElementById("removeEngineButton").disabled =
+ !this.isEngineSelectedAndRemovable();
+ }
+
+ #onTreeKeyPress(aEvent) {
+ let index = this.selectedIndex;
+ let tree = document.getElementById("engineList");
+ if (tree.hasAttribute("editing")) {
+ return;
+ }
+
+ if (aEvent.charCode == KeyEvent.DOM_VK_SPACE) {
+ // Space toggles the checkbox.
+ let newValue = !this.getCellValue(
+ index,
+ tree.columns.getNamedColumn("engineShown")
+ );
+ this.setCellValue(
+ index,
+ tree.columns.getFirstColumn(),
+ newValue.toString()
+ );
+ // Prevent page from scrolling on the space key.
+ aEvent.preventDefault();
+ } else {
+ let isMac = Services.appinfo.OS == "Darwin";
+ if (
+ (isMac && aEvent.keyCode == KeyEvent.DOM_VK_RETURN) ||
+ (!isMac && aEvent.keyCode == KeyEvent.DOM_VK_F2)
+ ) {
+ this.#startEditingAlias(index);
+ } else if (
+ aEvent.keyCode == KeyEvent.DOM_VK_DELETE ||
+ (isMac &&
+ aEvent.shiftKey &&
+ aEvent.keyCode == KeyEvent.DOM_VK_BACK_SPACE &&
+ this.isEngineSelectedAndRemovable())
+ ) {
+ // Delete and Shift+Backspace (Mac) removes selected engine.
+ Services.search.removeEngine(this.selectedEngine.originalEngine);
+ }
+ }
+ }
+
+ /**
+ * Triggers editing of an alias in the tree.
+ *
+ * @param {number} index
+ */
+ #startEditingAlias(index) {
+ // Local shortcut aliases can't be edited.
+ if (this._getLocalShortcut(index)) {
+ return;
+ }
+
+ let tree = document.getElementById("engineList");
+ let engine = this._engineStore.engines[index];
+ tree.startEditing(index, tree.columns.getLastColumn());
+ tree.inputField.value = engine.alias || "";
+ tree.inputField.select();
+ }
// nsITreeView
get rowCount() {
return (
this._engineStore.engines.length + UrlbarUtils.LOCAL_SEARCH_MODES.length
);
- },
+ }
getImageSrc(index, column) {
if (column.id == "engineName") {
@@ -1157,18 +1161,11 @@ EngineView.prototype = {
return shortcut.icon;
}
- if (this._engineStore.engines[index].iconURL) {
- return this._engineStore.engines[index].iconURL;
- }
-
- if (window.devicePixelRatio > 1) {
- return "chrome://browser/skin/search-engine-placeholder@2x.png";
- }
- return "chrome://browser/skin/search-engine-placeholder.png";
+ return this._engineStore.engines[index].iconURL;
}
return "";
- },
+ }
getCellText(index, column) {
if (column.id == "engineName") {
@@ -1185,11 +1182,11 @@ EngineView.prototype = {
return this._engineStore.engines[index].originalEngine.aliases.join(", ");
}
return "";
- },
+ }
setTree(tree) {
this.tree = tree;
- },
+ }
canDrop(targetIndex, orientation, dataTransfer) {
var sourceIndex = this.getSourceIndexFromDrag(dataTransfer);
@@ -1200,7 +1197,7 @@ EngineView.prototype = {
// Local shortcut rows can't be dragged or dropped on.
targetIndex < this._engineStore.engines.length
);
- },
+ }
async drop(dropIndex, orientation, dataTransfer) {
// Local shortcut rows can't be dragged or dropped on. This can sometimes
@@ -1223,17 +1220,16 @@ EngineView.prototype = {
await this._engineStore.moveEngine(sourceEngine, dropIndex);
gSearchPane.showRestoreDefaults(true);
- gSearchPane.buildDefaultEngineDropDowns();
// Redraw, and adjust selection
this.invalidate();
this.selection.select(dropIndex);
- },
+ }
- selection: null,
- getRowProperties(index) {
+ selection = null;
+ getRowProperties() {
return "";
- },
+ }
getCellProperties(index, column) {
if (column.id == "engineName") {
// For local shortcut rows, return the result source name so we can style
@@ -1244,34 +1240,34 @@ EngineView.prototype = {
}
}
return "";
- },
- getColumnProperties(column) {
+ }
+ getColumnProperties() {
return "";
- },
- isContainer(index) {
+ }
+ isContainer() {
return false;
- },
- isContainerOpen(index) {
+ }
+ isContainerOpen() {
return false;
- },
- isContainerEmpty(index) {
+ }
+ isContainerEmpty() {
return false;
- },
- isSeparator(index) {
+ }
+ isSeparator() {
return false;
- },
- isSorted(index) {
+ }
+ isSorted() {
return false;
- },
- getParentIndex(index) {
+ }
+ getParentIndex() {
return -1;
- },
- hasNextSibling(parentIndex, index) {
+ }
+ hasNextSibling() {
return false;
- },
- getLevel(index) {
+ }
+ getLevel() {
return 0;
- },
+ }
getCellValue(index, column) {
if (column.id == "engineShown") {
let shortcut = this._getLocalShortcut(index);
@@ -1281,17 +1277,17 @@ EngineView.prototype = {
return !this._engineStore.engines[index].originalEngine.hideOneOffButton;
}
return undefined;
- },
- toggleOpenState(index) {},
- cycleHeader(column) {},
- selectionChanged() {},
- cycleCell(row, column) {},
+ }
+ toggleOpenState() {}
+ cycleHeader() {}
+ selectionChanged() {}
+ cycleCell() {}
isEditable(index, column) {
return (
column.id != "engineName" &&
(column.id == "engineShown" || !this._getLocalShortcut(index))
);
- },
+ }
setCellValue(index, column, value) {
if (column.id == "engineShown") {
let shortcut = this._getLocalShortcut(index);
@@ -1302,18 +1298,153 @@ EngineView.prototype = {
}
this._engineStore.engines[index].originalEngine.hideOneOffButton =
value != "true";
- gEngineView.invalidate();
+ this.invalidate();
}
- },
+ }
setCellText(index, column, value) {
if (column.id == "engineKeyword") {
- gSearchPane
- .editKeyword(this._engineStore.engines[index], value)
- .then(valid => {
+ this.#changeKeyword(this._engineStore.engines[index], value).then(
+ valid => {
if (!valid) {
- gSearchPane.startEditingAlias(index);
+ this.#startEditingAlias(index);
}
- });
+ }
+ );
}
- },
-};
+ }
+
+ /**
+ * Handles changing the keyword for an engine. This will check for potentially
+ * duplicate keywords and prompt the user if necessary.
+ *
+ * @param {object} aEngine
+ * The engine to change.
+ * @param {string} aNewKeyword
+ * The new keyword.
+ * @returns {Promise<boolean>}
+ * Resolves to true if the keyword was changed.
+ */
+ async #changeKeyword(aEngine, aNewKeyword) {
+ let keyword = aNewKeyword.trim();
+ if (keyword) {
+ let eduplicate = false;
+ let dupName = "";
+
+ // Check for duplicates in Places keywords.
+ let bduplicate = !!(await PlacesUtils.keywords.fetch(keyword));
+
+ // Check for duplicates in changes we haven't committed yet
+ let engines = this._engineStore.engines;
+ let lc_keyword = keyword.toLocaleLowerCase();
+ for (let engine of engines) {
+ if (
+ engine.alias &&
+ engine.alias.toLocaleLowerCase() == lc_keyword &&
+ engine.name != aEngine.name
+ ) {
+ eduplicate = true;
+ dupName = engine.name;
+ break;
+ }
+ }
+
+ // Notify the user if they have chosen an existing engine/bookmark keyword
+ if (eduplicate || bduplicate) {
+ let msgids = [{ id: "search-keyword-warning-title" }];
+ if (eduplicate) {
+ msgids.push({
+ id: "search-keyword-warning-engine",
+ args: { name: dupName },
+ });
+ } else {
+ msgids.push({ id: "search-keyword-warning-bookmark" });
+ }
+
+ let [dtitle, msg] = await document.l10n.formatValues(msgids);
+
+ Services.prompt.alert(window, dtitle, msg);
+ return false;
+ }
+ }
+
+ this._engineStore.changeEngine(aEngine, "alias", keyword);
+ this.invalidate();
+ return true;
+ }
+}
+
+/**
+ * Manages the default engine dropdown buttons in the search pane of preferences.
+ */
+class DefaultEngineDropDown {
+ #element = null;
+ #type = null;
+
+ constructor(type, engineStore) {
+ this.#type = type;
+ this.#element = document.getElementById(
+ type == "private" ? "defaultPrivateEngine" : "defaultEngine"
+ );
+
+ engineStore.addListener(this);
+ }
+
+ rowCountChanged(index, count, enginesList) {
+ // Simply rebuild the menulist, rather than trying to update the changed row.
+ this.rebuild(enginesList);
+ }
+
+ defaultEngineChanged(type, engine, enginesList) {
+ if (type != this.#type) {
+ return;
+ }
+ // If the user is going through the drop down using up/down keys, the
+ // dropdown may still be open (eg. on Windows) when engine-default is
+ // fired, so rebuilding the list unconditionally would get in the way.
+ let selectedEngineName = this.#element.selectedItem?.engine?.name;
+ if (selectedEngineName != engine.name) {
+ this.rebuild(enginesList);
+ }
+ }
+
+ engineIconUpdated(index, enginesList) {
+ let item = this.#element.getItemAtIndex(index);
+ // Check this is the right item.
+ if (item?.label == enginesList[index].name) {
+ item.setAttribute("image", enginesList[index].iconURL);
+ }
+ }
+
+ async rebuild(enginesList) {
+ if (
+ this.#type == "private" &&
+ !gSearchPane._separatePrivateDefaultPref.value
+ ) {
+ return;
+ }
+ let defaultEngine = await Services.search[
+ this.#type == "normal" ? "getDefault" : "getDefaultPrivate"
+ ]();
+
+ this.#element.removeAllItems();
+ for (let engine of enginesList) {
+ let item = this.#element.appendItem(engine.name);
+ item.setAttribute(
+ "class",
+ "menuitem-iconic searchengine-menuitem menuitem-with-favicon"
+ );
+ if (engine.iconURL) {
+ item.setAttribute("image", engine.iconURL);
+ }
+ item.engine = engine;
+ if (engine.name == defaultEngine.name) {
+ this.#element.selectedItem = item;
+ }
+ }
+ // This should never happen, but try and make sure we have at least one
+ // selected item.
+ if (!this.#element.selectedItem) {
+ this.#element.selectedIndex = 0;
+ }
+ }
+}
diff --git a/browser/components/preferences/sync.js b/browser/components/preferences/sync.js
index 11a6a42e2e..fa3f333e8b 100644
--- a/browser/components/preferences/sync.js
+++ b/browser/components/preferences/sync.js
@@ -69,7 +69,7 @@ var gSyncPane = {
xps.ensureLoaded();
},
- _showLoadPage(xps) {
+ _showLoadPage() {
let maybeAcct = false;
let username = Services.prefs.getCharPref("services.sync.username", "");
if (username) {
diff --git a/browser/components/preferences/tests/browser.toml b/browser/components/preferences/tests/browser.toml
index fe523bde94..9e619ce4be 100644
--- a/browser/components/preferences/tests/browser.toml
+++ b/browser/components/preferences/tests/browser.toml
@@ -11,6 +11,8 @@ support-files = [
"addons/set_newtab.xpi",
]
+["browser_about_settings.js"]
+
["browser_advanced_update.js"]
skip-if = ["!updater"]
@@ -82,6 +84,8 @@ skip-if = ["socketprocess_networking"]
["browser_defaultbrowser_alwayscheck.js"]
+["browser_dns_over_https_exceptions_subdialog.js"]
+
["browser_engines.js"]
fail-if = ["a11y_checks"] # Bug 1854636 clicked treechildren#engineChildren may not be focusable
diff --git a/browser/components/preferences/tests/browser_about_settings.js b/browser/components/preferences/tests/browser_about_settings.js
new file mode 100644
index 0000000000..3ffd75eeef
--- /dev/null
+++ b/browser/components/preferences/tests/browser_about_settings.js
@@ -0,0 +1,29 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(async function test_openPreferences_aboutSettings() {
+ await BrowserTestUtils.withNewTab(
+ {
+ gBrowser,
+ url: "about:settings",
+ },
+ async () => {
+ is(
+ gBrowser.currentURI.spec,
+ "about:settings",
+ "about:settings should open normally"
+ );
+
+ // using `openPreferencesViaOpenPreferencesAPI` would introduce an extra about:blank tab we need to take care of
+ await openPreferences("paneGeneral");
+
+ is(
+ gBrowser.currentURI.spec,
+ "about:settings#general",
+ "openPreferences should keep about:settings"
+ );
+ }
+ );
+});
diff --git a/browser/components/preferences/tests/browser_basic_rebuild_fonts_test.js b/browser/components/preferences/tests/browser_basic_rebuild_fonts_test.js
index 51998db5a9..4491373c75 100644
--- a/browser/components/preferences/tests/browser_basic_rebuild_fonts_test.js
+++ b/browser/components/preferences/tests/browser_basic_rebuild_fonts_test.js
@@ -109,7 +109,7 @@ add_task(async function () {
win.FontBuilder._enumerator = {
_list: ["MockedFont1", "MockedFont2", "MockedFont3"],
_defaultFont: null,
- EnumerateFontsAsync(lang, type) {
+ EnumerateFontsAsync() {
return Promise.resolve(this._list);
},
EnumerateAllFontsAsync() {
diff --git a/browser/components/preferences/tests/browser_browser_languages_subdialog.js b/browser/components/preferences/tests/browser_browser_languages_subdialog.js
index 1941fb3502..9faa6d2969 100644
--- a/browser/components/preferences/tests/browser_browser_languages_subdialog.js
+++ b/browser/components/preferences/tests/browser_browser_languages_subdialog.js
@@ -194,7 +194,7 @@ function assertTelemetryRecorded(events) {
// Only look at the related events after stripping the timestamp and category.
let relatedEvents = snapshot.parent
- .filter(([timestamp, category]) => category == TELEMETRY_CATEGORY)
+ .filter(([, category]) => category == TELEMETRY_CATEGORY)
.map(relatedEvent => relatedEvent.slice(2, 6));
// Events are now an array of: method, object[, value[, extra]] as expected.
@@ -297,7 +297,7 @@ add_task(async function testDisabledBrowserLanguages() {
// Search for more languages.
available.menupopup.lastElementChild.doCommand();
available.menupopup.hidePopup();
- await waitForMutation(available.menupopup, { childList: true }, target =>
+ await waitForMutation(available.menupopup, { childList: true }, () =>
Array.from(available.menupopup.children).some(
locale => locale.value == "pl"
)
@@ -352,7 +352,7 @@ add_task(async function testReorderingBrowserLanguages() {
// Install all the available langpacks.
let langpacks = await createTestLangpacks();
let addons = await Promise.all(
- langpacks.map(async ([locale, file]) => {
+ langpacks.map(async ([, file]) => {
let install = await AddonTestUtils.promiseInstallFile(file);
return install.addon;
})
@@ -458,7 +458,7 @@ add_task(async function testAddAndRemoveSelectedLanguages() {
let langpacks = await createTestLangpacks();
let addons = await Promise.all(
- langpacks.map(async ([locale, file]) => {
+ langpacks.map(async ([, file]) => {
let install = await AddonTestUtils.promiseInstallFile(file);
return install.addon;
})
@@ -603,7 +603,7 @@ add_task(async function testInstallFromAMO() {
await waitForMutation(
available.menupopup,
{ childList: true },
- target => available.itemCount > 1
+ () => available.itemCount > 1
);
}
@@ -685,7 +685,7 @@ add_task(async function testInstallFromAMO() {
await waitForMutation(
available.menupopup,
{ childList: true },
- target => available.itemCount > 1
+ () => available.itemCount > 1
);
}
assertLocaleOrder(selected, "en-US");
@@ -793,7 +793,7 @@ add_task(async function testReorderMainPane() {
let langpacks = await createTestLangpacks();
let addons = await Promise.all(
- langpacks.map(async ([locale, file]) => {
+ langpacks.map(async ([, file]) => {
let install = await AddonTestUtils.promiseInstallFile(file);
return install.addon;
})
@@ -860,7 +860,7 @@ add_task(async function testLiveLanguageReloading() {
let langpacks = await createTestLangpacks();
let addons = await Promise.all(
- langpacks.map(async ([locale, file]) => {
+ langpacks.map(async ([, file]) => {
let install = await AddonTestUtils.promiseInstallFile(file);
return install.addon;
})
@@ -928,7 +928,7 @@ add_task(async function testLiveLanguageReloadingBidiOff() {
let langpacks = await createTestLangpacks();
let addons = await Promise.all(
- langpacks.map(async ([locale, file]) => {
+ langpacks.map(async ([, file]) => {
let install = await AddonTestUtils.promiseInstallFile(file);
return install.addon;
})
@@ -1006,7 +1006,7 @@ add_task(async function testLiveLanguageReloadingBidiOn() {
let langpacks = await createTestLangpacks();
let addons = await Promise.all(
- langpacks.map(async ([locale, file]) => {
+ langpacks.map(async ([, file]) => {
let install = await AddonTestUtils.promiseInstallFile(file);
return install.addon;
})
diff --git a/browser/components/preferences/tests/browser_cert_export.js b/browser/components/preferences/tests/browser_cert_export.js
index 48769f84e6..f37cdec767 100644
--- a/browser/components/preferences/tests/browser_cert_export.js
+++ b/browser/components/preferences/tests/browser_cert_export.js
@@ -78,7 +78,7 @@ async function checkCertExportWorks(
) {
MockFilePicker.displayDirectory = destDir;
var destFile = destDir.clone();
- MockFilePicker.init(window);
+ MockFilePicker.init(window.browsingContext);
MockFilePicker.filterIndex = exportType;
MockFilePicker.showCallback = function (fp) {
info("showCallback");
diff --git a/browser/components/preferences/tests/browser_connection.js b/browser/components/preferences/tests/browser_connection.js
index 01cdf571f2..896361b16b 100644
--- a/browser/components/preferences/tests/browser_connection.js
+++ b/browser/components/preferences/tests/browser_connection.js
@@ -26,7 +26,7 @@ function test() {
so it has to be opened as a sub dialog of the main pref tab.
Open the main tab here.
*/
- open_preferences(async function tabOpened(aContentWindow) {
+ open_preferences(async function tabOpened() {
is(
gBrowser.currentURI.spec,
"about:preferences",
diff --git a/browser/components/preferences/tests/browser_connection_bug388287.js b/browser/components/preferences/tests/browser_connection_bug388287.js
index d6f0c3c9d0..87d41a22c1 100644
--- a/browser/components/preferences/tests/browser_connection_bug388287.js
+++ b/browser/components/preferences/tests/browser_connection_bug388287.js
@@ -37,7 +37,7 @@ function test() {
so it has to be opened as a sub dialog of the main pref tab.
Open the main tab here.
*/
- open_preferences(async function tabOpened(aContentWindow) {
+ open_preferences(async function tabOpened() {
let dialog, dialogClosingPromise, dialogElement;
let proxyTypePref, sharePref, httpPref, httpPortPref;
diff --git a/browser/components/preferences/tests/browser_cookies_exceptions.js b/browser/components/preferences/tests/browser_cookies_exceptions.js
index d2d538a48a..03e29d0b4c 100644
--- a/browser/components/preferences/tests/browser_cookies_exceptions.js
+++ b/browser/components/preferences/tests/browser_cookies_exceptions.js
@@ -19,7 +19,7 @@ add_task(async function testAllow() {
apply();
await observeAllPromise;
},
- params => {
+ () => {
return [
{
type: "cookie",
@@ -52,7 +52,7 @@ add_task(async function testBlock() {
apply();
await observeAllPromise;
},
- params => {
+ () => {
return [
{
type: "cookie",
@@ -85,7 +85,7 @@ add_task(async function testAllowAgain() {
apply();
await observeAllPromise;
},
- params => {
+ () => {
return [
{
type: "cookie",
@@ -152,7 +152,7 @@ add_task(async function testAdd() {
PermissionTestUtils.remove(uri, "popup");
},
- params => {
+ () => {
return [
{
type: "popup",
@@ -178,7 +178,7 @@ add_task(async function testAllowHTTPSWithPort() {
apply();
await observeAllPromise;
},
- params => {
+ () => {
return [
{
type: "cookie",
@@ -204,7 +204,7 @@ add_task(async function testBlockHTTPSWithPort() {
apply();
await observeAllPromise;
},
- params => {
+ () => {
return [
{
type: "cookie",
@@ -230,7 +230,7 @@ add_task(async function testAllowAgainHTTPSWithPort() {
apply();
await observeAllPromise;
},
- params => {
+ () => {
return [
{
type: "cookie",
@@ -288,7 +288,7 @@ add_task(async function testAllowPort() {
apply();
await observeAllPromise;
},
- params => {
+ () => {
return [
{
type: "cookie",
@@ -321,7 +321,7 @@ add_task(async function testBlockPort() {
apply();
await observeAllPromise;
},
- params => {
+ () => {
return [
{
type: "cookie",
@@ -354,7 +354,7 @@ add_task(async function testAllowAgainPort() {
apply();
await observeAllPromise;
},
- params => {
+ () => {
return [
{
type: "cookie",
@@ -450,7 +450,7 @@ add_task(async function testSort() {
PermissionTestUtils.remove(uri, "cookie");
}
},
- params => {
+ () => {
return [
{
type: "cookie",
@@ -477,7 +477,7 @@ add_task(async function testSort() {
add_task(async function testPrivateBrowsingSessionPermissionsAreHidden() {
await runTest(
- async (params, observeAllPromise, apply) => {
+ async params => {
assertListContents(params, []);
let uri = Services.io.newURI("http://test.com");
@@ -498,7 +498,7 @@ add_task(async function testPrivateBrowsingSessionPermissionsAreHidden() {
PermissionTestUtils.remove(uri, "cookie");
},
- params => {
+ () => {
return [];
}
);
diff --git a/browser/components/preferences/tests/browser_dns_over_https_exceptions_subdialog.js b/browser/components/preferences/tests/browser_dns_over_https_exceptions_subdialog.js
new file mode 100644
index 0000000000..c24c13e9e8
--- /dev/null
+++ b/browser/components/preferences/tests/browser_dns_over_https_exceptions_subdialog.js
@@ -0,0 +1,185 @@
+async function dohExceptionsSubdialogOpened(dialogOverlay) {
+ const promiseSubDialogLoaded = promiseLoadSubDialog(
+ "chrome://browser/content/preferences/dialogs/dohExceptions.xhtml"
+ );
+ const contentDocument = gBrowser.contentDocument;
+ contentDocument.getElementById("dohExceptionsButton").click();
+ const win = await promiseSubDialogLoaded;
+ dialogOverlay = content.gSubDialog._topDialog._overlay;
+ ok(!BrowserTestUtils.isHidden(dialogOverlay), "The dialog is visible.");
+ return win;
+}
+
+function acceptDoHExceptionsSubdialog(win) {
+ const button = win.document.querySelector("dialog").getButton("accept");
+ button.doCommand();
+}
+
+function cancelDoHExceptionsSubdialog(win) {
+ const button = win.document.querySelector("dialog").getButton("cancel");
+ button.doCommand();
+}
+
+function addNewException(domain, dialog) {
+ let url = dialog.document.getElementById("url");
+ let addButton = dialog.document.getElementById("btnAddException");
+
+ ok(
+ addButton.disabled,
+ "The Add button is disabled when domain's input box is empty"
+ );
+
+ url.focus();
+ EventUtils.sendString(domain);
+
+ ok(
+ !addButton.disabled,
+ "The Add button is enabled when some text is on domain's input box"
+ );
+
+ addButton.click();
+
+ is(
+ url.value,
+ "",
+ "Domain input box is empty after adding a new domain to the list"
+ );
+ ok(
+ addButton.disabled,
+ "The Add button is disabled after exception has been added to the list"
+ );
+}
+
+add_task(async function () {
+ Services.prefs.lockPref("network.trr.excluded-domains");
+
+ await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
+ leaveOpen: true,
+ });
+ let dialogOverlay = content.gSubDialog._preloadDialog._overlay;
+ let win = await dohExceptionsSubdialogOpened(dialogOverlay);
+
+ ok(
+ win.document.getElementById("btnAddException").disabled,
+ "The Add button is disabled when preference is locked"
+ );
+ ok(
+ win.document.getElementById("url").disabled,
+ "The url input box is disabled when preference is locked"
+ );
+
+ cancelDoHExceptionsSubdialog(win);
+ Services.prefs.unlockPref("network.trr.excluded-domains");
+ win = await dohExceptionsSubdialogOpened(dialogOverlay);
+
+ ok(
+ win.document.getElementById("btnAddException").disabled,
+ "The Add button is disabled when preference is not locked"
+ );
+ ok(
+ !win.document.getElementById("url").disabled,
+ "The url input box is enabled when preference is not locked"
+ );
+
+ cancelDoHExceptionsSubdialog(win);
+ gBrowser.removeCurrentTab();
+});
+
+add_task(async function () {
+ await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
+ leaveOpen: true,
+ });
+ let dialogOverlay = content.gSubDialog._preloadDialog._overlay;
+
+ ok(BrowserTestUtils.isHidden(dialogOverlay), "The dialog is invisible.");
+ let win = await dohExceptionsSubdialogOpened(dialogOverlay);
+ acceptDoHExceptionsSubdialog(win);
+ ok(BrowserTestUtils.isHidden(dialogOverlay), "The dialog is invisible.");
+
+ win = await dohExceptionsSubdialogOpened(dialogOverlay);
+ Assert.equal(
+ win.document.getElementById("permissionsBox").itemCount,
+ 0,
+ "There are no exceptions set."
+ );
+ ok(
+ win.document.getElementById("removeException").disabled,
+ "The Remove button is disabled when there are no exceptions on the list"
+ );
+ ok(
+ win.document.getElementById("removeAllExceptions").disabled,
+ "The Remove All button is disabled when there are no exceptions on the list"
+ );
+ ok(
+ win.document.getElementById("btnAddException").disabled,
+ "The Add button is disabled when dialog box has just been opened"
+ );
+
+ addNewException("test1.com", win);
+ Assert.equal(
+ win.document.getElementById("permissionsBox").itemCount,
+ 1,
+ "List shows 1 new item"
+ );
+ let activeExceptions = win.document.getElementById("permissionsBox").children;
+ is(
+ activeExceptions[0].getAttribute("domain"),
+ "test1.com",
+ "test1.com added to the list"
+ );
+ ok(
+ !win.document.getElementById("removeAllExceptions").disabled,
+ "The Remove All button is enabled when there is one exception on the list"
+ );
+ addNewException("test2.com", win);
+ addNewException("test3.com", win);
+ Assert.equal(
+ win.document.getElementById("permissionsBox").itemCount,
+ 3,
+ "List shows 3 domain items"
+ );
+ ok(
+ win.document.getElementById("removeException").disabled,
+ "The Remove button is disabled when no exception has been selected"
+ );
+ win.document.getElementById("permissionsBox").selectedIndex = 1;
+ ok(
+ !win.document.getElementById("removeException").disabled,
+ "The Remove button is enabled when an exception has been selected"
+ );
+ win.document.getElementById("removeException").doCommand();
+ Assert.equal(
+ win.document.getElementById("permissionsBox").itemCount,
+ 2,
+ "List shows 2 domain items after removing one of the three"
+ );
+ activeExceptions = win.document.getElementById("permissionsBox").children;
+ ok(
+ win.document.getElementById("permissionsBox").itemCount == 2 &&
+ activeExceptions[0].getAttribute("domain") == "test1.com" &&
+ activeExceptions[1].getAttribute("domain") == "test3.com",
+ "test1.com and test3.com are the only items left on the list"
+ );
+ is(
+ win.document.getElementById("permissionsBox").selectedIndex,
+ -1,
+ "There is no selected item after removal"
+ );
+ addNewException("test2.com", win);
+ activeExceptions = win.document.getElementById("permissionsBox").children;
+ ok(
+ win.document.getElementById("permissionsBox").itemCount == 3 &&
+ activeExceptions[1].getAttribute("domain") == "test2.com",
+ "test2.com has been added as the second item"
+ );
+ win.document.getElementById("removeAllExceptions").doCommand();
+ is(
+ win.document.getElementById("permissionsBox").itemCount,
+ 0,
+ "There are no elements on the list after clicking Remove All"
+ );
+
+ acceptDoHExceptionsSubdialog(win);
+
+ gBrowser.removeCurrentTab();
+});
diff --git a/browser/components/preferences/tests/browser_fluent.js b/browser/components/preferences/tests/browser_fluent.js
index db2daecc4f..ae83abecf0 100644
--- a/browser/components/preferences/tests/browser_fluent.js
+++ b/browser/components/preferences/tests/browser_fluent.js
@@ -1,7 +1,7 @@
function whenMainPaneLoadedFinished() {
- return new Promise(function (resolve, reject) {
+ return new Promise(function (resolve) {
const topic = "main-pane-loaded";
- Services.obs.addObserver(function observer(aSubject) {
+ Services.obs.addObserver(function observer() {
Services.obs.removeObserver(observer, topic);
resolve();
}, topic);
diff --git a/browser/components/preferences/tests/browser_localSearchShortcuts.js b/browser/components/preferences/tests/browser_localSearchShortcuts.js
index 0b8e170cc1..7f0f4869b7 100644
--- a/browser/components/preferences/tests/browser_localSearchShortcuts.js
+++ b/browser/components/preferences/tests/browser_localSearchShortcuts.js
@@ -36,7 +36,7 @@ add_setup(async function () {
// The rows should be visible and checked by default.
add_task(async function visible() {
await checkRowVisibility(true);
- await forEachLocalShortcutRow(async (row, shortcut) => {
+ await forEachLocalShortcutRow(async row => {
Assert.equal(
gTree.view.getCellValue(row, gTree.columns.getNamedColumn("engineShown")),
"true",
@@ -136,7 +136,7 @@ add_task(async function syncToPrefs_click() {
// The keyword column should not be editable according to isEditable().
add_task(async function keywordNotEditable_isEditable() {
- await forEachLocalShortcutRow(async (row, shortcut) => {
+ await forEachLocalShortcutRow(async row => {
Assert.ok(
!gTree.view.isEditable(
row,
diff --git a/browser/components/preferences/tests/browser_permissions_urlFieldHidden.js b/browser/components/preferences/tests/browser_permissions_urlFieldHidden.js
index 537ee3db72..dea9762861 100644
--- a/browser/components/preferences/tests/browser_permissions_urlFieldHidden.js
+++ b/browser/components/preferences/tests/browser_permissions_urlFieldHidden.js
@@ -3,7 +3,7 @@
const PERMISSIONS_URL =
"chrome://browser/content/preferences/dialogs/permissions.xhtml";
-add_task(async function urlFieldVisibleForPopupPermissions(finish) {
+add_task(async function urlFieldVisibleForPopupPermissions() {
await openPreferencesViaOpenPreferencesAPI("panePrivacy", {
leaveOpen: true,
});
diff --git a/browser/components/preferences/tests/browser_proxy_backup.js b/browser/components/preferences/tests/browser_proxy_backup.js
index fc05e19ada..e4ce5a99bd 100644
--- a/browser/components/preferences/tests/browser_proxy_backup.js
+++ b/browser/components/preferences/tests/browser_proxy_backup.js
@@ -47,7 +47,7 @@ function test() {
so it has to be opened as a sub dialog of the main pref tab.
Open the main tab here.
*/
- open_preferences(async function tabOpened(aContentWindow) {
+ open_preferences(async function tabOpened() {
is(
gBrowser.currentURI.spec,
"about:preferences",
diff --git a/browser/components/preferences/tests/browser_searchChangedEngine.js b/browser/components/preferences/tests/browser_searchChangedEngine.js
index 0882c9775e..22baba8dd6 100644
--- a/browser/components/preferences/tests/browser_searchChangedEngine.js
+++ b/browser/components/preferences/tests/browser_searchChangedEngine.js
@@ -46,6 +46,10 @@ add_task(async function test_change_engine() {
let row = findRow(tree, "Example");
Assert.notEqual(row, -1, "Should have found the entry");
+ await TestUtils.waitForCondition(
+ () => tree.view.getImageSrc(row, tree.columns.getNamedColumn("engineName")),
+ "Should have go an image URL"
+ );
Assert.ok(
tree.view
.getImageSrc(row, tree.columns.getNamedColumn("engineName"))
@@ -74,6 +78,13 @@ add_task(async function test_change_engine() {
row = findRow(tree, "Example 2");
Assert.notEqual(row, -1, "Should have found the updated entry");
+ await TestUtils.waitForCondition(
+ () =>
+ tree.view
+ .getImageSrc(row, tree.columns.getNamedColumn("engineName"))
+ ?.includes("img456.png"),
+ "Should have updated the image URL"
+ );
Assert.ok(
tree.view
.getImageSrc(row, tree.columns.getNamedColumn("engineName"))
diff --git a/browser/components/preferences/tests/browser_search_within_preferences_2.js b/browser/components/preferences/tests/browser_search_within_preferences_2.js
index 6de068fbe4..5fcb445adc 100644
--- a/browser/components/preferences/tests/browser_search_within_preferences_2.js
+++ b/browser/components/preferences/tests/browser_search_within_preferences_2.js
@@ -178,3 +178,87 @@ add_task(async function () {
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
+
+/**
+ * Test that search works as expected for custom elements that utilize both
+ * slots and shadow DOM. We should be able to find text the shadow DOM.
+ */
+add_task(async function testSearchShadowDOM() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
+ leaveOpen: true,
+ });
+
+ // Create the toggle.
+ let { toggle, SHADOW_DOM_TEXT } = createToggle(gBrowser);
+
+ ok(
+ !BrowserTestUtils.isVisible(toggle),
+ "Toggle is not visible prior to search."
+ );
+
+ // Perform search with text found in moz-toggle's shadow DOM.
+ let query = SHADOW_DOM_TEXT;
+ let searchCompletedPromise = BrowserTestUtils.waitForEvent(
+ gBrowser.contentWindow,
+ "PreferencesSearchCompleted",
+ evt => evt.detail == query
+ );
+ EventUtils.sendString(query);
+ await searchCompletedPromise;
+ ok(
+ BrowserTestUtils.isVisible(toggle),
+ "Toggle is visible after searching for string in the shadow DOM."
+ );
+
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+/**
+ * Test that search works as expected for custom elements that utilize both
+ * slots and shadow DOM. We should be able to find text the light DOM.
+ */
+add_task(async function testSearchLightDOM() {
+ await openPreferencesViaOpenPreferencesAPI("paneGeneral", {
+ leaveOpen: true,
+ });
+
+ // Create the toggle.
+ let { toggle, LIGHT_DOM_TEXT } = createToggle(gBrowser);
+
+ // Perform search with text found in moz-toggle's slotted content.
+ let query = LIGHT_DOM_TEXT;
+ let searchCompletedPromise = BrowserTestUtils.waitForEvent(
+ gBrowser.contentWindow,
+ "PreferencesSearchCompleted",
+ evt => evt.detail == query
+ );
+ EventUtils.sendString(query);
+ await searchCompletedPromise;
+ ok(
+ BrowserTestUtils.isVisible(toggle),
+ "Toggle is visible again after searching for text found in slotted content."
+ );
+
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+});
+
+// Create a toggle with a slotted link element.
+function createToggle(gBrowser) {
+ const SHADOW_DOM_TEXT = "This text lives in the shadow DOM";
+ const LIGHT_DOM_TEXT = "This text lives in the light DOM";
+
+ let doc = gBrowser.contentDocument;
+ let toggle = doc.createElement("moz-toggle");
+ toggle.label = SHADOW_DOM_TEXT;
+
+ let link = doc.createElement("a");
+ link.href = "https://mozilla.org/";
+ link.textContent = LIGHT_DOM_TEXT;
+ toggle.append(link);
+ link.slot = "support-link";
+
+ let protectionsGroup = doc.getElementById("trackingGroup");
+ protectionsGroup.append(toggle);
+
+ return { SHADOW_DOM_TEXT, LIGHT_DOM_TEXT, toggle };
+}
diff --git a/browser/components/preferences/tests/browser_sync_chooseWhatToSync.js b/browser/components/preferences/tests/browser_sync_chooseWhatToSync.js
index b36d9ecea3..3ff65a0d93 100644
--- a/browser/components/preferences/tests/browser_sync_chooseWhatToSync.js
+++ b/browser/components/preferences/tests/browser_sync_chooseWhatToSync.js
@@ -167,7 +167,7 @@ add_task(async function testDialogLaunchFromURI() {
);
await BrowserTestUtils.withNewTab(
"about:preferences?action=choose-what-to-sync#sync",
- async browser => {
+ async () => {
let dialogEvent = await dialogEventPromise;
Assert.equal(
dialogEvent.detail.dialog._frame.contentWindow.location,
diff --git a/browser/components/preferences/tests/browser_sync_pairing.js b/browser/components/preferences/tests/browser_sync_pairing.js
index 6491007a38..39f7b547d8 100644
--- a/browser/components/preferences/tests/browser_sync_pairing.js
+++ b/browser/components/preferences/tests/browser_sync_pairing.js
@@ -29,7 +29,7 @@ add_setup(async function () {
};
const origStart = FxAccountsPairingFlow.start;
- FxAccountsPairingFlow.start = ({ emitter: e }) => {
+ FxAccountsPairingFlow.start = () => {
return `https://foo.bar/${flowCounter++}`;
};
diff --git a/browser/components/preferences/tests/browser_trendingsuggestions.js b/browser/components/preferences/tests/browser_trendingsuggestions.js
index 1cfae387cf..81285b7f6f 100644
--- a/browser/components/preferences/tests/browser_trendingsuggestions.js
+++ b/browser/components/preferences/tests/browser_trendingsuggestions.js
@@ -78,3 +78,20 @@ add_task(async function testNonTrendingEngine() {
);
gBrowser.removeCurrentTab();
});
+
+add_task(async function testEnabledTrendingEngine() {
+ const engine1 = Services.search.getEngineByName("Google");
+ Services.search.setDefault(
+ engine1,
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+ await openPreferencesViaOpenPreferencesAPI("search", { leaveOpen: true });
+ let doc = gBrowser.selectedBrowser.contentDocument;
+ let trendingCheckbox = doc.getElementById(TRENDING_CHECKBOX_ID);
+
+ Assert.ok(
+ !trendingCheckbox.disabled,
+ "Checkbox should not be disabled when an engine that supports trending suggestions is default"
+ );
+ gBrowser.removeCurrentTab();
+});
diff --git a/browser/components/preferences/tests/head.js b/browser/components/preferences/tests/head.js
index 1861c040e5..f9e5b10c09 100644
--- a/browser/components/preferences/tests/head.js
+++ b/browser/components/preferences/tests/head.js
@@ -45,7 +45,7 @@ function openAndLoadSubDialog(
}
function promiseLoadSubDialog(aURL) {
- return new Promise((resolve, reject) => {
+ return new Promise(resolve => {
content.gSubDialog._dialogStack.addEventListener(
"dialogopen",
function dialogopen(aEvent) {
diff --git a/browser/components/preferences/tests/siteData/browser_clearSiteData.js b/browser/components/preferences/tests/siteData/browser_clearSiteData.js
index ad1d27bfe2..7ae1fda453 100644
--- a/browser/components/preferences/tests/siteData/browser_clearSiteData.js
+++ b/browser/components/preferences/tests/siteData/browser_clearSiteData.js
@@ -137,7 +137,7 @@ async function testClearData(clearSiteData, clearCache) {
let clearButton = dialogWin.document
.querySelector("dialog")
.getButton("accept");
- if (!clearSiteData && !clearCache) {
+ if (!clearSiteData && !clearCache && useOldClearHistoryDialog) {
// Simulate user input on one of the checkboxes to trigger the event listener for
// disabling the clearButton.
clearCacheCheckbox.doCommand();
diff --git a/browser/components/preferences/tests/siteData/head.js b/browser/components/preferences/tests/siteData/head.js
index 2b8a9984a6..6385013a52 100644
--- a/browser/components/preferences/tests/siteData/head.js
+++ b/browser/components/preferences/tests/siteData/head.js
@@ -52,7 +52,7 @@ function is_element_hidden(aElement, aMsg) {
}
function promiseLoadSubDialog(aURL) {
- return new Promise((resolve, reject) => {
+ return new Promise(resolve => {
content.gSubDialog._dialogStack.addEventListener(
"dialogopen",
function dialogopen(aEvent) {
diff --git a/browser/components/preferences/tests/siteData/service_worker_test.html b/browser/components/preferences/tests/siteData/service_worker_test.html
index 56f5173481..710b61090f 100644
--- a/browser/components/preferences/tests/siteData/service_worker_test.html
+++ b/browser/components/preferences/tests/siteData/service_worker_test.html
@@ -13,7 +13,7 @@
<h1>Service Worker Test</h1>
<script type="text/javascript">
navigator.serviceWorker.register("service_worker_test.js")
- .then(regis => document.body.setAttribute("data-test-service-worker-registered", "true"));
+ .then(() => document.body.setAttribute("data-test-service-worker-registered", "true"));
</script>
</body>
</html>
diff --git a/browser/components/preferences/translations.inc.xhtml b/browser/components/preferences/translations.inc.xhtml
index 5fed03da9b..9463fde707 100644
--- a/browser/components/preferences/translations.inc.xhtml
+++ b/browser/components/preferences/translations.inc.xhtml
@@ -4,9 +4,12 @@
<script src="chrome://browser/content/preferences/translations.js"/>
-<div xmlns="http://www.w3.org/1999/xhtml"
+<div id="translations-settings-page"
+ xmlns="http://www.w3.org/1999/xhtml"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- data-category="paneTranslations">
+ data-category="paneTranslations"
+ data-hidden-from-search="true"
+ hidden="true">
<button id="translations-settings-back-button" class="back-button"
data-l10n-id="translations-settings-back-button"/>
diff --git a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about.js b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about.js
index af8bac9727..19d82e42ff 100644
--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_about.js
@@ -55,7 +55,7 @@ add_setup(async function () {
Ci.nsISearchService.CHANGE_REASON_UNKNOWN
);
expectedEngineAlias = privateEngine.aliases[0];
- expectedIconURL = privateEngine.getIconURL();
+ expectedIconURL = await privateEngine.getIconURL();
registerCleanupFunction(async () => {
await Services.search.setDefaultPrivate(
@@ -101,11 +101,28 @@ add_task(async function test_search_icon() {
let { win, tab } = await openAboutPrivateBrowsing();
await SpecialPowers.spawn(tab, [expectedIconURL], async function (iconURL) {
- is(
- content.document.body.getAttribute("style"),
- `--newtab-search-icon: url(${iconURL});`,
- "Should have the correct icon URL for the logo"
+ let computedStyle = content.window.getComputedStyle(content.document.body);
+ await ContentTaskUtils.waitForCondition(
+ () => computedStyle.getPropertyValue("--newtab-search-icon") != "null",
+ "Search Icon should get set."
);
+
+ if (iconURL.startsWith("blob:")) {
+ // We don't check the data here as `browser_contentSearch.js` performs
+ // those checks.
+ Assert.ok(
+ computedStyle
+ .getPropertyValue("--newtab-search-icon")
+ .startsWith("url(blob:"),
+ "Should have a blob URL for the logo"
+ );
+ } else {
+ Assert.equal(
+ computedStyle.getPropertyValue("--newtab-search-icon"),
+ `url(${iconURL})`,
+ "Should have the correct icon URL for the logo"
+ );
+ }
});
await BrowserTestUtils.closeWindow(win);
diff --git a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir.js b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir.js
index dd358bee73..4311638ec1 100644
--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir.js
@@ -17,7 +17,7 @@ function test() {
source: Services.io.newURI("http://test1.com/file"),
};
- MockFilePicker.init(window);
+ MockFilePicker.init(window.browsingContext);
MockFilePicker.returnValue = Ci.nsIFilePicker.returnOK;
let prefs = Services.prefs.getBranch("browser.download.");
diff --git a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir_c.js b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir_c.js
index 04e510096a..9973874b25 100644
--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir_c.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_downloadLastDir_c.js
@@ -14,7 +14,7 @@ function test() {
);
let MockFilePicker = SpecialPowers.MockFilePicker;
- MockFilePicker.init(window);
+ MockFilePicker.init(window.browsingContext);
MockFilePicker.returnValue = Ci.nsIFilePicker.returnOK;
let validateFileNameToRestore = validateFileName;
diff --git a/browser/components/profiles/ProfilesChild.sys.mjs b/browser/components/profiles/ProfilesChild.sys.mjs
new file mode 100644
index 0000000000..5ea9ceaa27
--- /dev/null
+++ b/browser/components/profiles/ProfilesChild.sys.mjs
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+export class ProfilesChild extends JSWindowActorParent {}
diff --git a/browser/components/profiles/ProfilesParent.sys.mjs b/browser/components/profiles/ProfilesParent.sys.mjs
new file mode 100644
index 0000000000..4e2e094ff3
--- /dev/null
+++ b/browser/components/profiles/ProfilesParent.sys.mjs
@@ -0,0 +1,5 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+export class ProfilesParent extends JSWindowActorParent {}
diff --git a/browser/components/profiles/content/profiles.ftl b/browser/components/profiles/content/profiles.ftl
new file mode 100644
index 0000000000..0bd05a9208
--- /dev/null
+++ b/browser/components/profiles/content/profiles.ftl
@@ -0,0 +1,16 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+appmenu-manage-profiles =
+ .label = Manage profiles
+appmenu-create-profile =
+ .label = Create a new profile
+
+## Variables
+## $profilename (String) - The name of the profile.
+
+appmenuitem-profiles =
+ .label = Profiles | { $profilename }
+appmenu-close-profile =
+ .label = Close { $profilename } profile
diff --git a/browser/components/profiles/content/profiles.html b/browser/components/profiles/content/profiles.html
new file mode 100644
index 0000000000..3151a24366
--- /dev/null
+++ b/browser/components/profiles/content/profiles.html
@@ -0,0 +1,20 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ - You can obtain one at http://mozilla.org/MPL/2.0/. -->
+<!DOCTYPE html>
+<html
+ xmlns="http://www.w3.org/1999/xhtml"
+ role="document"
+ class="system-font-size"
+>
+ <head>
+ <meta charset="utf-8" />
+ <meta
+ http-equiv="Content-Security-Policy"
+ content="default-src resource: chrome:; object-src 'none'; img-src chrome:;"
+ />
+ </head>
+ <body>
+ <h1>Hello world - New Profiles</h1>
+ </body>
+</html>
diff --git a/browser/components/profiles/jar.mn b/browser/components/profiles/jar.mn
new file mode 100644
index 0000000000..3cec31e462
--- /dev/null
+++ b/browser/components/profiles/jar.mn
@@ -0,0 +1,6 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+browser.jar:
+ content/browser/profiles/profiles.html (content/profiles.html)
diff --git a/browser/components/profiles/moz.build b/browser/components/profiles/moz.build
new file mode 100644
index 0000000000..8e9e82db2c
--- /dev/null
+++ b/browser/components/profiles/moz.build
@@ -0,0 +1,15 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+JAR_MANIFESTS += ["jar.mn"]
+
+FINAL_TARGET_FILES.actors += [
+ "ProfilesChild.sys.mjs",
+ "ProfilesParent.sys.mjs",
+]
+
+with Files("**"):
+ BUG_COMPONENT = ("Firefox", "Profiles")
diff --git a/browser/components/protocolhandler/WebProtocolHandlerRegistrar.sys.mjs b/browser/components/protocolhandler/WebProtocolHandlerRegistrar.sys.mjs
index 927685c83c..345046ae27 100644
--- a/browser/components/protocolhandler/WebProtocolHandlerRegistrar.sys.mjs
+++ b/browser/components/protocolhandler/WebProtocolHandlerRegistrar.sys.mjs
@@ -11,6 +11,7 @@ const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
NimbusFeatures: "resource://nimbus/ExperimentAPI.sys.mjs",
+ PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",
});
ChromeUtils.defineLazyGetter(lazy, "log", () => {
@@ -94,7 +95,7 @@ WebProtocolHandlerRegistrar.prototype = {
}
} catch (e) {
/* it wasn't a web handler */
- lazy.log.debug("No protocolHandler registered, because: " + e.message);
+ lazy.log.debug("no protocolhandler registered, because: " + e.message);
}
}
return false;
@@ -117,6 +118,26 @@ WebProtocolHandlerRegistrar.prototype = {
return xreDirProvider.getInstallHash();
},
+ /* Private method to check if we are already the default protocolhandler
+ * for `protocol`.
+ *
+ * @param {string} protocol name, e.g. mailto (without ://)
+ * @returns {boolean}
+ */
+ _isOsDefault(protocol) {
+ let shellService = Cc[
+ "@mozilla.org/browser/shell-service;1"
+ ].createInstance(Ci.nsIWindowsShellService);
+
+ if (shellService.isDefaultHandlerFor(protocol)) {
+ lazy.log.debug("_isOsDefault returns true.");
+ return true;
+ }
+
+ lazy.log.debug("_isOsDefault returns false.");
+ return false;
+ },
+
/**
* Private method to determine if we can set a new OS default for a certain
* protocol.
@@ -125,31 +146,14 @@ WebProtocolHandlerRegistrar.prototype = {
* @returns {boolean}
*/
_canSetOSDefault(protocol) {
- // can be toggled off individually if necessary...
- if (!lazy.NimbusFeatures.mailto.getVariable("dualPrompt.os")) {
- lazy.log.debug("_canSetOSDefault: false: mailto rollout deactivated.");
- return false;
- }
-
- // this preferences saves that the user has dismissed the bar before...
- if (!Services.prefs.getBoolPref("browser.mailto.prompt.os", true)) {
- lazy.log.debug("_canSetOSDefault: false: prompt dismissed before.");
- return false;
- }
-
- // an installHash is required for the association with a scheme handler
+ // an installHash is required for the association with a scheme handler,
+ // also see _setOSDefault()
if ("" == this._getInstallHash()) {
- lazy.log.debug("_canSetOSDefault: false: no installation hash.");
+ lazy.log.debug("_canSetOSDefault returns false.");
return false;
}
- // check if we are already the protocolhandler...
- let shellService = Cc[
- "@mozilla.org/browser/shell-service;1"
- ].createInstance(Ci.nsIWindowsShellService);
-
- if (shellService.isDefaultHandlerFor(protocol)) {
- lazy.log.debug("_canSetOSDefault: false: is already default handler.");
+ if (this._isOsDefault(protocol)) {
return false;
}
@@ -188,6 +192,43 @@ WebProtocolHandlerRegistrar.prototype = {
},
/**
+ * Private method, which returns true only if the OS default handler for
+ * aProtocol is us and the configured mailto handler for us is aURI.spec.
+ *
+ * @param {string} aProtocol
+ * @param {nsIURI} aURI
+ * @returns {boolean}
+ */
+ _isOsAndLocalDefault(aProtocol, aURI, aTitle) {
+ let eps = Cc[
+ "@mozilla.org/uriloader/external-protocol-service;1"
+ ].getService(Ci.nsIExternalProtocolService);
+
+ let pah = eps.getProtocolHandlerInfo(aProtocol).preferredApplicationHandler;
+
+ // that means that always ask is configure or at least no web handler, so
+ // the answer if this is site/aURI.spec a local default is no/false.
+ if (!pah) {
+ return false;
+ }
+
+ let webHandlerApp = pah.QueryInterface(Ci.nsIWebHandlerApp);
+ if (
+ webHandlerApp.uriTemplate != aURI.spec ||
+ webHandlerApp.name != aTitle
+ ) {
+ return false;
+ }
+
+ // If the protocol handler is already registered
+ if (!this._protocolHandlerRegistered(aProtocol, aURI.spec)) {
+ return false;
+ }
+
+ return true;
+ },
+
+ /**
* Private method to set the default uri to handle a certain protocol. This
* automates in a way what a user can do in settings under applications,
* where different 'actions' can be chosen for different 'content types'.
@@ -256,6 +297,65 @@ WebProtocolHandlerRegistrar.prototype = {
return handler;
},
+ /*
+ * Function to store a value associated to a domain using the content pref
+ * service.
+ *
+ * @param {string} domain: the domain for this setting
+ * @param {string} setting: the name of the setting
+ * @param {string} value: the actual setting to be stored
+ * @param {string} context (optional): private window or not
+ * @returns {string} the stored preference (see: nsIContentPrefService2.idl)
+ */
+ async _saveSiteSpecificSetting(domain, setting, value, context = null) {
+ const gContentPrefs = Cc["@mozilla.org/content-pref/service;1"].getService(
+ Ci.nsIContentPrefService2
+ );
+
+ return new Promise((resolve, reject) => {
+ gContentPrefs.set(domain, setting, value, context, {
+ handleResult(pref) {
+ resolve(pref);
+ },
+ handleCompletion() {},
+ handleError(err) {
+ reject(err);
+ },
+ });
+ });
+ },
+
+ /*
+ * Function to return a stored value from the content pref service. Returns
+ * a promise, so await can be used to synchonize the retrieval.
+ *
+ * @param {string} domain: the domain for this setting
+ * @param {string} setting: the name of the setting
+ * @param {string} context (optional): private window or not
+ * @param {string} def (optional): the default value to return
+ * @returns {string} either stored value or ""
+ */
+ async _getSiteSpecificSetting(domain, setting, context = null, def = null) {
+ const gContentPrefs = Cc["@mozilla.org/content-pref/service;1"].getService(
+ Ci.nsIContentPrefService2
+ );
+
+ return await new Promise((resolve, reject) => {
+ gContentPrefs.getByDomainAndName(domain, setting, context, {
+ _result: def,
+ handleResult(pref) {
+ this._result = pref.value;
+ },
+ handleCompletion(_) {
+ resolve(this._result);
+ },
+ handleError(err) {
+ reject(err);
+ },
+ });
+ });
+ },
+
/**
* See nsIWebProtocolHandlerRegistrar
*/
@@ -314,6 +414,7 @@ WebProtocolHandlerRegistrar.prototype = {
label: this._getString("addProtocolHandlerAddButton"),
accessKey: this._getString("addProtocolHandlerAddButtonAccesskey"),
protocolInfo: { protocol: aProtocol, uri: aURI.spec, name: aTitle },
+ primary: true,
callback(aNotification, aButtonInfo) {
let protocol = aButtonInfo.protocolInfo.protocol;
@@ -363,139 +464,163 @@ WebProtocolHandlerRegistrar.prototype = {
},
/*
- * Special implementation for mailto
+ * Special implementation for mailto: A prompt (notificationbox.js) is only
+ * shown if there is a realistic chance that we can really set the OS default,
+ * e.g. if we have been properly installed and the current page is not already
+ * the default and we have not asked users too often the same question.
*
* @param {string} browser
* @param {string} aProtocol
- * @param {string} aURI
+ * @param {nsIURI} aURI
* @param {string} aTitle
*/
async _askUserToSetMailtoHandler(browser, aProtocol, aURI, aTitle) {
- // shortcut for Localization
- let l10n = new Localization([
- "branding/brand.ftl",
- "browser/webProtocolHandler.ftl",
- ]);
- let [
- msg_os_box,
- msg_os_yes_confirm,
- msg_os_yes,
- msg_os_no,
- msg_box,
- msg_yes_confirm,
- msg_yes,
- msg_no,
- ] = await l10n.formatValues([
- { id: "protocolhandler-mailto-os-handler-notificationbox" },
- { id: "protocolhandler-mailto-os-handler-yes-confirm" },
- { id: "protocolhandler-mailto-os-handler-yes-button" },
- { id: "protocolhandler-mailto-os-handler-no-button" },
- {
- id: "protocolhandler-mailto-handler-notificationbox-always",
- args: { url: aURI.prePath },
- },
- {
- id: "protocolhandler-mailto-handler-yes-confirm",
- args: { url: aURI.prePath },
- },
- { id: "protocolhandler-mailto-handler-yes-button" },
- { id: "protocolhandler-mailto-handler-no-button" },
- ]);
+ let currentHandler = this._addLocal(aProtocol, aTitle, aURI.spec);
+ let notificationId = "OS Protocol Registration: " + aProtocol;
+
+ // guard: if we have shown the bar before and it was dismissed: do not show
+ // it again. The pathHash is used to secure the URL by limiting this user
+ // input to a well-defined character set with a fixed length before it gets
+ // written to the underlaying sqlite database.
+ const gMailtoSiteSpecificDismiss = "protocolhandler.mailto.pathHash";
+ let pathHash = lazy.PlacesUtils.md5(aURI.spec, { format: "hex" });
+ let lastHash = await this._getSiteSpecificSetting(
+ aURI.host,
+ gMailtoSiteSpecificDismiss
+ );
+ if (pathHash == lastHash) {
+ lazy.log.debug(
+ "prompt not shown, because a site with the pathHash " +
+ pathHash +
+ " was dismissed before."
+ );
+ return;
+ }
- // First prompt:
- // Only shown if there is a realistic chance that we can really set the OS
- // default and can also be disabled with a preference or experiement
- if (this._canSetOSDefault(aProtocol)) {
- // Only show if not already set and if we have been properly installed
- let notificationId = "OS Protocol Registration: " + aProtocol;
- let osDefaultNotificationBox = browser
- .getTabBrowser()
- .getNotificationBox(browser);
- if (!osDefaultNotificationBox.getNotificationWithValue(notificationId)) {
- osDefaultNotificationBox.appendNotification(
- notificationId,
- {
- label: msg_os_box,
- priority: osDefaultNotificationBox.PRIORITY_INFO_LOW,
- },
- [
- {
- label: msg_os_yes,
- callback: () => {
- this._setOSDefault(aProtocol);
- Glean.protocolhandlerMailto.promptClicked.set_os_default.add();
- osDefaultNotificationBox.appendNotification(
- notificationId,
- {
- label: msg_os_yes_confirm,
- priority: osDefaultNotificationBox.PRIORITY_INFO_LOW,
- },
- []
- );
- return false;
- },
- },
- {
- label: msg_os_no,
- callback: () => {
- Services.prefs.setBoolPref("browser.mailto.prompt.os", false);
- Glean.protocolhandlerMailto.promptClicked.dismiss_os_default.add();
- return false;
- },
- },
- ]
- );
+ // guard: do not show the same bar twice on a single day after dismissed
+ // with 'X'
+ const gMailtoSiteSpecificXClick = "protocolhandler.mailto.xclickdate";
+ let lastShown = await this._getSiteSpecificSetting(
+ aURI.host,
+ gMailtoSiteSpecificXClick,
+ null,
+ 0
+ );
+ let currentTS = new Date().getTime();
+ let timeRemaining = 24 * 60 * 60 * 1000 - (currentTS - lastShown);
+ if (0 < timeRemaining) {
+ lazy.log.debug(
+ "prompt will only be shown again in " + timeRemaining + " ms."
+ );
+ return;
+ }
- Glean.protocolhandlerMailto.handlerPromptShown.os_default.add();
- }
+ // guard: bail out if already configured as default...
+ if (this._isOsAndLocalDefault(aProtocol, aURI, aTitle)) {
+ lazy.log.debug(
+ "prompt not shown, because " +
+ aTitle +
+ " is already configured" +
+ " to handle " +
+ aProtocol +
+ "-links under " +
+ aURI.spec +
+ " and we are already configured to be the OS default handler."
+ );
+ return;
}
- // Second prompt:
- // Only shown if the protocol handler is not already registered
- if (!this._protocolHandlerRegistered(aProtocol, aURI.spec)) {
- let notificationId = "Protocol Registration: " + aProtocol;
- let FxDefaultNotificationBox = browser
- .getTabBrowser()
- .getNotificationBox(browser);
- if (!FxDefaultNotificationBox.getNotificationWithValue(notificationId)) {
- FxDefaultNotificationBox.appendNotification(
- notificationId,
- {
- label: msg_box,
- priority: FxDefaultNotificationBox.PRIORITY_INFO_LOW,
+ let osDefaultNotificationBox = browser
+ .getTabBrowser()
+ .getNotificationBox(browser);
+
+ if (!osDefaultNotificationBox.getNotificationWithValue(notificationId)) {
+ let win = browser.ownerGlobal;
+ win.MozXULElement.insertFTLIfNeeded("branding/brand.ftl");
+ win.MozXULElement.insertFTLIfNeeded("browser/webProtocolHandler.ftl");
+
+ let notification = await osDefaultNotificationBox.appendNotification(
+ notificationId,
+ {
+ label: {
+ "l10n-id": "protocolhandler-mailto-handler-set-message",
+ "l10n-args": { url: aURI.host },
},
- [
- {
- label: msg_yes,
- callback: () => {
- this._setLocalDefault(
- aProtocol,
- this._addLocal(aProtocol, aTitle, aURI.spec)
- );
- Glean.protocolhandlerMailto.promptClicked.set_local_default.add();
- FxDefaultNotificationBox.appendNotification(
- notificationId,
- {
- label: msg_yes_confirm,
- priority: FxDefaultNotificationBox.PRIORITY_INFO_LOW,
- },
- []
+ priority: osDefaultNotificationBox.PRIORITY_INFO_LOW,
+ eventCallback: eventType => {
+ // after a click on 'X' save todays date, so that we can show the
+ // bar again tomorrow...
+ if (eventType === "dismissed") {
+ this._saveSiteSpecificSetting(
+ aURI.host,
+ gMailtoSiteSpecificXClick,
+ new Date().getTime()
+ );
+ }
+ },
+ },
+ [
+ {
+ "l10n-id": "protocolhandler-mailto-os-handler-yes-button",
+ primary: true,
+ callback: newitem => {
+ this._setLocalDefault(aProtocol, currentHandler);
+ Glean.protocolhandlerMailto.promptClicked.set_local_default.add();
+
+ if (this._canSetOSDefault(aProtocol)) {
+ if (this._setOSDefault(aProtocol)) {
+ Glean.protocolhandlerMailto.promptClicked.set_os_default.add();
+ Services.telemetry.keyedScalarSet(
+ "os.environment.is_default_handler",
+ "mailto",
+ true
+ );
+ newitem.messageL10nId =
+ "protocolhandler-mailto-handler-confirm-message";
+ newitem.removeChild(newitem.buttonContainer);
+ newitem.setAttribute("type", "success"); // from moz-message-bar.css
+ newitem.eventCallback = null; // disable show only once per day for success
+ return true; // `true` does not hide the bar
+ }
+
+ // if anything goes wrong with setting the OS default, we want
+ // to be informed so that we can fix it.
+ Glean.protocolhandlerMailto.promptClicked.set_os_default_error.add();
+ Services.telemetry.keyedScalarSet(
+ "os.environment.is_default_handler",
+ "mailto",
+ false
);
return false;
- },
+ }
+
+ // if the installation does not have an install hash, we cannot
+ // set the OS default, but mailto links from within the browser
+ // should still work.
+ Glean.protocolhandlerMailto.promptClicked.set_os_default_impossible.add();
+ return false;
},
- {
- label: msg_no,
- callback: () => {
- Glean.protocolhandlerMailto.promptClicked.dismiss_local_default.add();
- return false;
- },
+ },
+ {
+ "l10n-id": "protocolhandler-mailto-os-handler-no-button",
+ callback: () => {
+ this._saveSiteSpecificSetting(
+ aURI.host,
+ gMailtoSiteSpecificDismiss,
+ pathHash
+ );
+ return false;
},
- ]
- );
+ },
+ ]
+ );
- Glean.protocolhandlerMailto.handlerPromptShown.fx_default.add();
- }
+ // remove the icon from the infobar, which is automatically assigned
+ // after its priority, because the priority is also an indicator which
+ // type of bar it is, e.g. a warning or error:
+ notification.setAttribute("type", "system");
+
+ Glean.protocolhandlerMailto.handlerPromptShown.os_default.add();
}
},
diff --git a/browser/components/protocolhandler/metrics.yaml b/browser/components/protocolhandler/metrics.yaml
index 43a2898175..252725aeb3 100644
--- a/browser/components/protocolhandler/metrics.yaml
+++ b/browser/components/protocolhandler/metrics.yaml
@@ -28,6 +28,8 @@ protocolhandler.mailto:
expires: never
labels:
- set_os_default
+ - set_os_default_error
+ - set_os_default_impossible
- dismiss_os_default
- set_local_default
- dismiss_local_default
diff --git a/browser/components/reportbrokensite/ReportBrokenSite.sys.mjs b/browser/components/reportbrokensite/ReportBrokenSite.sys.mjs
index 706c013383..ef1f4e1270 100644
--- a/browser/components/reportbrokensite/ReportBrokenSite.sys.mjs
+++ b/browser/components/reportbrokensite/ReportBrokenSite.sys.mjs
@@ -469,15 +469,6 @@ export var ReportBrokenSite = new (class ReportBrokenSite {
reportSiteIssue.hidden = this.enabled || !this.reportSiteIssueEnabledPref;
reportSiteIssue.disabled = !canReportUrl;
}
-
- // "Site not working?" on the protections panel should be hidden when
- // Report Broken Site is visible (bug 1868527).
- const siteNotWorking = document.getElementById(
- "protections-popup-tp-switch-section-footer"
- );
- if (siteNotWorking) {
- siteNotWorking.hidden = this.enabled;
- }
}
#checkPrefs(whichChanged) {
@@ -755,7 +746,7 @@ export var ReportBrokenSite = new (class ReportBrokenSite {
.getElementById("protections-popup-multiView")
.showSubView(ReportBrokenSite.MAIN_PANELVIEW_ID);
break;
- case "help_reportBrokenSite":
+ case "help_reportBrokenSite": {
// hide the hamburger menu first, as we overlap with it.
const appMenuPopup = document.getElementById("appMenu-popup");
appMenuPopup?.hidePopup();
@@ -765,6 +756,7 @@ export var ReportBrokenSite = new (class ReportBrokenSite {
ownerGlobal.PanelUI.menuButton
);
break;
+ }
}
}
})();
diff --git a/browser/components/reportbrokensite/test/browser/browser.toml b/browser/components/reportbrokensite/test/browser/browser.toml
index 09e4b72079..b896342ca8 100644
--- a/browser/components/reportbrokensite/test/browser/browser.toml
+++ b/browser/components/reportbrokensite/test/browser/browser.toml
@@ -32,8 +32,6 @@ support-files = [
"../../../../../toolkit/components/gfx/content/videotest.mp4",
]
-["browser_site_not_working_fallback.js"]
-
["browser_tab_key_order.js"]
["browser_tab_switch_handling.js"]
diff --git a/browser/components/reportbrokensite/test/browser/browser_site_not_working_fallback.js b/browser/components/reportbrokensite/test/browser/browser_site_not_working_fallback.js
deleted file mode 100644
index e424a14be9..0000000000
--- a/browser/components/reportbrokensite/test/browser/browser_site_not_working_fallback.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/* Tests that when Report Broken Site is active,
- * "Site not working?" is hidden on the protections panel.
- */
-
-"use strict";
-
-add_common_setup();
-
-const TP_PREF = "privacy.trackingprotection.enabled";
-
-const TRACKING_PAGE =
- "https://tracking.example.org/browser/browser/base/content/test/protectionsUI/trackingPage.html";
-
-const SITE_NOT_WORKING = "protections-popup-tp-switch-section-footer";
-
-add_task(async function testSiteNotWorking() {
- await SpecialPowers.pushPrefEnv({ set: [[TP_PREF, true]] });
- await BrowserTestUtils.withNewTab(TRACKING_PAGE, async function () {
- const menu = ProtectionsPanel();
-
- ensureReportBrokenSitePreffedOn();
- await menu.open();
- const siteNotWorking = document.getElementById(SITE_NOT_WORKING);
- isMenuItemHidden(siteNotWorking, "Site not working is hidden");
- await menu.close();
-
- ensureReportBrokenSitePreffedOff();
- await menu.open();
- isMenuItemEnabled(siteNotWorking, "Site not working is shown");
- await menu.close();
- });
-});
diff --git a/browser/components/reportbrokensite/test/browser/browser_tab_key_order.js b/browser/components/reportbrokensite/test/browser/browser_tab_key_order.js
index d398c7c4d3..3a50c9aa51 100644
--- a/browser/components/reportbrokensite/test/browser/browser_tab_key_order.js
+++ b/browser/components/reportbrokensite/test/browser/browser_tab_key_order.js
@@ -7,6 +7,8 @@
add_common_setup();
+requestLongerTimeout(2);
+
async function ensureTabOrder(order, win = window) {
const config = { window: win };
for (let matches of order) {
diff --git a/browser/components/reportbrokensite/test/browser/head.js b/browser/components/reportbrokensite/test/browser/head.js
index e3f4451b5b..7cc1d51a21 100644
--- a/browser/components/reportbrokensite/test/browser/head.js
+++ b/browser/components/reportbrokensite/test/browser/head.js
@@ -28,13 +28,20 @@ const PREFS = {
NEW_REPORT_ENDPOINT: "ui.new-webcompat-reporter.new-report-endpoint",
REPORT_SITE_ISSUE_ENABLED: "extensions.webcompat-reporter.enabled",
PREFERS_CONTRAST_ENABLED: "layout.css.prefers-contrast.enabled",
+ TOUCH_EVENTS: "dom.w3c_touch_events.enabled",
USE_ACCESSIBILITY_THEME: "ui.useAccessibilityTheme",
};
function add_common_setup() {
add_setup(async function () {
await SpecialPowers.pushPrefEnv({
- set: [[PREFS.NEW_REPORT_ENDPOINT, NEW_REPORT_ENDPOINT_TEST_URL]],
+ set: [
+ [PREFS.NEW_REPORT_ENDPOINT, NEW_REPORT_ENDPOINT_TEST_URL],
+
+ // set touch events to auto-detect, as the pref gets set to 1 somewhere
+ // while tests are running, making hasTouchScreen checks unreliable.
+ [PREFS.TOUCH_EVENTS, 2],
+ ],
});
registerCleanupFunction(function () {
for (const prefName of Object.values(PREFS)) {
@@ -551,11 +558,17 @@ class MenuHelper {
return true;
}
- get reportBrokenSite() {}
+ get reportBrokenSite() {
+ throw new Error("Should be defined in derived class");
+ }
- get reportSiteIssue() {}
+ get reportSiteIssue() {
+ throw new Error("Should be defined in derived class");
+ }
- get popup() {}
+ get popup() {
+ throw new Error("Should be defined in derived class");
+ }
get opened() {
return this.popup?.hasAttribute("panelopen");
diff --git a/browser/components/reportbrokensite/test/browser/send.js b/browser/components/reportbrokensite/test/browser/send.js
index a8599741ac..761b07a4bd 100644
--- a/browser/components/reportbrokensite/test/browser/send.js
+++ b/browser/components/reportbrokensite/test/browser/send.js
@@ -139,11 +139,13 @@ async function getExpectedWebCompatInfo(tab, snapshot, fullAppData = false) {
},
hasTouchScreen,
monitorsJson(actualStr) {
- // We don't care about monitor data on Android right now.
- if (AppConstants.platform == "android") {
- return actualStr == "undefined";
+ const expected = gfxInfo.getMonitors();
+ // If undefined is saved to the Glean value here, we'll get the string "undefined" (invalid JSON).
+ // We should stop using JSON like this in bug 1875185.
+ if (!actualStr || actualStr == "undefined") {
+ return !expected.length;
}
- return actualStr == JSON.stringify(gfxInfo.getMonitors());
+ return areObjectsEqual(JSON.parse(actualStr), expected);
},
},
prefs: {
@@ -274,6 +276,20 @@ async function testSend(tab, menu, expectedOverrides = {}) {
Services.fog.testResetFOG();
GleanPings.brokenSiteReport.testBeforeNextSubmit(() => {
const ping = extractBrokenSiteReportFromGleanPing(Glean);
+
+ // sanity checks
+ const { browserInfo, tabInfo } = ping;
+ ok(ping.url?.length, "Got a URL");
+ ok(
+ ["basic", "strict"].includes(tabInfo.antitracking.blockList),
+ "Got a blockList"
+ );
+ ok(tabInfo.useragentString?.length, "Got a final UA string");
+ ok(
+ browserInfo.app.defaultUseragentString?.length,
+ "Got a default UA string"
+ );
+
ok(areObjectsEqual(ping, expected), "ping matches expectations");
resolve();
});
diff --git a/browser/components/reportbrokensite/test/browser/send_more_info.js b/browser/components/reportbrokensite/test/browser/send_more_info.js
index 6803403f63..83b6b00405 100644
--- a/browser/components/reportbrokensite/test/browser/send_more_info.js
+++ b/browser/components/reportbrokensite/test/browser/send_more_info.js
@@ -79,6 +79,7 @@ async function reformatExpectedWebCompatInfo(tab, overrides) {
additionalData: {
applicationName,
blockList,
+ buildId: snapshot.application.buildID,
devicePixelRatio: parseInt(devicePixelRatio),
finalUserAgent: useragentString,
fissionEnabled,
@@ -97,10 +98,6 @@ async function reformatExpectedWebCompatInfo(tab, overrides) {
},
hasTouchScreen,
monitors(actual) {
- // We don't care about monitor data on Android right now.
- if (AppConstants.platform === "android") {
- return actual == undefined;
- }
return areObjectsEqual(actual, gfxInfo.getMonitors());
},
},
@@ -109,16 +106,18 @@ async function reformatExpectedWebCompatInfo(tab, overrides) {
hasTrackingContentBlocked,
isPB: isPrivateBrowsing,
languages,
+ locales: snapshot.intl.localeService.available,
+ memoryMB: browserInfo.system.memory,
osArchitecture,
osName,
osVersion,
prefs: finalPrefs,
- updateChannel,
- userAgent: defaultUseragentString,
version,
},
blockList,
+ channel: updateChannel,
consoleLog,
+ defaultUserAgent: defaultUseragentString,
frameworks,
hasTouchScreen,
"gfx.webrender.software": prefs.softwareWebrender,
@@ -134,6 +133,19 @@ async function reformatExpectedWebCompatInfo(tab, overrides) {
utm_source: "desktop-reporter",
};
+ const { gfxData } = reformatted.details.additionalData;
+ for (const optional of [
+ "direct2DEnabled",
+ "directWriteEnabled",
+ "directWriteVersion",
+ "clearTypeParameters",
+ "targetFrameRate",
+ ]) {
+ if (optional in snapshot.graphics) {
+ gfxData[optional] = snapshot.graphics[optional];
+ }
+ }
+
// We only care about this pref on Linux right now on webcompat.com.
if (AppConstants.platform != "linux") {
delete finalPrefs["layers.acceleration.force-enabled"];
@@ -206,7 +218,33 @@ async function testSendMoreInfo(tab, menu, expectedOverrides = {}) {
expected.url = url;
expected.description = description;
- ok(areObjectsEqual(message, expected), "ping matches expectations");
+ // sanity checks
+ const { details } = message;
+ const { additionalData } = details;
+ ok(message.url?.length, "Got a URL");
+ ok(["basic", "strict"].includes(details.blockList), "Got a blockList");
+ ok(additionalData.applicationName?.length, "Got an app name");
+ ok(additionalData.osArchitecture?.length, "Got an OS arch");
+ ok(additionalData.osName?.length, "Got an OS name");
+ ok(additionalData.osVersion?.length, "Got an OS version");
+ ok(additionalData.version?.length, "Got an app version");
+ ok(details.channel?.length, "Got an app channel");
+ ok(details.defaultUserAgent?.length, "Got a default UA string");
+ ok(additionalData.finalUserAgent?.length, "Got a final UA string");
+
+ // If we're sending any tab-specific data (which includes console logs),
+ // check that there is also a valid screenshot.
+ if ("consoleLog" in details) {
+ const isScreenshotValid = await new Promise(done => {
+ var image = new Image();
+ image.onload = () => done(image.width > 0);
+ image.onerror = () => done(false);
+ image.src = receivedData.screenshot;
+ });
+ ok(isScreenshotValid, "Got a valid screenshot");
+ }
+
+ ok(areObjectsEqual(message, expected), "sent info matches expectations");
// re-opening the panel, the url and description should be reset
rbs = await menu.openReportBrokenSite();
diff --git a/browser/components/resistfingerprinting/test/mochitest/test_keyboard_event.html b/browser/components/resistfingerprinting/test/mochitest/test_keyboard_event.html
index 72f2d29b90..a575d690dc 100644
--- a/browser/components/resistfingerprinting/test/mochitest/test_keyboard_event.html
+++ b/browser/components/resistfingerprinting/test/mochitest/test_keyboard_event.html
@@ -24,16 +24,13 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1222285
// This test makes sure that system event group will still get real keyboard event.
function doTestForSystemEventGroup() {
- SpecialPowers.addSystemEventListener(document, "keydown",
+ SpecialPowers.wrap(document).addEventListener("keydown",
function eventHandler(aEvent) {
- SpecialPowers.removeSystemEventListener(document,
- "keydown", eventHandler, true);
-
is(aEvent.code, "Minus", "The system group event should get real code.");
is(aEvent.keyCode, 63, "The system group event should get real keyCode.");
doTestModifiersForSystemEventGroup();
- }, true);
+ }, { once: true, capture: true, mozSystemGroup: true });
// Send key event to the system group.
synthesizeKey("\u00DF", {code: "Minus", keyCode: 63});
@@ -41,14 +38,12 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=1222285
// Test that will system group event still get suppressed modifier keys
function doTestModifiersForSystemEventGroup() {
- SpecialPowers.addSystemEventListener(document, "keydown",
+ SpecialPowers.wrap(document).addEventListener("keydown",
function eventHandler(aEvent) {
- SpecialPowers.removeSystemEventListener(document,
- "keydown", eventHandler, true);
is(aEvent.key, "Alt", "The system group event get the suppressed keyboard event.");
SimpleTest.finish();
- }, true);
+ }, { once: true, capture: true, mozSystemGroup: true });
// Send key event to the system group.
synthesizeKey("KEY_Alt", {altKey: true});
diff --git a/browser/components/screenshots/ScreenshotsOverlayChild.sys.mjs b/browser/components/screenshots/ScreenshotsOverlayChild.sys.mjs
index 5d96a46c88..bcb3199902 100644
--- a/browser/components/screenshots/ScreenshotsOverlayChild.sys.mjs
+++ b/browser/components/screenshots/ScreenshotsOverlayChild.sys.mjs
@@ -817,7 +817,8 @@ export class ScreenshotsOverlay {
* @param {object} detail Extra details to send to the child actor
*/
#dispatchEvent(eventType, detail) {
- this.window.dispatchEvent(
+ this.window.windowUtils.dispatchEventToChromeOnly(
+ this.window,
new CustomEvent(eventType, {
bubbles: true,
detail,
diff --git a/browser/components/screenshots/ScreenshotsUtils.sys.mjs b/browser/components/screenshots/ScreenshotsUtils.sys.mjs
index 68e4f896bf..fc84facee3 100644
--- a/browser/components/screenshots/ScreenshotsUtils.sys.mjs
+++ b/browser/components/screenshots/ScreenshotsUtils.sys.mjs
@@ -65,11 +65,13 @@ export class ScreenshotsComponentParent extends JSWindowActorParent {
// otherwise looks like the UIPhases.CLOSED state.
return;
}
+
switch (message.name) {
- case "Screenshots:CancelScreenshot":
+ case "Screenshots:CancelScreenshot": {
let { reason } = message.data;
ScreenshotsUtils.cancel(browser, reason);
break;
+ }
case "Screenshots:CopyScreenshot":
ScreenshotsUtils.closePanel(browser);
({ region } = message.data);
@@ -112,11 +114,12 @@ export class ScreenshotsComponentParent extends JSWindowActorParent {
export class ScreenshotsHelperParent extends JSWindowActorParent {
receiveMessage(message) {
switch (message.name) {
- case "ScreenshotsHelper:GetElementRectFromPoint":
+ case "ScreenshotsHelper:GetElementRectFromPoint": {
let cxt = BrowsingContext.get(message.data.bcId);
return cxt.currentWindowGlobal
.getActor("ScreenshotsHelper")
.sendQuery("ScreenshotsHelper:GetElementRectFromPoint", message.data);
+ }
}
return null;
}
@@ -186,10 +189,87 @@ export var ScreenshotsUtils = {
},
handleEvent(event) {
- // Escape should cancel and exit
- if (event.type === "keydown" && event.key === "Escape") {
- let browser = event.view.gBrowser.selectedBrowser;
- this.cancel(browser, "escape");
+ switch (event.type) {
+ case "keydown":
+ if (event.key === "Escape") {
+ // Escape should cancel and exit
+ let browser = event.view.gBrowser.selectedBrowser;
+ this.cancel(browser, "escape");
+ }
+ break;
+ case "TabSelect":
+ this.handleTabSelect(event);
+ break;
+ case "SwapDocShells":
+ this.handleDocShellSwapEvent(event);
+ break;
+ case "EndSwapDocShells":
+ this.handleEndDocShellSwapEvent(event);
+ break;
+ }
+ },
+
+ /**
+ * When we swap docshells for a given screenshots browser, we need to update
+ * the browserToScreenshotsState WeakMap to the correct browser. If the old
+ * browser is in a state other than OVERLAYSELECTION, we will close
+ * screenshots.
+ *
+ * @param {Event} event The SwapDocShells event
+ */
+ handleDocShellSwapEvent(event) {
+ let oldBrowser = event.target;
+ let newBrowser = event.detail;
+
+ const currentUIPhase = this.getUIPhase(oldBrowser);
+ if (currentUIPhase === UIPhases.OVERLAYSELECTION) {
+ newBrowser.addEventListener("SwapDocShells", this);
+ newBrowser.addEventListener("EndSwapDocShells", this);
+ oldBrowser.removeEventListener("SwapDocShells", this);
+
+ let perBrowserState =
+ this.browserToScreenshotsState.get(oldBrowser) || {};
+ this.browserToScreenshotsState.set(newBrowser, perBrowserState);
+ this.browserToScreenshotsState.delete(oldBrowser);
+
+ this.getActor(oldBrowser).sendAsyncMessage(
+ "Screenshots:RemoveEventListeners"
+ );
+ } else {
+ this.cancel(oldBrowser, "navigation");
+ }
+ },
+
+ /**
+ * When we swap docshells for a given screenshots browser, we need to add the
+ * event listeners to the new browser because we removed event listeners in
+ * handleDocShellSwapEvent.
+ *
+ * We attach the overlay event listeners to this.docShell.chromeEventHandler
+ * in ScreenshotsComponentChild.sys.mjs which is the browser when the page is
+ * loaded via the parent process (about:config, about:robots, etc) and when
+ * this is the case, we lose the event listeners on the original browser.
+ * To fix this, we remove the event listeners on the old browser and add the
+ * event listeners to the new browser when a SwapDocShells occurs.
+ *
+ * @param {Event} event The EndSwapDocShells event
+ */
+ handleEndDocShellSwapEvent(event) {
+ let browser = event.target;
+ this.getActor(browser).sendAsyncMessage("Screenshots:AddEventListeners");
+ browser.removeEventListener("EndSwapDocShells", this);
+ },
+
+ /**
+ * When we receive a TabSelect event, we will close screenshots in the
+ * previous tab if the previous tab was in the initial state.
+ *
+ * @param {Event} event The TabSelect event
+ */
+ handleTabSelect(event) {
+ let previousTab = event.detail.previousTab;
+ if (this.getUIPhase(previousTab.linkedBrowser) === UIPhases.INITIAL) {
+ this.cancel(previousTab.linkedBrowser, "navigation");
}
},
@@ -249,10 +329,14 @@ export var ScreenshotsUtils = {
start(browser, reason = "") {
const uiPhase = this.getUIPhase(browser);
switch (uiPhase) {
- case UIPhases.CLOSED:
+ case UIPhases.CLOSED: {
this.captureFocusedElement(browser, "previousFocusRef");
this.showPanelAndOverlay(browser, reason);
+ browser.addEventListener("SwapDocShells", this);
+ let gBrowser = browser.getTabBrowser();
+ gBrowser.tabContainer.addEventListener("TabSelect", this);
break;
+ }
case UIPhases.INITIAL:
// nothing to do, panel & overlay are already open
break;
@@ -277,6 +361,10 @@ export var ScreenshotsUtils = {
this.resetMethodsUsed();
this.attemptToRestoreFocus(browser);
+ browser.removeEventListener("SwapDocShells", this);
+ const gBrowser = browser.getTabBrowser();
+ gBrowser.tabContainer.removeEventListener("TabSelect", this);
+
this.browserToScreenshotsState.delete(browser);
if (Cu.isInAutomation) {
Services.obs.notifyObservers(null, "screenshots-exit");
@@ -465,21 +553,15 @@ export var ScreenshotsUtils = {
},
/**
- * Returns the buttons panel for the given browser
+ * Returns the buttons panel for the given browser if the panel exists.
+ * Otherwise creates the buttons panel and returns the buttons panel.
* @param browser The current browser
* @returns The buttons panel
*/
panelForBrowser(browser) {
- return browser.ownerDocument.getElementById("screenshotsPagePanel");
- },
-
- /**
- * Create the buttons container from its template, for this browser
- * @param browser The current browser
- * @returns The buttons panel
- */
- createPanelForBrowser(browser) {
- let buttonsPanel = this.panelForBrowser(browser);
+ let buttonsPanel = browser.ownerDocument.getElementById(
+ "screenshotsPagePanel"
+ );
if (!buttonsPanel) {
let doc = browser.ownerDocument;
let template = doc.getElementById("screenshotsPagePanelTemplate");
@@ -491,7 +573,10 @@ export var ScreenshotsUtils = {
anchor.appendChild(buttonsPanel);
}
- return this.panelForBrowser(browser);
+ return (
+ buttonsPanel ??
+ browser.ownerDocument.getElementById("screenshotsPagePanel")
+ );
},
/**
@@ -533,7 +618,6 @@ export var ScreenshotsUtils = {
async showPanelAndOverlay(browser, data) {
let actor = this.getActor(browser);
actor.sendAsyncMessage("Screenshots:ShowOverlay");
- this.createPanelForBrowser(browser);
this.recordTelemetryEvent("started", data, {});
this.openPanel(browser);
},
@@ -544,7 +628,12 @@ export var ScreenshotsUtils = {
* @param browser The current browser.
*/
closeOverlay(browser, options = {}) {
- let actor = this.getActor(browser);
+ // If the actor has been unregistered (e.g. if the component enabled pref is flipped false)
+ // its possible getActor will throw an exception. That's ok.
+ let actor;
+ try {
+ actor = this.getActor(browser);
+ } catch (ex) {}
actor?.sendAsyncMessage("Screenshots:HideOverlay", options);
if (this.browserToScreenshotsState.has(browser)) {
@@ -806,6 +895,8 @@ export var ScreenshotsUtils = {
canvas.width = region.width * devicePixelRatio;
canvas.height = region.height * devicePixelRatio;
+ const snapshotSize = Math.floor(MAX_SNAPSHOT_DIMENSION * devicePixelRatio);
+
for (
let startLeft = region.left;
startLeft < region.right;
@@ -832,12 +923,20 @@ export var ScreenshotsUtils = {
"rgb(255,255,255)"
);
+ // The `left` and `top` need to be a multiple of the `snapshotSize` to
+ // prevent gaps/lines from appearing in the screenshot.
+ // If devicePixelRatio is 0.3, snapshotSize would be 307 after flooring
+ // from 307.2. Therefore every fifth snapshot would have a start of
+ // 307.2 * 5 or 1536 which is not a multiple of 307 and would cause a
+ // gap/line in the snapshot.
+ let left = Math.floor((startLeft - region.left) * devicePixelRatio);
+ let top = Math.floor((startTop - region.top) * devicePixelRatio);
context.drawImage(
snapshot,
- (startLeft - region.left) * devicePixelRatio,
- (startTop - region.top) * devicePixelRatio,
- width * devicePixelRatio,
- height * devicePixelRatio
+ left - (left % snapshotSize),
+ top - (top % snapshotSize),
+ Math.floor(width * devicePixelRatio),
+ Math.floor(height * devicePixelRatio)
);
snapshot.close();
@@ -891,8 +990,23 @@ export var ScreenshotsUtils = {
"@mozilla.org/widget/transferable;1"
].createInstance(Ci.nsITransferable);
transferable.init(null);
- transferable.addDataFlavor("image/png");
- transferable.setTransferData("image/png", imgDecoded);
+ // Internal consumers expect the image data to be stored as a
+ // nsIInputStream. On Linux and Windows, pasted data is directly
+ // retrieved from the system's native clipboard, and made available
+ // as a nsIInputStream.
+ //
+ // On macOS, nsClipboard::GetNativeClipboardData (nsClipboard.mm) uses
+ // a cached copy of nsITransferable if available, e.g. when the copy
+ // was initiated by the same browser instance. To make sure that a
+ // nsIInputStream is returned instead of the cached imgIContainer,
+ // the image is exported as as `kNativeImageMime`. Data associated
+ // with this type is converted to a platform-specific image format
+ // when written to the clipboard. The type is not used when images
+ // are read from the clipboard (on all platforms, not just macOS).
+ // This forces nsClipboard::GetNativeClipboardData to fall back to
+ // the native clipboard, and return the image as a nsITransferable.
+ transferable.addDataFlavor("application/x-moz-nativeimage");
+ transferable.setTransferData("application/x-moz-nativeimage", imgDecoded);
Services.clipboard.setData(
transferable,
diff --git a/browser/components/screenshots/fileHelpers.mjs b/browser/components/screenshots/fileHelpers.mjs
index 42cb868bea..4fd2e77561 100644
--- a/browser/components/screenshots/fileHelpers.mjs
+++ b/browser/components/screenshots/fileHelpers.mjs
@@ -238,7 +238,7 @@ function promiseTargetFile(aFpP, win) {
let fp = makeFilePicker();
let titleKey = aFpP.fpTitleKey;
fp.init(
- win,
+ win.browsingContext,
ContentAreaUtils.stringBundle.GetStringFromName(titleKey),
Ci.nsIFilePicker.modeSave
);
diff --git a/browser/components/screenshots/tests/browser/browser.toml b/browser/components/screenshots/tests/browser/browser.toml
index b363c14732..b27d28c677 100644
--- a/browser/components/screenshots/tests/browser/browser.toml
+++ b/browser/components/screenshots/tests/browser/browser.toml
@@ -16,14 +16,22 @@ prefs = [
]
["browser_iframe_test.js"]
+skip-if = ["os == 'linux'"]
["browser_overlay_keyboard_test.js"]
["browser_screenshots_drag_scroll_test.js"]
+skip-if = [
+ "apple_silicon && !debug", # Bug 1804441
+ "apple_catalina", # Bug 1804441
+]
["browser_screenshots_drag_test.js"]
["browser_screenshots_focus_test.js"]
+skip-if = [
+ "os == 'linux' && os_version == '18.04'", # Bug 1803618
+]
["browser_screenshots_overlay_panel_sync.js"]
@@ -52,4 +60,6 @@ skip-if = ["!crashreporter"]
["browser_test_element_picker.js"]
+["browser_test_moving_tab_to_new_window.js"]
+
["browser_test_resize.js"]
diff --git a/browser/components/screenshots/tests/browser/browser_screenshots_drag_scroll_test.js b/browser/components/screenshots/tests/browser/browser_screenshots_drag_scroll_test.js
index 7fdb084ca6..757d721268 100644
--- a/browser/components/screenshots/tests/browser/browser_screenshots_drag_scroll_test.js
+++ b/browser/components/screenshots/tests/browser/browser_screenshots_drag_scroll_test.js
@@ -283,6 +283,23 @@ add_task(async function test_scrollingScreenshotsOpen() {
let { scrollWidth, scrollHeight } =
await helper.getScreenshotsOverlayDimensions();
+ info(
+ JSON.stringify(
+ {
+ left,
+ top,
+ right,
+ bottom,
+ width,
+ height,
+ scrollWidth,
+ scrollHeight,
+ },
+ null,
+ 2
+ )
+ );
+
is(left, startX, "The box left is 10");
is(top, startY, "The box top is 10");
is(
diff --git a/browser/components/screenshots/tests/browser/browser_screenshots_test_downloads.js b/browser/components/screenshots/tests/browser/browser_screenshots_test_downloads.js
index 770a7ae06b..51d5b858b9 100644
--- a/browser/components/screenshots/tests/browser/browser_screenshots_test_downloads.js
+++ b/browser/components/screenshots/tests/browser/browser_screenshots_test_downloads.js
@@ -29,7 +29,7 @@ add_setup(async function () {
],
});
- MockFilePicker.init(window);
+ MockFilePicker.init(window.browsingContext);
MockFilePicker.useAnyFile();
MockFilePicker.returnValue = MockFilePicker.returnOK;
diff --git a/browser/components/screenshots/tests/browser/browser_screenshots_test_full_page.js b/browser/components/screenshots/tests/browser/browser_screenshots_test_full_page.js
index 51cda963d9..006a9819ed 100644
--- a/browser/components/screenshots/tests/browser/browser_screenshots_test_full_page.js
+++ b/browser/components/screenshots/tests/browser/browser_screenshots_test_full_page.js
@@ -3,8 +3,11 @@
"use strict";
-function assertRange(lhs, rhsMin, rhsMax, msg) {
- Assert.ok(lhs >= rhsMin && lhs <= rhsMax, msg);
+function assertPixel(actual, expected, message) {
+ info(message);
+ isfuzzy(actual[0], expected[0], 1, "R color value");
+ isfuzzy(actual[1], expected[1], 1, "G color value");
+ isfuzzy(actual[2], expected[2], 1, "B color value");
}
add_task(async function test_fullpageScreenshot() {
@@ -65,25 +68,36 @@ add_task(async function test_fullpageScreenshot() {
Assert.equal(result.width, expectedWidth, "Widths should be equal");
Assert.equal(result.height, expectedHeight, "Heights should be equal");
- // top left
- assertRange(result.color.topLeft[0], 110, 111, "R color value");
- assertRange(result.color.topLeft[1], 110, 111, "G color value");
- assertRange(result.color.topLeft[2], 110, 111, "B color value");
-
- // top right
- assertRange(result.color.topRight[0], 55, 56, "R color value");
- assertRange(result.color.topRight[1], 155, 156, "G color value");
- assertRange(result.color.topRight[2], 155, 156, "B color value");
-
- // bottom left
- assertRange(result.color.bottomLeft[0], 105, 106, "R color value");
- assertRange(result.color.bottomLeft[1], 55, 56, "G color value");
- assertRange(result.color.bottomLeft[2], 105, 106, "B color value");
-
- // bottom right
- assertRange(result.color.bottomRight[0], 52, 53, "R color value");
- assertRange(result.color.bottomRight[1], 127, 128, "G color value");
- assertRange(result.color.bottomRight[2], 152, 153, "B color value");
+ // Due to https://bugzil.la/1396587, the pasted image colors differ from
+ // the original image on macOS. Once that bug is fixed, we can remove the
+ // special check for macOS.
+ if (AppConstants.platform === "macosx") {
+ assertPixel(result.color.topLeft, [130, 130, 130], "Top left pixel");
+ assertPixel(result.color.topRight, [66, 170, 171], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [125, 75, 125],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [64, 145, 169],
+ "Bottom right pixel"
+ );
+ } else {
+ assertPixel(result.color.topLeft, [111, 111, 111], "Top left pixel");
+ assertPixel(result.color.topRight, [55, 155, 155], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [105, 55, 105],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [52, 127, 152],
+ "Bottom right pixel"
+ );
+ }
}
);
});
@@ -151,25 +165,36 @@ add_task(async function test_fullpageScreenshotScrolled() {
Assert.equal(result.width, expectedWidth, "Widths should be equal");
Assert.equal(result.height, expectedHeight, "Heights should be equal");
- // top left
- assertRange(result.color.topLeft[0], 110, 111, "R color value");
- assertRange(result.color.topLeft[1], 110, 111, "G color value");
- assertRange(result.color.topLeft[2], 110, 111, "B color value");
-
- // top right
- assertRange(result.color.topRight[0], 55, 56, "R color value");
- assertRange(result.color.topRight[1], 155, 156, "G color value");
- assertRange(result.color.topRight[2], 155, 156, "B color value");
-
- // bottom left
- assertRange(result.color.bottomLeft[0], 105, 106, "R color value");
- assertRange(result.color.bottomLeft[1], 55, 56, "G color value");
- assertRange(result.color.bottomLeft[2], 105, 106, "B color value");
-
- // bottom right
- assertRange(result.color.bottomRight[0], 52, 53, "R color value");
- assertRange(result.color.bottomRight[1], 127, 128, "G color value");
- assertRange(result.color.bottomRight[2], 152, 153, "B color value");
+ // Due to https://bugzil.la/1396587, the pasted image colors differ from
+ // the original image on macOS. Once that bug is fixed, we can remove the
+ // special check for macOS.
+ if (AppConstants.platform === "macosx") {
+ assertPixel(result.color.topLeft, [130, 130, 130], "Top left pixel");
+ assertPixel(result.color.topRight, [66, 170, 171], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [125, 75, 125],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [64, 145, 169],
+ "Bottom right pixel"
+ );
+ } else {
+ assertPixel(result.color.topLeft, [111, 111, 111], "Top left pixel");
+ assertPixel(result.color.topRight, [55, 155, 155], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [105, 55, 105],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [52, 127, 152],
+ "Bottom right pixel"
+ );
+ }
}
);
});
diff --git a/browser/components/screenshots/tests/browser/browser_screenshots_test_toggle_pref.js b/browser/components/screenshots/tests/browser/browser_screenshots_test_toggle_pref.js
index 0aafba8fb3..ad262a7e67 100644
--- a/browser/components/screenshots/tests/browser/browser_screenshots_test_toggle_pref.js
+++ b/browser/components/screenshots/tests/browser/browser_screenshots_test_toggle_pref.js
@@ -9,6 +9,7 @@ const { sinon } = ChromeUtils.importESModule(
ChromeUtils.defineESModuleGetters(this, {
ScreenshotsUtils: "resource:///modules/ScreenshotsUtils.sys.mjs",
+ AddonManager: "resource://gre/modules/AddonManager.sys.mjs",
});
ChromeUtils.defineLazyGetter(this, "ExtensionManagement", () => {
const { Management } = ChromeUtils.importESModule(
@@ -17,7 +18,11 @@ ChromeUtils.defineLazyGetter(this, "ExtensionManagement", () => {
return Management;
});
-add_task(async function test() {
+const COMPONENT_PREF = "screenshots.browser.component.enabled";
+const SCREENSHOTS_PREF = "extensions.screenshots.disabled";
+const SCREENSHOT_EXTENSION = "screenshots@mozilla.org";
+
+add_task(async function test_toggling_screenshots_pref() {
let observerSpy = sinon.spy();
let notifierSpy = sinon.spy();
@@ -31,13 +36,24 @@ add_task(async function test() {
ScreenshotsUtils.notify.wrappedMethod.apply(this, arguments);
});
+ // wait for startup idle tasks to complete
+ await new Promise(resolve => ChromeUtils.idleDispatch(resolve));
+ ok(Services.prefs.getBoolPref(COMPONENT_PREF), "Component enabled");
+ ok(!Services.prefs.getBoolPref(SCREENSHOTS_PREF), "Screenshots enabled");
+
+ let addon = await AddonManager.getAddonByID(SCREENSHOT_EXTENSION);
+ await BrowserTestUtils.waitForCondition(
+ () => !addon.isActive,
+ "The extension is not active when the component is prefd on"
+ );
+
await BrowserTestUtils.withNewTab(
{
gBrowser,
url: SHORT_TEST_PAGE,
},
async browser => {
- function awaitExtensionEvent(eventName, id) {
+ function extensionEventPromise(eventName, id) {
return new Promise(resolve => {
let listener = (_eventName, ...args) => {
let extension = args[0];
@@ -49,9 +65,21 @@ add_task(async function test() {
ExtensionManagement.on(eventName, listener);
});
}
- const SCREENSHOT_EXTENSION = "screenshots@mozilla.org";
let helper = new ScreenshotsHelper(browser);
+ ok(
+ addon.userDisabled,
+ "The extension is disabled when the component is prefd on"
+ );
+ ok(
+ !addon.isActive,
+ "The extension is not initially active when the component is prefd on"
+ );
+ await BrowserTestUtils.waitForCondition(
+ () => ScreenshotsUtils.initialized,
+ "The component is initialized"
+ );
+ ok(ScreenshotsUtils.initialized, "The component is initialized");
ok(observerSpy.notCalled, "Observer not called");
helper.triggerUIFromToolbar();
@@ -80,12 +108,20 @@ add_task(async function test() {
Assert.equal(observerSpy.callCount, 3, "Observer function called thrice");
- const COMPONENT_PREF = "screenshots.browser.component.enabled";
- await SpecialPowers.pushPrefEnv({
- set: [[COMPONENT_PREF, false]],
- });
+ let extensionReadyPromise = extensionEventPromise(
+ "ready",
+ SCREENSHOT_EXTENSION
+ );
+ Services.prefs.setBoolPref(COMPONENT_PREF, false);
ok(!Services.prefs.getBoolPref(COMPONENT_PREF), "Extension enabled");
- await awaitExtensionEvent("ready", SCREENSHOT_EXTENSION);
+
+ info("Waiting for the extension ready event");
+ await extensionReadyPromise;
+ await BrowserTestUtils.waitForCondition(
+ () => !addon.userDisabled,
+ "The extension gets un-disabled when the component is prefd off"
+ );
+ ok(addon.isActive, "Extension is active");
helper.triggerUIFromToolbar();
Assert.equal(
@@ -94,6 +130,7 @@ add_task(async function test() {
"Observer function still called thrice"
);
+ info("Waiting for the extensions overlay");
await SpecialPowers.spawn(
browser,
["#firefox-screenshots-preselection-iframe"],
@@ -115,6 +152,7 @@ add_task(async function test() {
}
);
+ info("Waiting for the extensions overlay");
helper.triggerUIFromToolbar();
await SpecialPowers.spawn(
browser,
@@ -202,9 +240,7 @@ add_task(async function test() {
"screenshots-component-initialized"
);
- await SpecialPowers.pushPrefEnv({
- set: [[COMPONENT_PREF, true]],
- });
+ Services.prefs.setBoolPref(COMPONENT_PREF, true);
ok(Services.prefs.getBoolPref(COMPONENT_PREF), "Component enabled");
// Needed for component to initialize
await componentReady;
@@ -215,12 +251,6 @@ add_task(async function test() {
4,
"Observer function called four times"
);
-
- const SCREENSHOTS_PREF = "extensions.screenshots.disabled";
- await SpecialPowers.pushPrefEnv({
- set: [[SCREENSHOTS_PREF, true]],
- });
- ok(Services.prefs.getBoolPref(SCREENSHOTS_PREF), "Screenshots disabled");
}
);
@@ -230,7 +260,9 @@ add_task(async function test() {
url: SHORT_TEST_PAGE,
},
async browser => {
- const SCREENSHOTS_PREF = "extensions.screenshots.disabled";
+ Services.prefs.setBoolPref(SCREENSHOTS_PREF, true);
+ Services.prefs.setBoolPref(COMPONENT_PREF, true);
+
ok(Services.prefs.getBoolPref(SCREENSHOTS_PREF), "Screenshots disabled");
ok(
@@ -255,22 +287,23 @@ add_task(async function test() {
menu.hidePopup();
await popuphidden;
- await SpecialPowers.pushPrefEnv({
- set: [[SCREENSHOTS_PREF, false]],
- });
- ok(!Services.prefs.getBoolPref(SCREENSHOTS_PREF), "Screenshots enabled");
- }
- );
+ let componentReady = TestUtils.topicObserved(
+ "screenshots-component-initialized"
+ );
+
+ Services.prefs.setBoolPref(SCREENSHOTS_PREF, false);
- await BrowserTestUtils.withNewTab(
- {
- gBrowser,
- url: SHORT_TEST_PAGE,
- },
- async browser => {
- const SCREENSHOTS_PREF = "extensions.screenshots.disabled";
ok(!Services.prefs.getBoolPref(SCREENSHOTS_PREF), "Screenshots enabled");
+ await componentReady;
+
+ ok(ScreenshotsUtils.initialized, "The component is initialized");
+
+ ok(
+ !document.getElementById("screenshot-button").disabled,
+ "Toolbar button is enabled"
+ );
+
let helper = new ScreenshotsHelper(browser);
helper.triggerUIFromToolbar();
@@ -284,6 +317,4 @@ add_task(async function test() {
observerStub.restore();
notifierStub.restore();
-
- await SpecialPowers.popPrefEnv();
});
diff --git a/browser/components/screenshots/tests/browser/browser_screenshots_test_visible.js b/browser/components/screenshots/tests/browser/browser_screenshots_test_visible.js
index 7b7a46f73d..c53b44d5ea 100644
--- a/browser/components/screenshots/tests/browser/browser_screenshots_test_visible.js
+++ b/browser/components/screenshots/tests/browser/browser_screenshots_test_visible.js
@@ -3,6 +3,13 @@
"use strict";
+function assertPixel(actual, expected, message) {
+ info(message);
+ isfuzzy(actual[0], expected[0], 1, "R color value");
+ isfuzzy(actual[1], expected[1], 1, "G color value");
+ isfuzzy(actual[2], expected[2], 1, "B color value");
+}
+
add_task(async function test_visibleScreenshot() {
await BrowserTestUtils.withNewTab(
{
@@ -65,25 +72,36 @@ add_task(async function test_visibleScreenshot() {
Assert.equal(result.width, expectedWidth, "Widths should be equal");
Assert.equal(result.height, expectedHeight, "Heights should be equal");
- // top left
- Assert.equal(111, result.color.topLeft[0], "R color value");
- Assert.equal(111, result.color.topLeft[1], "G color value");
- Assert.equal(111, result.color.topLeft[2], "B color value");
-
- // top right
- Assert.equal(111, result.color.topRight[0], "R color value");
- Assert.equal(111, result.color.topRight[1], "G color value");
- Assert.equal(111, result.color.topRight[2], "B color value");
-
- // bottom left
- Assert.equal(111, result.color.bottomLeft[0], "R color value");
- Assert.equal(111, result.color.bottomLeft[1], "G color value");
- Assert.equal(111, result.color.bottomLeft[2], "B color value");
-
- // bottom right
- Assert.equal(111, result.color.bottomRight[0], "R color value");
- Assert.equal(111, result.color.bottomRight[1], "G color value");
- Assert.equal(111, result.color.bottomRight[2], "B color value");
+ // Due to https://bugzil.la/1396587, the pasted image colors differ from
+ // the original image on macOS. Once that bug is fixed, we can remove the
+ // special check for macOS.
+ if (AppConstants.platform === "macosx") {
+ assertPixel(result.color.topLeft, [130, 130, 130], "Top left pixel");
+ assertPixel(result.color.topRight, [130, 130, 130], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [130, 130, 130],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [130, 130, 130],
+ "Bottom right pixel"
+ );
+ } else {
+ assertPixel(result.color.topLeft, [111, 111, 111], "Top left pixel");
+ assertPixel(result.color.topRight, [111, 111, 111], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [111, 111, 111],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [111, 111, 111],
+ "Bottom right pixel"
+ );
+ }
}
);
});
@@ -147,34 +165,42 @@ add_task(async function test_visibleScreenshotScrolledY() {
info("Waiting for clipboard change");
let result = await clipboardChanged;
- // let result = await helper.getImageSizeAndColorFromClipboard();
- // debugger;
-
info("result: " + JSON.stringify(result, null, 2));
info("contentInfo: " + JSON.stringify(contentInfo, null, 2));
Assert.equal(result.width, expectedWidth, "Widths should be equal");
Assert.equal(result.height, expectedHeight, "Heights should be equal");
- // top left
- Assert.equal(105, result.color.topLeft[0], "R color value");
- Assert.equal(55, result.color.topLeft[1], "G color value");
- Assert.equal(105, result.color.topLeft[2], "B color value");
-
- // top right
- Assert.equal(105, result.color.topRight[0], "R color value");
- Assert.equal(55, result.color.topRight[1], "G color value");
- Assert.equal(105, result.color.topRight[2], "B color value");
-
- // bottom left
- Assert.equal(105, result.color.bottomLeft[0], "R color value");
- Assert.equal(55, result.color.bottomLeft[1], "G color value");
- Assert.equal(105, result.color.bottomLeft[2], "B color value");
-
- // bottom right
- Assert.equal(105, result.color.bottomRight[0], "R color value");
- Assert.equal(55, result.color.bottomRight[1], "G color value");
- Assert.equal(105, result.color.bottomRight[2], "B color value");
+ // Due to https://bugzil.la/1396587, the pasted image colors differ from
+ // the original image on macOS. Once that bug is fixed, we can remove the
+ // special check for macOS.
+ if (AppConstants.platform === "macosx") {
+ assertPixel(result.color.topLeft, [125, 75, 125], "Top left pixel");
+ assertPixel(result.color.topRight, [125, 75, 125], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [125, 75, 125],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [125, 75, 125],
+ "Bottom right pixel"
+ );
+ } else {
+ assertPixel(result.color.topLeft, [105, 55, 105], "Top left pixel");
+ assertPixel(result.color.topRight, [105, 55, 105], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [105, 55, 105],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [105, 55, 105],
+ "Bottom right pixel"
+ );
+ }
}
);
});
@@ -244,25 +270,36 @@ add_task(async function test_visibleScreenshotScrolledX() {
Assert.equal(result.width, expectedWidth, "Widths should be equal");
Assert.equal(result.height, expectedHeight, "Heights should be equal");
- // top left
- Assert.equal(55, result.color.topLeft[0], "R color value");
- Assert.equal(155, result.color.topLeft[1], "G color value");
- Assert.equal(155, result.color.topLeft[2], "B color value");
-
- // top right
- Assert.equal(55, result.color.topRight[0], "R color value");
- Assert.equal(155, result.color.topRight[1], "G color value");
- Assert.equal(155, result.color.topRight[2], "B color value");
-
- // bottom left
- Assert.equal(55, result.color.bottomLeft[0], "R color value");
- Assert.equal(155, result.color.bottomLeft[1], "G color value");
- Assert.equal(155, result.color.bottomLeft[2], "B color value");
-
- // bottom right
- Assert.equal(55, result.color.bottomRight[0], "R color value");
- Assert.equal(155, result.color.bottomRight[1], "G color value");
- Assert.equal(155, result.color.bottomRight[2], "B color value");
+ // Due to https://bugzil.la/1396587, the pasted image colors differ from
+ // the original image on macOS. Once that bug is fixed, we can remove the
+ // special check for macOS.
+ if (AppConstants.platform === "macosx") {
+ assertPixel(result.color.topLeft, [66, 170, 171], "Top left pixel");
+ assertPixel(result.color.topRight, [66, 170, 171], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [66, 170, 171],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [66, 170, 171],
+ "Bottom right pixel"
+ );
+ } else {
+ assertPixel(result.color.topLeft, [55, 155, 155], "Top left pixel");
+ assertPixel(result.color.topRight, [55, 155, 155], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [55, 155, 155],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [55, 155, 155],
+ "Bottom right pixel"
+ );
+ }
}
);
});
@@ -332,25 +369,36 @@ add_task(async function test_visibleScreenshotScrolledXAndY() {
Assert.equal(result.width, expectedWidth, "Widths should be equal");
Assert.equal(result.height, expectedHeight, "Heights should be equal");
- // top left
- Assert.equal(52, result.color.topLeft[0], "R color value");
- Assert.equal(127, result.color.topLeft[1], "G color value");
- Assert.equal(152, result.color.topLeft[2], "B color value");
-
- // top right
- Assert.equal(52, result.color.topRight[0], "R color value");
- Assert.equal(127, result.color.topRight[1], "G color value");
- Assert.equal(152, result.color.topRight[2], "B color value");
-
- // bottom left
- Assert.equal(52, result.color.bottomLeft[0], "R color value");
- Assert.equal(127, result.color.bottomLeft[1], "G color value");
- Assert.equal(152, result.color.bottomLeft[2], "B color value");
-
- // bottom right
- Assert.equal(52, result.color.bottomRight[0], "R color value");
- Assert.equal(127, result.color.bottomRight[1], "G color value");
- Assert.equal(152, result.color.bottomRight[2], "B color value");
+ // Due to https://bugzil.la/1396587, the pasted image colors differ from
+ // the original image on macOS. Once that bug is fixed, we can remove the
+ // special check for macOS.
+ if (AppConstants.platform === "macosx") {
+ assertPixel(result.color.topLeft, [64, 145, 169], "Top left pixel");
+ assertPixel(result.color.topRight, [64, 145, 169], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [64, 145, 169],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [64, 145, 169],
+ "Bottom right pixel"
+ );
+ } else {
+ assertPixel(result.color.topLeft, [52, 127, 152], "Top left pixel");
+ assertPixel(result.color.topRight, [52, 127, 152], "Top right pixel");
+ assertPixel(
+ result.color.bottomLeft,
+ [52, 127, 152],
+ "Bottom left pixel"
+ );
+ assertPixel(
+ result.color.bottomRight,
+ [52, 127, 152],
+ "Bottom right pixel"
+ );
+ }
}
);
});
diff --git a/browser/components/screenshots/tests/browser/browser_test_moving_tab_to_new_window.js b/browser/components/screenshots/tests/browser/browser_test_moving_tab_to_new_window.js
new file mode 100644
index 0000000000..c3bb546f3a
--- /dev/null
+++ b/browser/components/screenshots/tests/browser/browser_test_moving_tab_to_new_window.js
@@ -0,0 +1,123 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(async function test_movingTabToNewWindow() {
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, TEST_PAGE);
+ let originalHelper = new ScreenshotsHelper(tab.linkedBrowser);
+ originalHelper.triggerUIFromToolbar();
+ await originalHelper.waitForOverlay();
+ await originalHelper.dragOverlay(10, 10, 300, 300);
+
+ let newWindow = gBrowser.replaceTabWithWindow(tab);
+ let swapDocShellPromise = BrowserTestUtils.waitForEvent(
+ tab.linkedBrowser,
+ "SwapDocShells"
+ );
+ await swapDocShellPromise;
+
+ let newtab = newWindow.gBrowser.selectedTab;
+ let newHelper = new ScreenshotsHelper(newtab.linkedBrowser);
+
+ let isInitialized = await newHelper.isOverlayInitialized();
+
+ ok(isInitialized, "Overlay is initialized after switching windows");
+ ok(
+ !ScreenshotsUtils.browserToScreenshotsState.has(tab.linkedBrowser),
+ "The old browser is no longer in the ScreenshotsUtils weakmap"
+ );
+ ok(
+ ScreenshotsUtils.browserToScreenshotsState.has(newtab.linkedBrowser),
+ "The new browser is in the ScreenshotsUtils weakmap"
+ );
+
+ await newHelper.clickCancelButton();
+ await newHelper.assertStateChange("crosshairs");
+ await newHelper.waitForOverlay();
+
+ swapDocShellPromise = BrowserTestUtils.waitForEvent(
+ newtab.linkedBrowser,
+ "SwapDocShells"
+ );
+ gBrowser.adoptTab(newWindow.gBrowser.selectedTab, 1, true);
+ await swapDocShellPromise;
+
+ tab = gBrowser.selectedTab;
+ let helper = new ScreenshotsHelper(tab.linkedBrowser);
+
+ isInitialized = await helper.isOverlayInitialized();
+
+ ok(!isInitialized, "Overlay is not initialized");
+ ok(
+ !ScreenshotsUtils.browserToScreenshotsState.has(tab.linkedBrowser),
+ "The old browser is no longer in the ScreenshotsUtils weakmap"
+ );
+ ok(
+ !ScreenshotsUtils.browserToScreenshotsState.has(newtab.linkedBrowser),
+ "The new browser is no longer in the ScreenshotsUtils weakmap"
+ );
+
+ await BrowserTestUtils.removeTab(tab);
+});
+
+add_task(async function test_movingParentProcessTabToNewWindow() {
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ "about:robots"
+ );
+ let originalHelper = new ScreenshotsHelper(tab.linkedBrowser);
+ originalHelper.triggerUIFromToolbar();
+ await originalHelper.waitForOverlay();
+ await originalHelper.dragOverlay(10, 10, 300, 300);
+
+ let newWindow = gBrowser.replaceTabWithWindow(tab);
+ let swapDocShellPromise = BrowserTestUtils.waitForEvent(
+ tab.linkedBrowser,
+ "SwapDocShells"
+ );
+ await swapDocShellPromise;
+
+ let newtab = newWindow.gBrowser.selectedTab;
+ let newHelper = new ScreenshotsHelper(newtab.linkedBrowser);
+
+ let isInitialized = await newHelper.isOverlayInitialized();
+
+ ok(isInitialized, "Overlay is initialized after switching windows");
+ ok(
+ !ScreenshotsUtils.browserToScreenshotsState.has(tab.linkedBrowser),
+ "The old browser is no longer in the ScreenshotsUtils weakmap"
+ );
+ ok(
+ ScreenshotsUtils.browserToScreenshotsState.has(newtab.linkedBrowser),
+ "The new browser is in the ScreenshotsUtils weakmap"
+ );
+
+ await newHelper.clickCancelButton();
+ await newHelper.assertStateChange("crosshairs");
+ await newHelper.waitForOverlay();
+
+ swapDocShellPromise = BrowserTestUtils.waitForEvent(
+ newtab.linkedBrowser,
+ "SwapDocShells"
+ );
+ gBrowser.adoptTab(newWindow.gBrowser.selectedTab, 1, true);
+ await swapDocShellPromise;
+
+ tab = gBrowser.selectedTab;
+ let helper = new ScreenshotsHelper(tab.linkedBrowser);
+
+ isInitialized = await helper.isOverlayInitialized();
+
+ ok(!isInitialized, "Overlay is not initialized");
+ ok(
+ !ScreenshotsUtils.browserToScreenshotsState.has(tab.linkedBrowser),
+ "The old browser is no longer in the ScreenshotsUtils weakmap"
+ );
+ ok(
+ !ScreenshotsUtils.browserToScreenshotsState.has(newtab.linkedBrowser),
+ "The new browser is no longer in the ScreenshotsUtils weakmap"
+ );
+
+ await BrowserTestUtils.removeTab(tab);
+});
diff --git a/browser/components/screenshots/tests/browser/head.js b/browser/components/screenshots/tests/browser/head.js
index 171e3b8c41..a36e955830 100644
--- a/browser/components/screenshots/tests/browser/head.js
+++ b/browser/components/screenshots/tests/browser/head.js
@@ -38,15 +38,21 @@ const MouseEvents = {
{},
{
get: (target, name) =>
- async function (x, y, options = {}) {
+ async function (x, y, options = {}, browser) {
if (name === "click") {
- this.down(x, y, options);
- this.up(x, y, options);
+ this.down(x, y, options, browser);
+ this.up(x, y, options, browser);
} else {
- await safeSynthesizeMouseEventInContentPage(":root", x, y, {
- type: "mouse" + name,
- ...options,
- });
+ await safeSynthesizeMouseEventInContentPage(
+ ":root",
+ x,
+ y,
+ {
+ type: "mouse" + name,
+ ...options,
+ },
+ browser
+ );
}
},
}
@@ -276,10 +282,15 @@ class ScreenshotsHelper {
this.waitForStateChange("resizing"),
]);
Assert.ok(true, "The overlay is in the dragging or resizing state");
-
+ // We intentionally turn off this a11y check, because the following mouse
+ // event is emitted at the end of the dragging event. Its keyboard
+ // accessible alternative is provided and tested elsewhere, therefore
+ // this rule check shall be ignored by a11y_checks suite.
+ AccessibilityUtils.setEnv({ mustHaveAccessibleRule: false });
mouse.up(endX, endY);
await this.assertStateChange("selected");
+ AccessibilityUtils.resetEnv();
this.endX = endX;
this.endY = endY;
@@ -474,7 +485,7 @@ class ScreenshotsHelper {
);
info(`clicking cancel button at ${x}, ${y}`);
- mouse.click(x, y);
+ mouse.click(x, y, {}, this.browser);
}
async clickPreviewCancelButton() {
@@ -878,9 +889,15 @@ async function safeSynthesizeMouseEventInContentPage(
selector,
x,
y,
- options = {}
+ options = {},
+ browser
) {
- let context = gBrowser.selectedBrowser.browsingContext;
+ let context;
+ if (!browser) {
+ context = gBrowser.selectedBrowser.browsingContext;
+ } else {
+ context = browser.browsingContext;
+ }
BrowserTestUtils.synthesizeMouse(selector, x, y, options, context);
}
diff --git a/browser/components/search/DomainToCategoriesMap.worker.mjs b/browser/components/search/DomainToCategoriesMap.worker.mjs
new file mode 100644
index 0000000000..07dc52cfb8
--- /dev/null
+++ b/browser/components/search/DomainToCategoriesMap.worker.mjs
@@ -0,0 +1,101 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+import { PromiseWorker } from "resource://gre/modules/workers/PromiseWorker.mjs";
+
+/**
+ * Boilerplate to connect with the main thread PromiseWorker.
+ */
+const worker = new PromiseWorker.AbstractWorker();
+worker.dispatch = function (method, args = []) {
+ return agent[method](...args);
+};
+worker.postMessage = function (message, ...transfers) {
+ self.postMessage(message, ...transfers);
+};
+worker.close = function () {
+ self.close();
+};
+
+self.addEventListener("message", msg => worker.handleMessage(msg));
+self.addEventListener("unhandledrejection", function (error) {
+ throw error.reason;
+});
+
+/**
+ * Stores and manages the Domain-to-Categories Map.
+ */
+class Agent {
+ /**
+ * @type {Map<string, Array<number>>} Hashes mapped to categories and values.
+ */
+ #map = new Map();
+
+ /**
+ * Converts data from the array directly into a Map.
+ *
+ * @param {Array<ArrayBuffer>} fileContents Files
+ * @returns {boolean} Returns whether the Map contains results.
+ */
+ populateMap(fileContents) {
+ this.#map.clear();
+
+ for (let fileContent of fileContents) {
+ let obj;
+ try {
+ obj = JSON.parse(new TextDecoder().decode(fileContent));
+ } catch (ex) {
+ return false;
+ }
+ for (let objKey in obj) {
+ if (Object.hasOwn(obj, objKey)) {
+ this.#map.set(objKey, obj[objKey]);
+ }
+ }
+ }
+ return this.#map.size > 0;
+ }
+
+ /**
+ * Retrieves scores for the hash from the map.
+ *
+ * @param {string} hash Key to look up in the map.
+ * @returns {Array<number>}
+ */
+ getScores(hash) {
+ if (this.#map.has(hash)) {
+ return this.#map.get(hash);
+ }
+ return [];
+ }
+
+ /**
+ * Empties the internal map.
+ *
+ * @returns {boolean}
+ */
+ emptyMap() {
+ this.#map.clear();
+ return true;
+ }
+
+ /**
+ * Test only function to allow the map to contain information without
+ * having to go through Remote Settings.
+ *
+ * @param {object} obj The data to directly import into the Map.
+ * @returns {boolean} Whether the map contains values.
+ */
+ overrideMapForTests(obj) {
+ this.#map.clear();
+ for (let objKey in obj) {
+ if (Object.hasOwn(obj, objKey)) {
+ this.#map.set(objKey, obj[objKey]);
+ }
+ }
+ return this.#map.size > 0;
+ }
+}
+
+const agent = new Agent();
diff --git a/browser/components/search/SearchOneOffs.sys.mjs b/browser/components/search/SearchOneOffs.sys.mjs
index 0459af092a..9f0245a6be 100644
--- a/browser/components/search/SearchOneOffs.sys.mjs
+++ b/browser/components/search/SearchOneOffs.sys.mjs
@@ -14,7 +14,7 @@ const EMPTY_ADD_ENGINES = [];
/**
* Defines the search one-off button elements. These are displayed at the bottom
* of the address bar and search bar. The address bar buttons are a subclass in
- * browser/components/urlbar/UrlbarSearchOneOffs.jsm. If you are adding a new
+ * browser/components/urlbar/UrlbarSearchOneOffs.sys.mjs. If you are adding a new
* subclass, see "Methods for subclasses to override" below.
*/
export class SearchOneOffs {
@@ -466,7 +466,7 @@ export class SearchOneOffs {
this.settingsButton.id = origin + "-anon-search-settings";
let engines = (await this.getEngineInfo()).engines;
- this._rebuildEngineList(engines, addEngines);
+ await this._rebuildEngineList(engines, addEngines);
}
/**
@@ -477,14 +477,14 @@ export class SearchOneOffs {
* @param {Array} addEngines
* The engines that can be added.
*/
- _rebuildEngineList(engines, addEngines) {
+ async _rebuildEngineList(engines, addEngines) {
for (let i = 0; i < engines.length; ++i) {
let engine = engines[i];
let button = this.document.createXULElement("button");
button.engine = engine;
button.id = this._buttonIDForEngine(engine);
let iconURL =
- engine.getIconURL() ||
+ (await engine.getIconURL()) ||
"chrome://browser/skin/search-engine-placeholder.png";
button.setAttribute("image", iconURL);
button.setAttribute("class", "searchbar-engine-one-off-item");
@@ -981,7 +981,7 @@ export class SearchOneOffs {
this.handleSearchCommand(event, engine);
}
- _on_command(event) {
+ async _on_command(event) {
let target = event.target;
if (target == this.settingsButton) {
@@ -1043,7 +1043,7 @@ export class SearchOneOffs {
// search engine first. Doing this as opposed to rebuilding all the
// one-off buttons avoids flicker.
let iconURL =
- currentEngine.getIconURL() ||
+ (await currentEngine.getIconURL()) ||
"chrome://browser/skin/search-engine-placeholder.png";
button.setAttribute("image", iconURL);
button.setAttribute("tooltiptext", currentEngine.name);
diff --git a/browser/components/search/SearchSERPTelemetry.sys.mjs b/browser/components/search/SearchSERPTelemetry.sys.mjs
index 00105241bb..fa593be08c 100644
--- a/browser/components/search/SearchSERPTelemetry.sys.mjs
+++ b/browser/components/search/SearchSERPTelemetry.sys.mjs
@@ -7,6 +7,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs";
const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
+ BasePromiseWorker: "resource://gre/modules/PromiseWorker.sys.mjs",
BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
Region: "resource://gre/modules/Region.sys.mjs",
@@ -94,6 +95,10 @@ XPCOMUtils.defineLazyPreferenceGetter(
export const SearchSERPTelemetryUtils = {
ACTIONS: {
CLICKED: "clicked",
+ // specific to cookie banner
+ CLICKED_ACCEPT: "clicked_accept",
+ CLICKED_REJECT: "clicked_reject",
+ CLICKED_MORE_OPTIONS: "clicked_more_options",
EXPANDED: "expanded",
SUBMITTED: "submitted",
},
@@ -103,6 +108,7 @@ export const SearchSERPTelemetryUtils = {
AD_LINK: "ad_link",
AD_SIDEBAR: "ad_sidebar",
AD_SITELINK: "ad_sitelink",
+ COOKIE_BANNER: "cookie_banner",
INCONTENT_SEARCHBOX: "incontent_searchbox",
NON_ADS_LINK: "non_ads_link",
REFINED_SEARCH_BUTTONS: "refined_search_buttons",
@@ -403,6 +409,10 @@ class TelemetryHandler {
);
}
+ newProvider.ignoreLinkRegexps = provider.ignoreLinkRegexps?.length
+ ? provider.ignoreLinkRegexps.map(r => new RegExp(r))
+ : [];
+
newProvider.nonAdsLinkRegexps = provider.nonAdsLinkRegexps?.length
? provider.nonAdsLinkRegexps.map(r => new RegExp(r))
: [];
@@ -412,6 +422,9 @@ class TelemetryHandler {
regexp: new RegExp(provider.shoppingTab.regexp),
};
}
+
+ newProvider.nonAdsLinkQueryParamNames =
+ provider.nonAdsLinkQueryParamNames ?? [];
return newProvider;
});
this._contentHandler._searchProviderInfo = this._searchProviderInfo;
@@ -429,8 +442,8 @@ class TelemetryHandler {
this._contentHandler._reportPageWithAdImpressions(info, browser);
}
- reportPageDomains(info, browser) {
- this._contentHandler._reportPageDomains(info, browser);
+ async reportPageDomains(info, browser) {
+ await this._contentHandler._reportPageDomains(info, browser);
}
reportPageImpression(info, browser) {
@@ -1212,7 +1225,7 @@ class ContentHandler {
);
}
- observe(aSubject, aTopic, aData) {
+ observe(aSubject, aTopic) {
switch (aTopic) {
case "http-on-stop-request":
this._reportChannelBandwidth(aSubject);
@@ -1330,6 +1343,11 @@ class ContentHandler {
let originURL = wrappedChannel.originURI?.spec;
let url = wrappedChannel.finalURL;
+
+ if (info.ignoreLinkRegexps.some(r => r.test(url))) {
+ return;
+ }
+
// Some channels re-direct by loading pages that return 200. The result
// is the channel will have an originURL that changes from the SERP to
// either a nonAdsRegexp or an extraAdServersRegexps. This is typical
@@ -1434,6 +1452,30 @@ class ContentHandler {
let startFindComponent = Cu.now();
let parsedUrl = new URL(url);
+
+ // Organic links may contain query param values mapped to links shown
+ // on the SERP at page load. If a stored component depends on that
+ // value, we need to be able to recover it or else we'll always consider
+ // it a non_ads_link.
+ if (
+ info.nonAdsLinkQueryParamNames.length &&
+ info.nonAdsLinkRegexps.some(r => r.test(url))
+ ) {
+ let newParsedUrl;
+ for (let key of info.nonAdsLinkQueryParamNames) {
+ let paramValue = parsedUrl.searchParams.get(key);
+ if (paramValue) {
+ try {
+ newParsedUrl = /^https?:\/\//.test(paramValue)
+ ? new URL(paramValue)
+ : new URL(paramValue, parsedUrl.origin);
+ break;
+ } catch (e) {}
+ }
+ }
+ parsedUrl = newParsedUrl ?? parsedUrl;
+ }
+
// Determine the component type of the link.
let type;
for (let [
@@ -1629,8 +1671,8 @@ class ContentHandler {
*
* @param {object} info
* The search provider infomation for the page.
- * @param {string} info.type
- * The component type that was clicked on.
+ * @param {string} info.target
+ * The target component that was interacted with.
* @param {string} info.action
* The action taken on the page.
* @param {object} browser
@@ -1643,22 +1685,23 @@ class ContentHandler {
}
let telemetryState = item.browserTelemetryStateMap.get(browser);
let impressionId = telemetryState?.impressionId;
- if (info.type && impressionId) {
+ if (info.target && impressionId) {
lazy.logConsole.debug(`Recorded page action:`, {
impressionId: telemetryState.impressionId,
- type: info.type,
+ target: info.target,
action: info.action,
});
Glean.serp.engagement.record({
impression_id: impressionId,
action: info.action,
- target: info.type,
+ target: info.target,
});
impressionIdsWithoutEngagementsSet.delete(impressionId);
// In-content searches are not be categorized with a type, so they will
// not be picked up in the network processes.
if (
- info.type == SearchSERPTelemetryUtils.COMPONENTS.INCONTENT_SEARCHBOX &&
+ info.target ==
+ SearchSERPTelemetryUtils.COMPONENTS.INCONTENT_SEARCHBOX &&
info.action == SearchSERPTelemetryUtils.ACTIONS.SUBMITTED
) {
telemetryState.searchBoxSubmitted = true;
@@ -1667,6 +1710,7 @@ class ContentHandler {
SearchSERPTelemetryUtils.INCONTENT_SOURCES.SEARCHBOX
);
}
+ Services.obs.notifyObservers(null, "reported-page-with-action");
} else {
lazy.logConsole.warn(
"Expected to report a",
@@ -1712,23 +1756,23 @@ class ContentHandler {
}
/**
- * Initiates the categorization and reporting of domains extracted from
- * SERPs.
- *
- * @param {object} info
- * The search provider infomation for the page.
- * @param {Set} info.nonAdDomains
- The non-ad domains extracted from the page.
- * @param {Set} info.adDomains
- The ad domains extracted from the page.
- * @param {object} browser
- * The browser associated with the page.
- */
- _reportPageDomains(info, browser) {
+ * Initiates the categorization and reporting of domains extracted from
+ * SERPs.
+ *
+ * @param {object} info
+ * The search provider infomation for the page.
+ * @param {Set} info.nonAdDomains
+ The non-ad domains extracted from the page.
+ * @param {Set} info.adDomains
+ The ad domains extracted from the page.
+ * @param {object} browser
+ * The browser associated with the page.
+ */
+ async _reportPageDomains(info, browser) {
let item = this._findItemForBrowser(browser);
let telemetryState = item.browserTelemetryStateMap.get(browser);
if (lazy.serpEventTelemetryCategorization && telemetryState) {
- let result = SearchSERPCategorization.maybeCategorizeSERP(
+ let result = await SearchSERPCategorization.maybeCategorizeSERP(
info.nonAdDomains,
info.adDomains,
item.info.provider
@@ -1808,12 +1852,10 @@ class SERPCategorizer {
* Domains from organic results extracted from the page.
* @param {Set} adDomains
* Domains from ad results extracted from the page.
- * @param {string} provider
- * The provider associated with the page.
* @returns {CategorizationResult | null}
* The final categorization result. Returns null if the map was empty.
*/
- maybeCategorizeSERP(nonAdDomains, adDomains, provider) {
+ async maybeCategorizeSERP(nonAdDomains, adDomains) {
// Per DS, if the map was empty (e.g. because of a technical issue
// downloading the data), we shouldn't report telemetry.
// Thus, there is no point attempting to categorize the SERP.
@@ -1822,15 +1864,13 @@ class SERPCategorizer {
}
let resultsToReport = {};
- let processedDomains = this.processDomains(nonAdDomains, provider);
- let results = this.applyCategorizationLogic(processedDomains);
+ let results = await this.applyCategorizationLogic(nonAdDomains);
resultsToReport.organic_category = results.category;
resultsToReport.organic_num_domains = results.num_domains;
resultsToReport.organic_num_unknown = results.num_unknown;
resultsToReport.organic_num_inconclusive = results.num_inconclusive;
- processedDomains = this.processDomains(adDomains, provider);
- results = this.applyCategorizationLogic(processedDomains);
+ results = await this.applyCategorizationLogic(adDomains);
resultsToReport.sponsored_category = results.category;
resultsToReport.sponsored_num_domains = results.num_domains;
resultsToReport.sponsored_num_unknown = results.num_unknown;
@@ -1851,22 +1891,18 @@ class SERPCategorizer {
* The final categorization results. Keys are: "category", "num_domains",
* "num_unknown" and "num_inconclusive".
*/
- applyCategorizationLogic(domains) {
+ async applyCategorizationLogic(domains) {
let domainInfo = {};
let domainsCount = 0;
let unknownsCount = 0;
let inconclusivesCount = 0;
- // Per a request from Data Science, we need to limit the number of domains
- // categorized to 10 non-ad domains and 10 ad domains.
- domains = new Set(
- [...domains].slice(0, CATEGORIZATION_SETTINGS.MAX_DOMAINS_TO_CATEGORIZE)
- );
-
for (let domain of domains) {
domainsCount++;
- let categoryCandidates = SearchSERPDomainToCategoriesMap.get(domain);
+ let categoryCandidates = await SearchSERPDomainToCategoriesMap.get(
+ domain
+ );
if (!categoryCandidates.length) {
unknownsCount++;
@@ -1919,65 +1955,6 @@ class SERPCategorizer {
};
}
- /**
- * Processes raw domains extracted from the SERP into their final form before
- * categorization.
- *
- * @param {Set} domains
- * The domains extracted from the page.
- * @param {string} provider
- * The provider associated with the page.
- * @returns {Set} processedDomains
- * The final set of processed domains for a page.
- */
- processDomains(domains, provider) {
- let processedDomains = new Set();
-
- for (let domain of domains) {
- // Don't include domains associated with the search provider.
- if (
- domain.startsWith(`${provider}.`) ||
- domain.includes(`.${provider}.`)
- ) {
- continue;
- }
- let domainWithoutSubdomains = this.#stripDomainOfSubdomains(domain);
- // We may have come across the same domain twice, once with www. prefixed
- // and another time without.
- if (
- domainWithoutSubdomains &&
- !processedDomains.has(domainWithoutSubdomains)
- ) {
- processedDomains.add(domainWithoutSubdomains);
- }
- }
-
- return processedDomains;
- }
-
- /**
- * Helper to strip domains of any subdomains.
- *
- * @param {string} domain
- * The domain to strip of any subdomains.
- * @returns {object} browser
- * The given domain with any subdomains removed.
- */
- #stripDomainOfSubdomains(domain) {
- let tld;
- // Can throw an exception if the input has too few domain levels.
- try {
- tld = Services.eTLD.getKnownPublicSuffixFromHost(domain);
- } catch (ex) {
- return "";
- }
-
- let domainWithoutTLD = domain.substring(0, domain.length - tld.length);
- let secondLevelDomain = domainWithoutTLD.split(".").at(-2);
-
- return secondLevelDomain ? `${secondLevelDomain}.${tld}` : "";
- }
-
#chooseRandomlyFrom(categories) {
let randIdx = Math.floor(Math.random() * categories.length);
return categories[randIdx];
@@ -2075,7 +2052,7 @@ class CategorizationEventScheduler {
this.#init = false;
}
- observe(subject, topic, data) {
+ observe(subject, topic) {
switch (topic) {
case "idle":
lazy.logConsole.debug("Triggering all callbacks due to idle.");
@@ -2167,17 +2144,13 @@ class CategorizationRecorder {
*/
/**
- * Maps domain to categories, with data synced with Remote Settings.
+ * Maps domain to categories, with its data synced using Remote Settings. The
+ * data is downloaded from Remote Settings and stored in a map in a worker
+ * thread to avoid processing the data from the attachments from occupying
+ * the main thread.
*/
class DomainToCategoriesMap {
/**
- * Contains the domain to category scores.
- *
- * @type {Object<string, Array<DomainCategoryScore>> | null}
- */
- #map = null;
-
- /**
* Latest version number of the attachments.
*
* @type {number | null}
@@ -2222,6 +2195,17 @@ class DomainToCategoriesMap {
#downloadRetries = 0;
/**
+ * Whether the mappings are empty.
+ */
+ #empty = true;
+
+ /**
+ * @type {BasePromiseWorker|null} Worker used to access the raw domain
+ * to categories map data.
+ */
+ #worker = null;
+
+ /**
* Runs at application startup with startup idle tasks. If the SERP
* categorization preference is enabled, it creates a Remote Settings
* client to listen to updates, and populates the map.
@@ -2231,14 +2215,18 @@ class DomainToCategoriesMap {
return;
}
lazy.logConsole.debug("Initializing domain-to-categories map.");
- this.#setupClientAndMap();
+ this.#worker = new lazy.BasePromiseWorker(
+ "resource:///modules/DomainToCategoriesMap.worker.mjs",
+ { type: "module" }
+ );
+ await this.#setupClientAndMap();
this.#init = true;
}
uninit() {
if (this.#init) {
lazy.logConsole.debug("Un-initializing domain-to-categories map.");
- this.#clearClientAndMap();
+ this.#clearClientAndWorker();
this.#cancelAndNullifyTimer();
this.#init = false;
}
@@ -2252,16 +2240,16 @@ class DomainToCategoriesMap {
* An array containing categories and their respective score. If no record
* for the domain is available, return an empty array.
*/
- get(domain) {
+ async get(domain) {
if (this.empty) {
return [];
}
- lazy.gCryptoHash.init(lazy.gCryptoHash.MD5);
+ lazy.gCryptoHash.init(lazy.gCryptoHash.SHA256);
let bytes = new TextEncoder().encode(domain);
lazy.gCryptoHash.update(bytes, domain.length);
let hash = lazy.gCryptoHash.finish(true);
- let rawValues = this.#map[hash] ?? [];
- if (rawValues.length) {
+ let rawValues = await this.#worker.post("getScores", [hash]);
+ if (rawValues?.length) {
let output = [];
// Transform data into a more readable format.
// [x, y] => { category: x, score: y }
@@ -2292,7 +2280,7 @@ class DomainToCategoriesMap {
* @returns {boolean}
*/
get empty() {
- return !this.#map;
+ return this.#empty;
}
/**
@@ -2303,8 +2291,11 @@ class DomainToCategoriesMap {
* An object where the key is a hashed domain and the value is an array
* containing an arbitrary number of DomainCategoryScores.
*/
- overrideMapForTests(domainToCategoriesMap) {
- this.#map = domainToCategoriesMap;
+ async overrideMapForTests(domainToCategoriesMap) {
+ let hasResults = await this.#worker.post("overrideMapForTests", [
+ domainToCategoriesMap,
+ ]);
+ this.#empty = !hasResults;
}
async #setupClientAndMap() {
@@ -2321,7 +2312,7 @@ class DomainToCategoriesMap {
await this.#clearAndPopulateMap(records);
}
- #clearClientAndMap() {
+ #clearClientAndWorker() {
if (this.#client) {
lazy.logConsole.debug("Removing Remote Settings client.");
this.#client.off("sync", this.#onSettingsSync);
@@ -2330,11 +2321,16 @@ class DomainToCategoriesMap {
this.#downloadRetries = 0;
}
- if (this.#map) {
+ if (!this.#empty) {
lazy.logConsole.debug("Clearing domain-to-categories map.");
- this.#map = null;
+ this.#empty = true;
this.#version = null;
}
+
+ if (this.#worker) {
+ this.#worker.terminate();
+ this.#worker = null;
+ }
}
/**
@@ -2394,11 +2390,11 @@ class DomainToCategoriesMap {
*
*/
async #clearAndPopulateMap(records) {
- // Set map to null so that if there are errors in the downloads, consumers
- // will be able to know whether the map has information. Once we've
- // successfully downloaded attachments and are parsing them, a non-null
- // object will be created.
- this.#map = null;
+ // Empty map so that if there are errors in the download process, callers
+ // querying the map won't use information we know is already outdated.
+ await this.#worker.post("emptyMap");
+
+ this.#empty = true;
this.#version = null;
this.#cancelAndNullifyTimer();
@@ -2408,6 +2404,7 @@ class DomainToCategoriesMap {
}
let fileContents = [];
+ let start = Cu.now();
for (let record of records) {
let result;
// Downloading attachments can fail.
@@ -2420,10 +2417,13 @@ class DomainToCategoriesMap {
}
fileContents.push(result.buffer);
}
+ ChromeUtils.addProfilerMarker(
+ "SearchSERPTelemetry.#clearAndPopulateMap",
+ start,
+ "Download attachments."
+ );
- // All attachments should have the same version number. If for whatever
- // reason they don't, we should only use the attachments with the latest
- // version.
+ // Attachments should have a version number.
this.#version = this.#retrieveLatestVersion(records);
if (!this.#version) {
@@ -2431,37 +2431,28 @@ class DomainToCategoriesMap {
return;
}
- // Queue the series of assignments.
- for (let i = 0; i < fileContents.length; ++i) {
- let buffer = fileContents[i];
- Services.tm.idleDispatchToMainThread(() => {
- let start = Cu.now();
- let json;
- try {
- json = JSON.parse(new TextDecoder().decode(buffer));
- } catch (ex) {
- // TODO: If there was an error decoding the buffer, we may want to
- // dispatch an error in telemetry or try again.
- return;
- }
- ChromeUtils.addProfilerMarker(
- "SearchSERPTelemetry.#clearAndPopulateMap",
- start,
- "Convert buffer to JSON."
- );
- if (!this.#map) {
- this.#map = {};
- }
- Object.assign(this.#map, json);
- lazy.logConsole.debug("Updated domain-to-categories map.");
- if (i == fileContents.length - 1) {
- Services.obs.notifyObservers(
- null,
- "domain-to-categories-map-update-complete"
- );
- }
- });
- }
+ Services.tm.idleDispatchToMainThread(async () => {
+ start = Cu.now();
+ let hasResults;
+ try {
+ hasResults = await this.#worker.post("populateMap", [fileContents]);
+ } catch (ex) {
+ console.error(ex);
+ }
+
+ this.#empty = !hasResults;
+
+ ChromeUtils.addProfilerMarker(
+ "SearchSERPTelemetry.#clearAndPopulateMap",
+ start,
+ "Convert contents to JSON."
+ );
+ lazy.logConsole.debug("Updated domain-to-categories map.");
+ Services.obs.notifyObservers(
+ null,
+ "domain-to-categories-map-update-complete"
+ );
+ });
}
#cancelAndNullifyTimer() {
diff --git a/browser/components/search/content/autocomplete-popup.js b/browser/components/search/content/autocomplete-popup.js
index 2c84bf8cd7..c5a33348ff 100644
--- a/browser/components/search/content/autocomplete-popup.js
+++ b/browser/components/search/content/autocomplete-popup.js
@@ -18,7 +18,7 @@
constructor() {
super();
- this.addEventListener("popupshowing", event => {
+ this.addEventListener("popupshowing", () => {
// First handle deciding if we are showing the reduced version of the
// popup containing only the preferences button. We do this if the
// glass icon has been clicked if the text field is empty.
@@ -47,7 +47,7 @@
);
});
- this.addEventListener("popuphiding", event => {
+ this.addEventListener("popuphiding", () => {
this._oneOffButtons.removeEventListener(
"SelectedOneOffButtonChanged",
this
@@ -232,7 +232,7 @@
}
}
- let uri = engine.getIconURL();
+ let uri = await engine.getIconURL();
if (uri) {
this.setAttribute("src", uri);
} else {
diff --git a/browser/components/search/content/contentSearchUI.js b/browser/components/search/content/contentSearchUI.js
index 9c7387d364..f3e54db1f3 100644
--- a/browser/components/search/content/contentSearchUI.js
+++ b/browser/components/search/content/contentSearchUI.js
@@ -557,11 +557,11 @@ this.ContentSearchUIController = (function () {
}
},
- _onMsgFocusInput(event) {
+ _onMsgFocusInput() {
this.input.focus();
},
- _onMsgBlur(event) {
+ _onMsgBlur() {
this.input.blur();
this._hideSuggestions();
},
diff --git a/browser/components/search/content/searchbar.js b/browser/components/search/content/searchbar.js
index 986a1b4d82..c872236472 100644
--- a/browser/components/search/content/searchbar.js
+++ b/browser/components/search/content/searchbar.js
@@ -53,7 +53,7 @@
this._setupEventListeners();
let searchbar = this;
this.observer = {
- observe(aEngine, aTopic, aVerb) {
+ observe(aEngine, aTopic) {
if (aTopic == "browser-search-engine-modified") {
// Make sure the engine list is refetched next time it's needed
searchbar._engines = null;
@@ -115,7 +115,7 @@
window.requestIdleCallback(() => {
Services.search
.init()
- .then(aStatus => {
+ .then(() => {
// Bail out if the binding's been destroyed
if (!this._initialized) {
return;
@@ -470,7 +470,7 @@
}
_setupEventListeners() {
- this.addEventListener("click", event => {
+ this.addEventListener("click", () => {
this._maybeSelectAll();
});
@@ -484,17 +484,17 @@
true
);
- this.addEventListener("input", event => {
+ this.addEventListener("input", () => {
this.updateGoButtonVisibility();
});
- this.addEventListener("drop", event => {
+ this.addEventListener("drop", () => {
this.updateGoButtonVisibility();
});
this.addEventListener(
"blur",
- event => {
+ () => {
// Reset the flag since we can't capture enter keyup event if the event happens
// after moving the focus.
this._needBrowserFocusAtEnterKeyUp = false;
@@ -508,7 +508,7 @@
this.addEventListener(
"focus",
- event => {
+ () => {
// Speculatively connect to the current engine's search URI (and
// suggest URI, if different) to reduce request latency
this.currentEngine.speculativeConnect({
@@ -576,7 +576,7 @@
}
_setupTextboxEventListeners() {
- this.textbox.addEventListener("input", event => {
+ this.textbox.addEventListener("input", () => {
this.textbox.popup.removeAttribute("showonlysettings");
});
@@ -826,7 +826,7 @@
}
};
- this.textbox.onkeyup = event => {
+ this.textbox.onkeyup = () => {
// Pressing Enter key while pressing Meta key, and next, even when
// releasing Enter key before releasing Meta key, the keyup event is not
// fired. Therefore, if Enter keydown is detecting, continue the post
diff --git a/browser/components/search/metrics.yaml b/browser/components/search/metrics.yaml
index 4faff64e3e..12fd44a0e2 100644
--- a/browser/components/search/metrics.yaml
+++ b/browser/components/search/metrics.yaml
@@ -202,9 +202,11 @@ serp:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1814773
- https://bugzilla.mozilla.org/show_bug.cgi?id=1816730
- https://bugzilla.mozilla.org/show_bug.cgi?id=1816735
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1849371
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1814773
- https://bugzilla.mozilla.org/show_bug.cgi?id=1816730
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1849371
data_sensitivity:
- interaction
notification_emails:
@@ -216,7 +218,13 @@ serp:
action:
description: >
The action taken on the page.
- Possible values are `clicked`, `expanded`, and `submitted`.
+ Possible values are:
+ `clicked`,
+ `clicked_accept`,
+ `clicked_reject`,
+ `clicked_more_options`,
+ `expanded`,
+ `submitted`.
type: string
target:
description: >
@@ -227,6 +235,7 @@ serp:
`ad_link`,
`ad_sidebar`,
`ad_sitelink`,
+ `cookie_banner`,
`incontent_searchbox`,
`non_ads_link`,
`refined_search_buttons`,
@@ -240,8 +249,10 @@ serp:
bugs:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1816728
- https://bugzilla.mozilla.org/show_bug.cgi?id=1816729
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1849371
data_reviews:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1816728
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1849371
data_sensitivity:
- interaction
notification_emails:
@@ -258,6 +269,7 @@ serp:
`ad_link`,
`ad_sidebar`,
`ad_sitelink`,
+ `cookie_banner`,
`refined_search_buttons`,
`shopping_tab`.
Defaults to `ad_link`.
diff --git a/browser/components/search/moz.build b/browser/components/search/moz.build
index 9f89090aa2..0289f32979 100644
--- a/browser/components/search/moz.build
+++ b/browser/components/search/moz.build
@@ -6,6 +6,7 @@
EXTRA_JS_MODULES += [
"BrowserSearchTelemetry.sys.mjs",
+ "DomainToCategoriesMap.worker.mjs",
"SearchOneOffs.sys.mjs",
"SearchSERPTelemetry.sys.mjs",
"SearchUIUtils.sys.mjs",
diff --git a/browser/components/search/pings.yaml b/browser/components/search/pings.yaml
index 727204e3fa..891d0e43ac 100644
--- a/browser/components/search/pings.yaml
+++ b/browser/components/search/pings.yaml
@@ -20,3 +20,27 @@ search-with:
- https://bugzilla.mozilla.org/show_bug.cgi?id=1870138
notification_emails:
- mkaply@mozilla.com
+
+serp-categorization:
+ description: |
+ A ping representing a series of SERP loads that have been categorized. Does
+ not contain `client_id`. Is sent after a threshold of SERP loads is reached.
+ reasons:
+ startup: |
+ Submitted as one of the startup idle tasks.
+ inactivity: |
+ Submitted after 2 minutes of uninterrupted activity, followed by inactivity.
+ threshold_reached: |
+ Submitted after 10 SERPs have been categorized.
+ include_client_id: false
+ send_if_empty: false
+ metadata:
+ include_info_sections: false
+ use_ohttp: true
+ bugs:
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1868476
+ data_reviews:
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1868476
+ notification_emails:
+ - fx-search-telemetry@mozilla.com
+ - rev-data@mozilla.com
diff --git a/browser/components/search/schema/search-telemetry-schema.json b/browser/components/search/schema/search-telemetry-schema.json
index b985ae0802..50b6e124fc 100644
--- a/browser/components/search/schema/search-telemetry-schema.json
+++ b/browser/components/search/schema/search-telemetry-schema.json
@@ -251,6 +251,15 @@
"description": "The matching regular expression."
}
},
+ "nonAdsLinkQueryParamNames": {
+ "type": "array",
+ "title": "Non-ads link query param names",
+ "description": "Query param names present in non-ads link that recover the link that will be redirected to.",
+ "items": {
+ "type": "string",
+ "string": "The query param name to examine."
+ }
+ },
"nonAdsLinkRegexps": {
"type": "array",
"title": "Non-ads link matching regular expressions",
@@ -366,7 +375,7 @@
"description": "The query to inspect all elements on the SERP."
},
"method": {
- "enum": ["data-attribute"],
+ "enum": ["dataAttribute"],
"description": "The extraction method used for the query."
},
"options": {
@@ -399,19 +408,37 @@
"queryParamKey": {
"type": "string",
"description": "The query parameter key to inspect in the href."
+ },
+ "queryParamValueIsHref": {
+ "type": "boolean",
+ "description": "Whether the query param value is expected to contain an href."
}
},
"required": ["queryParamKey"]
}
},
"required": ["selectors", "method"]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "selectors": {
+ "type": "string",
+ "description": "The query to use to inspect all elements on the SERP."
+ },
+ "method": {
+ "enum": ["textContent"],
+ "description": "The extraction method to use for the query."
+ }
+ },
+ "required": ["selectors", "method"]
}
]
+ },
+ "skipCount": {
+ "title": "Skip Count",
+ "description": "Whether to skip reporting of the count of these elements to ad_impressions. Defaults to false.",
+ "type": "boolean"
}
- },
- "skipCount": {
- "title": "Skip Count",
- "description": "Whether to skip reporting of the count of these elements to ad_impressions. Defaults to false.",
- "type": "boolean"
}
}
diff --git a/browser/components/search/test/browser/browser_426329.js b/browser/components/search/test/browser/browser_426329.js
index 093c793048..c793f6c27e 100644
--- a/browser/components/search/test/browser/browser_426329.js
+++ b/browser/components/search/test/browser/browser_426329.js
@@ -292,7 +292,7 @@ add_task(async function testClearHistory() {
function promiseObserver(topic) {
return new Promise(resolve => {
- let obs = (aSubject, aTopic, aData) => {
+ let obs = (aSubject, aTopic) => {
Services.obs.removeObserver(obs, aTopic);
resolve(aSubject);
};
diff --git a/browser/components/search/test/browser/browser_contentSearch.js b/browser/components/search/test/browser/browser_contentSearch.js
index 7b9328fb94..07753927f1 100644
--- a/browser/components/search/test/browser/browser_contentSearch.js
+++ b/browser/components/search/test/browser/browser_contentSearch.js
@@ -50,6 +50,14 @@ add_setup(async function () {
await SearchTestUtils.promiseNewSearchEngine({
url: getRootDirectory(gTestPath) + "testEngine_chromeicon.xml",
});
+
+ // Install a WebExtension based engine to allow testing passing of plain
+ // URIs (moz-extension://) to the content process.
+ await SearchTestUtils.installSearchExtension({
+ icons: {
+ 16: "favicon.ico",
+ },
+ });
});
add_task(async function GetState() {
@@ -460,7 +468,7 @@ var currentStateObj = async function (isPrivateWindowValue, hiddenEngine = "") {
),
};
for (let engine of await Services.search.getVisibleEngines()) {
- let uri = engine.getIconURL(16);
+ let uri = await engine.getIconURL(16);
state.engines.push({
name: engine.name,
iconData: await iconDataFromURI(uri),
@@ -476,7 +484,7 @@ var currentStateObj = async function (isPrivateWindowValue, hiddenEngine = "") {
};
async function constructEngineObj(engine) {
- let uriFavicon = engine.getIconURL(16);
+ let uriFavicon = await engine.getIconURL(16);
return {
name: engine.name,
iconData: await iconDataFromURI(uriFavicon),
@@ -491,7 +499,7 @@ function iconDataFromURI(uri) {
);
}
- if (!uri.startsWith("data:")) {
+ if (!uri.startsWith("data:") && !uri.startsWith("blob:")) {
plainURIIconTested = true;
return Promise.resolve(uri);
}
diff --git a/browser/components/search/test/browser/browser_contentSearchUI.js b/browser/components/search/test/browser/browser_contentSearchUI.js
index 9196b1355c..da6044f35f 100644
--- a/browser/components/search/test/browser/browser_contentSearchUI.js
+++ b/browser/components/search/test/browser/browser_contentSearchUI.js
@@ -24,17 +24,6 @@ ChromeUtils.defineESModuleGetters(this, {
"resource://gre/modules/SearchSuggestionController.sys.mjs",
});
-const pageURL = getRootDirectory(gTestPath) + TEST_PAGE_BASENAME;
-BrowserTestUtils.registerAboutPage(
- registerCleanupFunction,
- "test-about-content-search-ui",
- pageURL,
- Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT |
- Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD |
- Ci.nsIAboutModule.ALLOW_SCRIPT |
- Ci.nsIAboutModule.URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS
-);
-
requestLongerTimeout(2);
function waitForSuggestions() {
@@ -261,6 +250,19 @@ let extension1;
let extension2;
add_setup(async function () {
+ const pageURL = getRootDirectory(gTestPath) + TEST_PAGE_BASENAME;
+
+ let cleanupAboutPage;
+ await BrowserTestUtils.registerAboutPage(
+ callback => (cleanupAboutPage = callback),
+ "test-about-content-search-ui",
+ pageURL,
+ Ci.nsIAboutModule.URI_SAFE_FOR_UNTRUSTED_CONTENT |
+ Ci.nsIAboutModule.URI_MUST_LOAD_IN_CHILD |
+ Ci.nsIAboutModule.ALLOW_SCRIPT |
+ Ci.nsIAboutModule.URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS
+ );
+
let originalOnMessageSearch = ContentSearch._onMessageSearch;
let originalOnMessageManageEngines = ContentSearch._onMessageManageEngines;
@@ -290,8 +292,20 @@ add_setup(async function () {
}
registerCleanupFunction(async () => {
+ // Ensure tabs are closed before we continue on with the cleanup.
+ for (let tab of tabs) {
+ BrowserTestUtils.removeTab(tab);
+ }
+ Services.search.restoreDefaultEngines();
+
+ await TestUtils.waitForTick();
+
ContentSearch._onMessageSearch = originalOnMessageSearch;
ContentSearch._onMessageManageEngines = originalOnMessageManageEngines;
+
+ if (cleanupAboutPage) {
+ await cleanupAboutPage();
+ }
});
await promiseTab();
@@ -1096,10 +1110,6 @@ add_task(async function settings() {
await msg("reset");
});
-add_task(async function cleanup() {
- Services.search.restoreDefaultEngines();
-});
-
function checkState(
actualState,
expectedInputVal,
@@ -1147,10 +1157,10 @@ function checkState(
}
var gMsgMan;
-
+var tabs = [];
async function promiseTab() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
- registerCleanupFunction(() => BrowserTestUtils.removeTab(tab));
+ tabs.push(tab);
let loadedPromise = BrowserTestUtils.firstBrowserLoaded(window);
openTrustedLinkIn("about:test-about-content-search-ui", "current");
diff --git a/browser/components/search/test/browser/browser_contentSearchUI_default.js b/browser/components/search/test/browser/browser_contentSearchUI_default.js
index 47114fa6da..5410cfc826 100644
--- a/browser/components/search/test/browser/browser_contentSearchUI_default.js
+++ b/browser/components/search/test/browser/browser_contentSearchUI_default.js
@@ -58,11 +58,22 @@ async function ensureIcon(tab, expectedIcon) {
"Search Icon not set."
);
- Assert.equal(
- computedStyle.getPropertyValue("--newtab-search-icon"),
- `url(${icon})`,
- "Should have the expected icon"
- );
+ if (icon.startsWith("blob:")) {
+ // We don't check the data here as `browser_contentSearch.js` performs
+ // those checks.
+ Assert.ok(
+ computedStyle
+ .getPropertyValue("--newtab-search-icon")
+ .startsWith("url(blob:"),
+ "Should have a blob URL"
+ );
+ } else {
+ Assert.equal(
+ computedStyle.getPropertyValue("--newtab-search-icon"),
+ `url(${icon})`,
+ "Should have the expected icon"
+ );
+ }
}
);
}
@@ -96,7 +107,7 @@ async function runNewTabTest(isHandoff) {
waitForLoad: false,
});
- let engineIcon = defaultEngine.getIconURL(16);
+ let engineIcon = await defaultEngine.getIconURL(16);
await ensureIcon(tab, engineIcon);
if (isHandoff) {
@@ -162,7 +173,7 @@ add_task(async function test_content_search_attributes_in_private_window() {
});
let tab = win.gBrowser.selectedTab;
- let engineIcon = defaultEngine.getIconURL(16);
+ let engineIcon = await defaultEngine.getIconURL(16);
await ensureIcon(tab, engineIcon);
await ensurePlaceholder(
diff --git a/browser/components/search/test/browser/browser_defaultPrivate_nimbus.js b/browser/components/search/test/browser/browser_defaultPrivate_nimbus.js
index ce5acc91a0..41b9ce7576 100644
--- a/browser/components/search/test/browser/browser_defaultPrivate_nimbus.js
+++ b/browser/components/search/test/browser/browser_defaultPrivate_nimbus.js
@@ -31,6 +31,47 @@ const CONFIG_DEFAULT = [
},
];
+const CONFIG_V2 = [
+ {
+ recordType: "engine",
+ identifier: "basic",
+ base: {
+ name: "basic",
+ urls: {
+ search: {
+ base: "https://example.com",
+ searchTermParamName: "q",
+ },
+ },
+ },
+ variants: [{ environment: { allRegionsAndLocales: true } }],
+ },
+ {
+ recordType: "engine",
+ identifier: "private",
+ base: {
+ name: "private",
+ urls: {
+ search: {
+ base: "https://example.com",
+ searchTermParamName: "q",
+ },
+ },
+ },
+ variants: [{ environment: { allRegionsAndLocales: true } }],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "basic",
+ globalDefaultPrivate: "private",
+ specificDefaults: [],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+];
+
SearchTestUtils.init(this);
add_setup(async () => {
@@ -50,7 +91,9 @@ add_setup(async () => {
});
SearchTestUtils.useMockIdleService();
- await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_DEFAULT);
+ await SearchTestUtils.updateRemoteSettingsConfig(
+ SearchUtils.newSearchConfigEnabled ? CONFIG_V2 : CONFIG_DEFAULT
+ );
registerCleanupFunction(async () => {
let settingsWritten = SearchTestUtils.promiseSearchNotification(
diff --git a/browser/components/search/test/browser/browser_google_behavior.js b/browser/components/search/test/browser/browser_google_behavior.js
index cce3b3ce1f..ccc84e8bba 100644
--- a/browser/components/search/test/browser/browser_google_behavior.js
+++ b/browser/components/search/test/browser/browser_google_behavior.js
@@ -55,7 +55,7 @@ if (code) {
}
function promiseContentSearchReady(browser) {
- return SpecialPowers.spawn(browser, [], async function (args) {
+ return SpecialPowers.spawn(browser, [], async function () {
return new Promise(resolve => {
SpecialPowers.pushPrefEnv({
set: [
@@ -175,7 +175,7 @@ async function testSearchEngine(engineDetails) {
await promiseContentSearchReady(browser);
},
async run(tab) {
- await SpecialPowers.spawn(tab.linkedBrowser, [], async function (args) {
+ await SpecialPowers.spawn(tab.linkedBrowser, [], async function () {
let input = content.document.querySelector("input[id*=search-]");
input.focus();
input.value = "foo";
diff --git a/browser/components/search/test/browser/browser_oneOffContextMenu_setDefault.js b/browser/components/search/test/browser/browser_oneOffContextMenu_setDefault.js
index 9f05e948ed..174a86ba3f 100644
--- a/browser/components/search/test/browser/browser_oneOffContextMenu_setDefault.js
+++ b/browser/components/search/test/browser/browser_oneOffContextMenu_setDefault.js
@@ -71,10 +71,10 @@ async function testSearchBarChangeEngine(win, testPrivate, isPrivateWindow) {
if (testPrivate == isPrivateWindow) {
let expectedName = originalEngine.name;
- let expectedImage = originalEngine.getIconURL();
+ let expectedImage = await originalEngine.getIconURL();
if (isPrivateWindow) {
expectedName = originalPrivateEngine.name;
- expectedImage = originalPrivateEngine.getIconURL();
+ expectedImage = await originalPrivateEngine.getIconURL();
}
Assert.equal(
diff --git a/browser/components/search/test/browser/browser_rich_suggestions.js b/browser/components/search/test/browser/browser_rich_suggestions.js
index 98adedcee5..3daefc12d9 100644
--- a/browser/components/search/test/browser/browser_rich_suggestions.js
+++ b/browser/components/search/test/browser/browser_rich_suggestions.js
@@ -17,6 +17,58 @@ const CONFIG_DEFAULT = [
},
];
+const CONFIG_V2 = [
+ {
+ recordType: "engine",
+ identifier: "basic",
+ base: {
+ name: "basic",
+ urls: {
+ search: {
+ base: "https://example.com",
+ searchTermParamName: "q",
+ },
+ trending: {
+ base: "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs",
+ method: "GET",
+ params: [
+ {
+ name: "richsuggestions",
+ value: "true",
+ },
+ ],
+ },
+ suggestions: {
+ base: "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs",
+ method: "GET",
+ params: [
+ {
+ name: "richsuggestions",
+ value: "true",
+ },
+ ],
+ searchTermParamName: "query",
+ },
+ },
+ aliases: ["basic"],
+ },
+ variants: [
+ {
+ environment: { allRegionsAndLocales: true },
+ },
+ ],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "basic",
+ specificDefaults: [],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+];
+
SearchTestUtils.init(this);
add_setup(async () => {
@@ -37,7 +89,9 @@ add_setup(async () => {
});
SearchTestUtils.useMockIdleService();
- await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_DEFAULT);
+ await SearchTestUtils.updateRemoteSettingsConfig(
+ SearchUtils.newSearchConfigEnabled ? CONFIG_V2 : CONFIG_DEFAULT
+ );
registerCleanupFunction(async () => {
let settingsWritten = SearchTestUtils.promiseSearchNotification(
diff --git a/browser/components/search/test/browser/browser_searchEngine_behaviors.js b/browser/components/search/test/browser/browser_searchEngine_behaviors.js
index 15a30583bf..295e069857 100644
--- a/browser/components/search/test/browser/browser_searchEngine_behaviors.js
+++ b/browser/components/search/test/browser/browser_searchEngine_behaviors.js
@@ -22,9 +22,13 @@ const SEARCH_ENGINE_DETAILS = [
},
{
alias: "b",
- baseURL: `https://www.bing.com/search?{code}pc=${
- SearchUtils.MODIFIED_APP_CHANNEL == "esr" ? "MOZR" : "MOZI"
- }&q=foo`,
+ baseURL: SearchUtils.newSearchConfigEnabled
+ ? `https://www.bing.com/search?pc=${
+ SearchUtils.MODIFIED_APP_CHANNEL == "esr" ? "MOZR" : "MOZI"
+ }&{code}q=foo`
+ : `https://www.bing.com/search?{code}pc=${
+ SearchUtils.MODIFIED_APP_CHANNEL == "esr" ? "MOZR" : "MOZI"
+ }&q=foo`,
codes: {
context: "form=MOZCON&",
keyword: "form=MOZLBR&",
@@ -74,7 +78,7 @@ const SEARCH_ENGINE_DETAILS = [
];
function promiseContentSearchReady(browser) {
- return SpecialPowers.spawn(browser, [], async function (args) {
+ return SpecialPowers.spawn(browser, [], async function () {
SpecialPowers.pushPrefEnv({
set: [
[
diff --git a/browser/components/search/test/browser/browser_searchbar_keyboard_navigation.js b/browser/components/search/test/browser/browser_searchbar_keyboard_navigation.js
index ee292db1b5..7e2be41993 100644
--- a/browser/components/search/test/browser/browser_searchbar_keyboard_navigation.js
+++ b/browser/components/search/test/browser/browser_searchbar_keyboard_navigation.js
@@ -29,18 +29,10 @@ async function checkHeader(engine) {
// The header can be updated after getting the engine, so we may have to
// wait for it.
let header = searchPopup.searchbarEngineName;
- if (!header.getAttribute("value").includes(engine.name)) {
- await new Promise(resolve => {
- let observer = new MutationObserver(() => {
- observer.disconnect();
- resolve();
- });
- observer.observe(searchPopup.searchbarEngineName, {
- attributes: true,
- attributeFilter: ["value"],
- });
- });
- }
+ await TestUtils.waitForCondition(
+ () => header.getAttribute("value").includes(engine.name),
+ "Should have the correct engine name displayed in the header"
+ );
Assert.ok(
header.getAttribute("value").includes(engine.name),
"Should have the correct engine name displayed in the header"
diff --git a/browser/components/search/test/browser/browser_searchbar_openpopup.js b/browser/components/search/test/browser/browser_searchbar_openpopup.js
index 2653e65e8d..32c6995f69 100644
--- a/browser/components/search/test/browser/browser_searchbar_openpopup.js
+++ b/browser/components/search/test/browser/browser_searchbar_openpopup.js
@@ -126,7 +126,7 @@ add_task(async function open_empty() {
let image = searchPopup.querySelector(".searchbar-engine-image");
Assert.equal(
image.src,
- engine.getIconURL(16),
+ await engine.getIconURL(16),
"Should have the correct icon"
);
@@ -267,6 +267,13 @@ add_no_popup_task(async function right_click_doesnt_open_popup() {
context_click(textbox);
let contextPopup = await promise;
+ // Assert that the context menu click inside the popup does nothing. If it
+ // opens something, assert_no_popup_task will make us fail. On macOS this
+ // doesn't work because of native context menus.
+ if (!navigator.platform.includes("Mac")) {
+ context_click(contextPopup);
+ }
+
is(
Services.focus.focusedElement,
textbox,
diff --git a/browser/components/search/test/browser/browser_trending_suggestions.js b/browser/components/search/test/browser/browser_trending_suggestions.js
index 74d0b944d5..efe54d2da5 100644
--- a/browser/components/search/test/browser/browser_trending_suggestions.js
+++ b/browser/components/search/test/browser/browser_trending_suggestions.js
@@ -22,6 +22,65 @@ const CONFIG_DEFAULT = [
},
];
+const CONFIG_V2 = [
+ {
+ recordType: "engine",
+ identifier: "basic",
+ base: {
+ name: "basic",
+ urls: {
+ search: {
+ base: "https://example.com",
+ searchTermParamName: "q",
+ },
+ trending: {
+ base: "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs",
+ method: "GET",
+ },
+ },
+ aliases: ["basic"],
+ },
+ variants: [
+ {
+ environment: { allRegionsAndLocales: true },
+ },
+ ],
+ },
+ {
+ recordType: "engine",
+ identifier: "private",
+ base: {
+ name: "private",
+ urls: {
+ search: {
+ base: "https://example.com",
+ searchTermParamName: "q",
+ },
+ suggestions: {
+ base: "https://example.com",
+ method: "GET",
+ searchTermParamName: "search",
+ },
+ },
+ aliases: ["private"],
+ },
+ variants: [
+ {
+ environment: { allRegionsAndLocales: true },
+ },
+ ],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "basic",
+ specificDefaults: [],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+];
+
SearchTestUtils.init(this);
add_setup(async () => {
@@ -38,7 +97,9 @@ add_setup(async () => {
});
SearchTestUtils.useMockIdleService();
- await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_DEFAULT);
+ await SearchTestUtils.updateRemoteSettingsConfig(
+ SearchUtils.newSearchConfigEnabled ? CONFIG_V2 : CONFIG_DEFAULT
+ );
Services.telemetry.clearScalars();
registerCleanupFunction(async () => {
diff --git a/browser/components/search/test/browser/contentSearchUI.html b/browser/components/search/test/browser/contentSearchUI.html
index 09abe822b2..7fa41b9d86 100644
--- a/browser/components/search/test/browser/contentSearchUI.html
+++ b/browser/components/search/test/browser/contentSearchUI.html
@@ -13,6 +13,9 @@
</head>
<body>
+<!-- Dummy Button is used to ensure pressing Shift+Tab on <input> will make the new focus
+ - remains in the same document, rather than the Chrome UI. -->
+<button>Dummy Button</button>
<div id="container"><input type="text" value=""/></div>
<script src="chrome://mochitests/content/browser/browser/components/search/test/browser/contentSearchUI.js">
diff --git a/browser/components/search/test/browser/head.js b/browser/components/search/test/browser/head.js
index 7a45a9f4f5..6051ef1caa 100644
--- a/browser/components/search/test/browser/head.js
+++ b/browser/components/search/test/browser/head.js
@@ -123,7 +123,7 @@ async function searchInSearchbar(inputText, win = window) {
return sb.textbox.popup;
}
-function clearSearchbarHistory(win = window) {
+function clearSearchbarHistory() {
info("cleanup the search history");
return FormHistory.update({ op: "remove", fieldname: "searchbar-history" });
}
diff --git a/browser/components/search/test/browser/telemetry/browser.toml b/browser/components/search/test/browser/telemetry/browser.toml
index 49d8f256aa..660fc4eae2 100644
--- a/browser/components/search/test/browser/telemetry/browser.toml
+++ b/browser/components/search/test/browser/telemetry/browser.toml
@@ -4,10 +4,7 @@ support-files = ["head.js", "head-spa.js"]
prefs = ["browser.search.log=true"]
["browser_search_glean_serp_event_telemetry_categorization_enabled_by_nimbus_variable.js"]
-support-files = [
- "domain_category_mappings.json",
- "searchTelemetryDomainCategorizationReporting.html",
-]
+support-files = ["searchTelemetryDomainCategorizationReporting.html"]
["browser_search_glean_serp_event_telemetry_enabled_by_nimbus_variable.js"]
support-files = ["searchTelemetryAd.html"]
@@ -31,9 +28,16 @@ support-files = [
"searchTelemetryAd_components_carousel_outer_container.html",
"searchTelemetryAd_components_text.html",
"searchTelemetryAd_components_visibility.html",
+ "searchTelemetryAd_components_cookie_banner.html",
"serp.css",
]
+["browser_search_telemetry_adImpression_component_skipCount_children.js"]
+support-files = ["searchTelemetryAd_searchbox_with_content.html", "serp.css"]
+
+["browser_search_telemetry_adImpression_component_skipCount_parent.js"]
+support-files = ["searchTelemetryAd_searchbox_with_content.html", "serp.css"]
+
["browser_search_telemetry_categorization_timing.js"]
["browser_search_telemetry_content.js"]
@@ -42,7 +46,6 @@ support-files = [
support-files = ["searchTelemetryDomainCategorizationReporting.html"]
["browser_search_telemetry_domain_categorization_download_timer.js"]
-support-files = ["domain_category_mappings.json"]
["browser_search_telemetry_domain_categorization_extraction.js"]
support-files = ["searchTelemetryDomainExtraction.html"]
@@ -85,6 +88,15 @@ support-files = [
"serp.css",
]
+["browser_search_telemetry_engagement_eventListeners_children.js"]
+support-files = ["searchTelemetryAd_searchbox_with_content.html", "serp.css"]
+
+["browser_search_telemetry_engagement_eventListeners_parent.js"]
+support-files = ["searchTelemetryAd_searchbox_with_content.html", "serp.css"]
+
+["browser_search_telemetry_engagement_ignoreLinkRegexps.js"]
+support-files = ["searchTelemetryAd_searchbox_with_content.html", "serp.css"]
+
["browser_search_telemetry_engagement_multiple_tabs.js"]
support-files = [
"searchTelemetryAd_searchbox_with_content.html",
@@ -98,6 +110,14 @@ support-files = [
"serp.css",
]
+["browser_search_telemetry_engagement_nonAdsLinkQueryParamNames.js"]
+support-files = [
+ "searchTelemetryAd_searchbox_with_redirecting_links.html",
+ "searchTelemetryAd_shopping.html",
+ "searchTelemetry_redirect_with_js.html",
+ "serp.css",
+]
+
["browser_search_telemetry_engagement_query_params.js"]
support-files = [
"searchTelemetryAd_components_query_parameters.html",
diff --git a/browser/components/search/test/browser/telemetry/browser_search_glean_serp_event_telemetry_categorization_enabled_by_nimbus_variable.js b/browser/components/search/test/browser/telemetry/browser_search_glean_serp_event_telemetry_categorization_enabled_by_nimbus_variable.js
index ed71a7c5ed..e73a9601d4 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_glean_serp_event_telemetry_categorization_enabled_by_nimbus_variable.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_glean_serp_event_telemetry_categorization_enabled_by_nimbus_variable.js
@@ -38,7 +38,7 @@ const TEST_PROVIDER_INFO = [
ads: [
{
selectors: "[data-ad-domain]",
- method: "data-attribute",
+ method: "dataAttribute",
options: {
dataAttributeKey: "adDomain",
},
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component.js
index 8049406d40..5a09353ed6 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component.js
@@ -78,6 +78,15 @@ const TEST_PROVIDER_INFO = [
type: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
default: true,
},
+ {
+ type: SearchSERPTelemetryUtils.COMPONENTS.COOKIE_BANNER,
+ included: {
+ parent: {
+ selector: "#banner",
+ },
+ },
+ topDown: true,
+ },
],
},
];
@@ -500,3 +509,35 @@ add_task(async function test_impressions_without_ads() {
BrowserTestUtils.removeTab(tab);
});
+
+add_task(async function test_ad_impressions_with_cookie_banner() {
+ resetTelemetry();
+ let url = getSERPUrl("searchTelemetryAd_components_cookie_banner.html");
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
+
+ await waitForPageWithAdImpressions();
+
+ assertSERPTelemetry([
+ {
+ impression: {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "false",
+ },
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.COOKIE_BANNER,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ ]);
+
+ BrowserTestUtils.removeTab(tab);
+});
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component_skipCount_children.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component_skipCount_children.js
new file mode 100644
index 0000000000..65cd612a49
--- /dev/null
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component_skipCount_children.js
@@ -0,0 +1,149 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests skipCount property on elements in the children.
+ */
+
+const TEST_PROVIDER_INFO = [
+ {
+ telemetryId: "example",
+ searchPageRegexp:
+ /^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetryAd/,
+ queryParamNames: ["s"],
+ codeParamName: "abc",
+ taggedCodes: ["ff"],
+ adServerAttributes: ["mozAttr"],
+ extraAdServersRegexps: [/^https:\/\/example\.com\/ad/],
+ },
+];
+
+const IMPRESSION = {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "false",
+};
+
+const SERP_URL = getSERPUrl("searchTelemetryAd_searchbox_with_content.html");
+
+async function replaceIncludedProperty(included) {
+ let components = [
+ {
+ type: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ included,
+ topDown: true,
+ },
+ ];
+ TEST_PROVIDER_INFO[0].components = components;
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+}
+
+add_setup(async function () {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+ // Enable local telemetry recording for the duration of the tests.
+ let oldCanRecord = Services.telemetry.canRecordExtended;
+ Services.telemetry.canRecordExtended = true;
+
+ registerCleanupFunction(async () => {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests();
+ Services.telemetry.canRecordExtended = oldCanRecord;
+ resetTelemetry();
+ });
+});
+
+// For older clients, skipCount won't be available.
+add_task(async function test_skip_count_not_provided() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ },
+ children: [
+ {
+ selector: "a",
+ },
+ ],
+ });
+
+ let { cleanup } = await openSerpInNewTab(SERP_URL);
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_skip_count_is_false() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ },
+ children: [
+ {
+ selector: "a",
+ skipCount: false,
+ },
+ ],
+ });
+
+ let { cleanup } = await openSerpInNewTab(SERP_URL);
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_skip_count_is_true() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ },
+ children: [
+ {
+ selector: "a",
+ skipCount: true,
+ },
+ ],
+ });
+
+ let { cleanup } = await openSerpInNewTab(SERP_URL);
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ adImpressions: [],
+ },
+ ]);
+
+ await cleanup();
+});
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component_skipCount_parent.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component_skipCount_parent.js
new file mode 100644
index 0000000000..8471215840
--- /dev/null
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_adImpression_component_skipCount_parent.js
@@ -0,0 +1,134 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests skipCount property on parent elements.
+ */
+
+const TEST_PROVIDER_INFO = [
+ {
+ telemetryId: "example",
+ searchPageRegexp:
+ /^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetryAd/,
+ queryParamNames: ["s"],
+ codeParamName: "abc",
+ taggedCodes: ["ff"],
+ adServerAttributes: ["mozAttr"],
+ extraAdServersRegexps: [/^https:\/\/example\.com\/ad/],
+ },
+];
+
+const IMPRESSION = {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "false",
+};
+
+const SERP_URL = getSERPUrl("searchTelemetryAd_searchbox_with_content.html");
+
+async function replaceIncludedProperty(included) {
+ let components = [
+ {
+ type: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ included,
+ topDown: true,
+ },
+ ];
+ TEST_PROVIDER_INFO[0].components = components;
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+}
+
+add_setup(async function () {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+ // Enable local telemetry recording for the duration of the tests.
+ let oldCanRecord = Services.telemetry.canRecordExtended;
+ Services.telemetry.canRecordExtended = true;
+
+ registerCleanupFunction(async () => {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests();
+ Services.telemetry.canRecordExtended = oldCanRecord;
+ resetTelemetry();
+ });
+});
+
+// For older clients, skipCount won't be available.
+add_task(async function test_skip_count_not_provided() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ },
+ });
+
+ let { cleanup } = await openSerpInNewTab(SERP_URL);
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_skip_count_is_false() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: false,
+ },
+ });
+
+ let { cleanup } = await openSerpInNewTab(SERP_URL);
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_skip_count_is_true() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: true,
+ },
+ });
+
+ let { cleanup } = await openSerpInNewTab(SERP_URL);
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ adImpressions: [],
+ },
+ ]);
+
+ await cleanup();
+});
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_ad_values.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_ad_values.js
index ce18f64e9f..246caf6f47 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_ad_values.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_ad_values.js
@@ -30,7 +30,7 @@ const TEST_PROVIDER_INFO = [
ads: [
{
selectors: "[data-ad-domain]",
- method: "data-attribute",
+ method: "dataAttribute",
options: {
dataAttributeKey: "adDomain",
},
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_download_timer.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_download_timer.js
index d01141d826..b8dd85da97 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_download_timer.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_download_timer.js
@@ -33,7 +33,7 @@ const TEST_PROVIDER_INFO = [
ads: [
{
selectors: "[data-ad-domain]",
- method: "data-attribute",
+ method: "dataAttribute",
options: {
dataAttributeKey: "adDomain",
},
@@ -119,6 +119,7 @@ add_task(async function test_download_after_failure() {
id: "example_id",
version: 1,
filename: "domain_category_mappings.json",
+ mapping: CONVERTED_ATTACHMENT_VALUES,
});
await db.create(record);
await db.importChanges({}, Date.now());
@@ -173,6 +174,7 @@ add_task(async function test_download_after_multiple_failures() {
id: "example_id",
version: 1,
filename: "domain_category_mappings.json",
+ mapping: CONVERTED_ATTACHMENT_VALUES,
});
await db.create(record);
await db.importChanges({}, Date.now());
@@ -220,6 +222,7 @@ add_task(async function test_cancel_download_timer() {
id: "example_id",
version: 1,
filename: "domain_category_mappings.json",
+ mapping: CONVERTED_ATTACHMENT_VALUES,
});
await db.create(record);
await db.importChanges({}, Date.now());
@@ -277,6 +280,7 @@ add_task(async function test_download_adjust() {
id: "example_id",
version: 1,
filename: "domain_category_mappings.json",
+ mapping: CONVERTED_ATTACHMENT_VALUES,
});
await db.create(record);
await db.importChanges({}, Date.now());
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_extraction.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_extraction.js
index 03ddb75481..e653be6c48 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_extraction.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_extraction.js
@@ -11,6 +11,10 @@ ChromeUtils.defineESModuleGetters(this, {
SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
});
+// The search provider's name is provided to ensure we can extract domains
+// from relative links, e.g. /url?=https://www.foobar.com
+const SEARCH_PROVIDER_NAME = "example";
+
const TESTS = [
{
title: "Extract domain from href (absolute URL) - one link.",
@@ -35,7 +39,7 @@ const TESTS = [
expectedDomains: ["foo.com", "bar.com", "baz.com", "qux.com"],
},
{
- title: "Extract domain from href (relative URL).",
+ title: "Extract domain from href (relative URL / URL matching provider)",
extractorInfos: [
{
selectors:
@@ -43,38 +47,33 @@ const TESTS = [
method: "href",
},
],
- expectedDomains: ["example.org"],
+ expectedDomains: [],
},
{
title: "Extract domain from data attribute - one link.",
extractorInfos: [
{
selectors: "#test4 [data-dtld]",
- method: "data-attribute",
+ method: "dataAttribute",
options: {
dataAttributeKey: "dtld",
},
},
],
- expectedDomains: ["www.abc.com"],
+ expectedDomains: ["abc.com"],
},
{
title: "Extract domain from data attribute - multiple links.",
extractorInfos: [
{
selectors: "#test5 [data-dtld]",
- method: "data-attribute",
+ method: "dataAttribute",
options: {
dataAttributeKey: "dtld",
},
},
],
- expectedDomains: [
- "www.foo.com",
- "www.bar.com",
- "www.baz.com",
- "www.qux.com",
- ],
+ expectedDomains: ["foo.com", "bar.com", "baz.com", "qux.com"],
},
{
title: "Extract domain from an href's query param value.",
@@ -88,7 +87,7 @@ const TESTS = [
},
},
],
- expectedDomains: ["def.com"],
+ expectedDomains: ["def.com", "bar.com", "baz.com"],
},
{
title:
@@ -144,7 +143,7 @@ const TESTS = [
},
{
selectors: "#test10 [data-dtld]",
- method: "data-attribute",
+ method: "dataAttribute",
options: {
dataAttributeKey: "dtld",
},
@@ -158,7 +157,7 @@ const TESTS = [
},
},
],
- expectedDomains: ["foobar.com", "www.abc.com", "def.com"],
+ expectedDomains: ["foobar.com", "abc.com", "def.com"],
},
{
title: "No elements match the selectors.",
@@ -176,7 +175,7 @@ const TESTS = [
extractorInfos: [
{
selectors: "#test12 [data-dtld]",
- method: "data-attribute",
+ method: "dataAttribute",
options: {
dataAttributeKey: "dtld",
},
@@ -208,6 +207,161 @@ const TESTS = [
],
expectedDomains: [],
},
+ {
+ title: "Second-level domains to a top-level domain.",
+ extractorInfos: [
+ {
+ selectors: "#test15 a",
+ method: "href",
+ },
+ ],
+ expectedDomains: [
+ "foobar.gc.ca",
+ "foobar.gov.uk",
+ "foobar.co.uk",
+ "foobar.co.il",
+ ],
+ },
+ {
+ title: "URL with a long subdomain.",
+ extractorInfos: [
+ {
+ selectors: "#test16 a",
+ method: "href",
+ },
+ ],
+ expectedDomains: ["foobar.com"],
+ },
+ {
+ title: "URLs with the same top level domain.",
+ extractorInfos: [
+ {
+ selectors: "#test17 a",
+ method: "href",
+ },
+ ],
+ expectedDomains: ["foobar.com"],
+ },
+ {
+ title: "Maximum domains extracted from a single selector.",
+ extractorInfos: [
+ {
+ selectors: "#test18 a",
+ method: "href",
+ },
+ ],
+ expectedDomains: [
+ "foobar1.com",
+ "foobar2.com",
+ "foobar3.com",
+ "foobar4.com",
+ "foobar5.com",
+ "foobar6.com",
+ "foobar7.com",
+ "foobar8.com",
+ "foobar9.com",
+ "foobar10.com",
+ ],
+ },
+ {
+ // This is just in case we use multiple selectors meant for separate SERPs
+ // and the provider switches to re-using their markup.
+ title: "Maximum domains extracted from multiple matching selectors.",
+ extractorInfos: [
+ {
+ selectors: "#test19 a.foo",
+ method: "href",
+ },
+ {
+ selectors: "#test19 a.baz",
+ method: "href",
+ },
+ ],
+ expectedDomains: [
+ "foobar1.com",
+ "foobar2.com",
+ "foobar3.com",
+ "foobar4.com",
+ "foobar5.com",
+ "foobar6.com",
+ "foobar7.com",
+ "foobar8.com",
+ "foobar9.com",
+ // This is from the second selector.
+ "foobaz1.com",
+ ],
+ },
+ {
+ title: "Bing organic result.",
+ extractorInfos: [
+ {
+ selectors: "#test20 #b_results .b_algo .b_attribution cite",
+ method: "textContent",
+ },
+ ],
+ expectedDomains: ["organic.com"],
+ },
+ {
+ title: "Bing sponsored result.",
+ extractorInfos: [
+ {
+ selectors: "#test21 #b_results .b_ad .b_attribution cite",
+ method: "textContent",
+ },
+ ],
+ expectedDomains: ["sponsored.com"],
+ },
+ {
+ title: "Bing carousel result.",
+ extractorInfos: [
+ {
+ selectors: "#test22 .adsMvCarousel cite",
+ method: "textContent",
+ },
+ ],
+ expectedDomains: ["fixedupfromthecarousel.com"],
+ },
+ {
+ title: "Bing sidebar result.",
+ extractorInfos: [
+ {
+ selectors: "#test23 aside cite",
+ method: "textContent",
+ },
+ ],
+ expectedDomains: ["fixedupfromthesidebar.com"],
+ },
+ {
+ title: "Extraction threshold respected using text content method.",
+ extractorInfos: [
+ {
+ selectors: "#test24 #b_results .b_ad .b_attribution cite",
+ method: "textContent",
+ },
+ ],
+ expectedDomains: [
+ "sponsored1.com",
+ "sponsored2.com",
+ "sponsored3.com",
+ "sponsored4.com",
+ "sponsored5.com",
+ "sponsored6.com",
+ "sponsored7.com",
+ "sponsored8.com",
+ "sponsored9.com",
+ "sponsored10.com",
+ ],
+ },
+ {
+ title: "Bing organic result with no protocol.",
+ extractorInfos: [
+ {
+ selectors: "#test25 #b_results .b_algo .b_attribution cite",
+ method: "textContent",
+ },
+ ],
+ expectedDomains: ["organic.com"],
+ },
];
add_setup(async function () {
@@ -240,14 +394,15 @@ add_task(async function test_domain_extraction_heuristics() {
let expectedDomains = new Set(currentTest.expectedDomains);
let actualDomains = await SpecialPowers.spawn(
gBrowser.selectedBrowser,
- [currentTest.extractorInfos],
- extractorInfos => {
+ [currentTest.extractorInfos, SEARCH_PROVIDER_NAME],
+ (extractorInfos, searchProviderName) => {
const { domainExtractor } = ChromeUtils.importESModule(
"resource:///actors/SearchSERPTelemetryChild.sys.mjs"
);
return domainExtractor.extractDomainsFromDocument(
content.document,
- extractorInfos
+ extractorInfos,
+ searchProviderName
);
}
);
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_region.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_region.js
index f328bb4f79..4c47b0b14a 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_region.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_region.js
@@ -30,7 +30,7 @@ const TEST_PROVIDER_INFO = [
ads: [
{
selectors: "[data-ad-domain]",
- method: "data-attribute",
+ method: "dataAttribute",
options: {
dataAttributeKey: "adDomain",
},
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting.js
index b7edb8763f..973f17b760 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting.js
@@ -30,7 +30,7 @@ const TEST_PROVIDER_INFO = [
ads: [
{
selectors: "[data-ad-domain]",
- method: "data-attribute",
+ method: "dataAttribute",
options: {
dataAttributeKey: "adDomain",
},
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting_timer.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting_timer.js
index cfb8590960..9d3ac2c931 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting_timer.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting_timer.js
@@ -31,7 +31,7 @@ const TEST_PROVIDER_INFO = [
ads: [
{
selectors: "[data-ad-domain]",
- method: "data-attribute",
+ method: "dataAttribute",
options: {
dataAttributeKey: "adDomain",
},
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting_timer_wakeup.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting_timer_wakeup.js
index cb95164221..c73e224eae 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting_timer_wakeup.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_domain_categorization_reporting_timer_wakeup.js
@@ -32,7 +32,7 @@ const TEST_PROVIDER_INFO = [
ads: [
{
selectors: "[data-ad-domain]",
- method: "data-attribute",
+ method: "dataAttribute",
options: {
dataAttributeKey: "adDomain",
},
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_content.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_content.js
index a7ea62ebd5..f94e6b0bd8 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_content.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_content.js
@@ -138,8 +138,8 @@ add_task(async function test_click_tab() {
{
impression: {
provider: "example",
- tagged: "false",
- partner_code: "",
+ tagged: "true",
+ partner_code: "ff",
source: "unknown",
is_shopping_page: "false",
is_private: "false",
@@ -217,8 +217,8 @@ add_task(async function test_click_shopping() {
{
impression: {
provider: "example",
- tagged: "false",
- partner_code: "",
+ tagged: "true",
+ partner_code: "ff",
source: "unknown",
is_shopping_page: "true",
is_private: "false",
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_eventListeners_children.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_eventListeners_children.js
new file mode 100644
index 0000000000..4f5aaf9378
--- /dev/null
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_eventListeners_children.js
@@ -0,0 +1,480 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests eventListeners property on children elements in topDown searches.
+ */
+
+const TEST_PROVIDER_INFO = [
+ {
+ telemetryId: "example",
+ searchPageRegexp:
+ /^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetryAd/,
+ queryParamNames: ["s"],
+ codeParamName: "abc",
+ taggedCodes: ["ff"],
+ adServerAttributes: ["mozAttr"],
+ extraAdServersRegexps: [/^https:\/\/example\.com\/ad/],
+ },
+];
+
+const IMPRESSION = {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "false",
+};
+
+const SELECTOR = ".arrow";
+const SERP_URL = getSERPUrl("searchTelemetryAd_searchbox_with_content.html");
+
+async function replaceIncludedProperty(included) {
+ TEST_PROVIDER_INFO[0].components = [
+ {
+ type: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ included,
+ topDown: true,
+ },
+ ];
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+}
+
+add_setup(async function () {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+ // Enable local telemetry recording for the duration of the tests.
+ let oldCanRecord = Services.telemetry.canRecordExtended;
+ Services.telemetry.canRecordExtended = true;
+
+ registerCleanupFunction(async () => {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests();
+ Services.telemetry.canRecordExtended = oldCanRecord;
+ resetTelemetry();
+ });
+});
+
+add_task(async function test_listeners_not_provided() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: true,
+ },
+ children: [
+ {
+ selector: " .arrow",
+ skipCount: true,
+ },
+ ],
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ expectEngagement: false,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_no_listeners() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: true,
+ },
+ children: [
+ {
+ selector: " .arrow",
+ skipCount: true,
+ eventListeners: [],
+ },
+ ],
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ expectEngagement: false,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_click_listener() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: true,
+ },
+ children: [
+ {
+ selector: " .arrow",
+ skipCount: true,
+ eventListeners: [{ eventType: "click" }],
+ },
+ ],
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: ".arrow-next",
+ tab,
+ });
+ await synthesizePageAction({
+ selector: ".arrow-prev",
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+/**
+ * The click event is by far our most used event so by default, we translate
+ * a "click" eventType to a "clicked" action. If no action is provided for
+ * another type of event, nothing should be reported.
+ */
+add_task(async function test_event_with_no_default_action() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: true,
+ },
+ children: [
+ {
+ selector: " .arrow",
+ skipCount: true,
+ eventListeners: [{ eventType: "mousedown" }],
+ },
+ ],
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ expectEngagement: false,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_event_no_default_action_with_override() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: true,
+ },
+ children: [
+ {
+ selector: " .arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "mousedown",
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
+ },
+ ],
+ },
+ ],
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_target_override() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: true,
+ },
+ children: [
+ {
+ selector: " .arrow",
+ skipCount: true,
+ eventListeners: [{ eventType: "click", target: "custom_target" }],
+ },
+ ],
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
+ target: "custom_target",
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_target_and_action_override() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: true,
+ },
+ children: [
+ {
+ selector: " .arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "click",
+ action: "custom_action",
+ target: "custom_target",
+ },
+ ],
+ },
+ ],
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: "custom_action",
+ target: "custom_target",
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_multiple_listeners() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: true,
+ },
+ children: [
+ {
+ selector: " .arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "click",
+ },
+ {
+ eventType: "mouseover",
+ action: "mouseovered",
+ },
+ ],
+ },
+ ],
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ tab,
+ });
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ tab,
+ event: {
+ type: "mouseover",
+ },
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: "clicked",
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ {
+ action: "mouseovered",
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_condition() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: true,
+ },
+ children: [
+ {
+ selector: ".arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "keydown",
+ action: "keydowned",
+ condition: "keydownEnter",
+ },
+ ],
+ },
+ ],
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await SpecialPowers.spawn(tab.linkedBrowser, [SELECTOR], async function (s) {
+ let el = content.document.querySelector(s);
+ el.focus();
+ });
+
+ await EventUtils.synthesizeKey("A");
+ /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */
+ await new Promise(resolve => setTimeout(resolve, 10));
+
+ let pageActionPromise = waitForPageWithAction();
+ await EventUtils.synthesizeKey("KEY_Enter");
+ await pageActionPromise;
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: "keydowned",
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_condition_invalid() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons",
+ skipCount: true,
+ },
+ children: [
+ {
+ selector: ".arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "keydown",
+ action: "keydowned",
+ condition: "noConditionExistsWithThisName",
+ },
+ ],
+ },
+ ],
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await SpecialPowers.spawn(tab.linkedBrowser, [SELECTOR], async function (s) {
+ let el = content.document.querySelector(s);
+ el.focus();
+ });
+
+ await EventUtils.synthesizeKey("A");
+ /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */
+ await new Promise(resolve => setTimeout(resolve, 10));
+
+ await EventUtils.synthesizeKey("KEY_Enter");
+ /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */
+ await new Promise(resolve => setTimeout(resolve, 10));
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_eventListeners_parent.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_eventListeners_parent.js
new file mode 100644
index 0000000000..4e3c635b4c
--- /dev/null
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_eventListeners_parent.js
@@ -0,0 +1,434 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests eventListeners property on parent elements in topDown searches.
+ */
+
+const TEST_PROVIDER_INFO = [
+ {
+ telemetryId: "example",
+ searchPageRegexp:
+ /^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetryAd/,
+ queryParamNames: ["s"],
+ codeParamName: "abc",
+ taggedCodes: ["ff"],
+ adServerAttributes: ["mozAttr"],
+ extraAdServersRegexps: [/^https:\/\/example\.com\/ad/],
+ },
+];
+
+// The impression doesn't change in these tests.
+const IMPRESSION = {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "false",
+};
+
+const SELECTOR = ".arrow";
+const SERP_URL = getSERPUrl("searchTelemetryAd_searchbox_with_content.html");
+
+async function replaceIncludedProperty(included) {
+ TEST_PROVIDER_INFO[0].components = [
+ {
+ type: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ included,
+ topDown: true,
+ },
+ ];
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+}
+
+add_setup(async function () {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+ // Enable local telemetry recording for the duration of the tests.
+ let oldCanRecord = Services.telemetry.canRecordExtended;
+ Services.telemetry.canRecordExtended = true;
+
+ registerCleanupFunction(async () => {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests();
+ Services.telemetry.canRecordExtended = oldCanRecord;
+ resetTelemetry();
+ });
+});
+
+add_task(async function test_listeners_not_provided() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons .arrow",
+ skipCount: true,
+ },
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ expectEngagement: false,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_no_listeners() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons .arrow",
+ skipCount: true,
+ eventListeners: [],
+ },
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ expectEngagement: false,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_click_listener() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons .arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "click",
+ },
+ ],
+ },
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: ".arrow-next",
+ tab,
+ });
+ await synthesizePageAction({
+ selector: ".arrow-prev",
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+/**
+ * The click event is by far our most used event so by default, we translate
+ * a "click" eventType to a "clicked" action. If no action is provided for
+ * another type of event, nothing should be reported.
+ */
+add_task(async function test_event_with_no_default_action_parent() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons .arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "mousedown",
+ },
+ ],
+ },
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ expectEngagement: false,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_event_no_default_action_with_override() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons .arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "mousedown",
+ action: "clicked",
+ },
+ ],
+ },
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: "clicked",
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_target_override() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons .arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "click",
+ target: "custom_target",
+ },
+ ],
+ },
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: "clicked",
+ target: "custom_target",
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_target_and_action_override() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons .arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "click",
+ target: "custom_target",
+ action: "custom_action",
+ },
+ ],
+ },
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ tab,
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: "custom_action",
+ target: "custom_target",
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_multiple_listeners() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons .arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "click",
+ action: "clicked",
+ },
+ {
+ eventType: "mouseover",
+ action: "mouseovered",
+ },
+ ],
+ },
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await synthesizePageAction({
+ selector: SELECTOR,
+ tab,
+ });
+ await synthesizePageAction({
+ selector: SELECTOR,
+ tab,
+ event: {
+ type: "mouseover",
+ },
+ });
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: "clicked",
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ {
+ action: "mouseovered",
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_condition() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons .arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "keydown",
+ action: "keydowned",
+ condition: "keydownEnter",
+ },
+ ],
+ },
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await SpecialPowers.spawn(tab.linkedBrowser, [SELECTOR], async function (s) {
+ let el = content.document.querySelector(s);
+ el.focus();
+ });
+
+ await EventUtils.synthesizeKey("A");
+ /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */
+ await new Promise(resolve => setTimeout(resolve, 10));
+
+ let pageActionPromise = waitForPageWithAction();
+ await EventUtils.synthesizeKey("KEY_Enter");
+ await pageActionPromise;
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: "keydowned",
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ ],
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_condition_invalid() {
+ await replaceIncludedProperty({
+ parent: {
+ selector: ".refined-search-buttons .arrow",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "keydown",
+ action: "keydowned",
+ condition: "noConditionExistsWithThisName",
+ },
+ ],
+ },
+ });
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ await SpecialPowers.spawn(tab.linkedBrowser, [SELECTOR], async function (s) {
+ let el = content.document.querySelector(s);
+ el.focus();
+ });
+
+ await EventUtils.synthesizeKey("A");
+ /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */
+ await new Promise(resolve => setTimeout(resolve, 10));
+
+ await EventUtils.synthesizeKey("KEY_Enter");
+ /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */
+ await new Promise(resolve => setTimeout(resolve, 10));
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_ignoreLinkRegexps.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_ignoreLinkRegexps.js
new file mode 100644
index 0000000000..10f2a2d836
--- /dev/null
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_ignoreLinkRegexps.js
@@ -0,0 +1,223 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Tests ignoreLinkRegexps property in search telemetry that explicitly results
+ * in our network code ignoring the link. The main reason for doing so is for
+ * rare situations where we need to find a components from a topDown approach
+ * but it loads a page in the network process.
+ */
+
+const TEST_PROVIDER_INFO = [
+ {
+ telemetryId: "example",
+ searchPageRegexp:
+ /^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetryAd/,
+ queryParamNames: ["s"],
+ codeParamName: "abc",
+ taggedCodes: ["ff"],
+ adServerAttributes: ["mozAttr"],
+ extraAdServersRegexps: [/^https:\/\/example\.com\/ad/],
+ ignoreLinkRegexps: [
+ /^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetryAd_searchbox_with_content.html\?s=test&page=images/,
+ /^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetryAd_searchbox_with_content.html\?s=test&page=shopping/,
+ ],
+ components: [
+ {
+ type: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
+ default: true,
+ },
+ ],
+ hrefToComponentMapAugmentation: [
+ {
+ action: "clicked_something",
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ url: "https://example.org/browser/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox.html",
+ },
+ ],
+ },
+];
+
+// The impression doesn't change in these tests.
+const IMPRESSION = {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "false",
+};
+
+const SERP_URL = getSERPUrl("searchTelemetryAd_searchbox_with_content.html");
+
+async function replaceIncludedProperty(included) {
+ TEST_PROVIDER_INFO[0].components = [
+ {
+ type: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ included,
+ topDown: true,
+ },
+ ];
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+}
+
+add_setup(async function () {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+ // Enable local telemetry recording for the duration of the tests.
+ let oldCanRecord = Services.telemetry.canRecordExtended;
+ Services.telemetry.canRecordExtended = true;
+
+ registerCleanupFunction(async () => {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests();
+ Services.telemetry.canRecordExtended = oldCanRecord;
+ resetTelemetry();
+ });
+});
+
+add_task(async function test_click_link_1_matching_ignore_link_regexps() {
+ resetTelemetry();
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ let promise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#images",
+ {},
+ tab.linkedBrowser
+ );
+ await promise;
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ abandonment: {
+ reason: SearchSERPTelemetryUtils.ABANDONMENTS.NAVIGATION,
+ },
+ },
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_click_link_2_matching_ignore_link_regexps() {
+ resetTelemetry();
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ let promise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#shopping",
+ {},
+ tab.linkedBrowser
+ );
+ await promise;
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ abandonment: {
+ reason: SearchSERPTelemetryUtils.ABANDONMENTS.NAVIGATION,
+ },
+ },
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_click_link_3_not_matching_ignore_link_regexps() {
+ resetTelemetry();
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ let promise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#extra",
+ {},
+ tab.linkedBrowser
+ );
+ await promise;
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: "clicked",
+ target: SearchSERPTelemetryUtils.COMPONENTS.NON_ADS_LINK,
+ },
+ ],
+ },
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
+
+add_task(async function test_click_listener_with_ignore_link_regexps() {
+ resetTelemetry();
+
+ TEST_PROVIDER_INFO[0].components = [
+ {
+ type: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ topDown: true,
+ included: {
+ parent: {
+ selector: "nav a",
+ skipCount: true,
+ eventListeners: [
+ {
+ eventType: "click",
+ action: "clicked",
+ },
+ ],
+ },
+ },
+ },
+ {
+ type: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
+ default: true,
+ },
+ ];
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+
+ let { tab, cleanup } = await openSerpInNewTab(SERP_URL);
+
+ let promise = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#images",
+ {},
+ tab.linkedBrowser
+ );
+ await promise;
+
+ assertSERPTelemetry([
+ {
+ impression: IMPRESSION,
+ engagements: [
+ {
+ action: "clicked",
+ target: SearchSERPTelemetryUtils.COMPONENTS.REFINED_SEARCH_BUTTONS,
+ },
+ ],
+ },
+ {
+ impression: IMPRESSION,
+ },
+ ]);
+
+ await cleanup();
+});
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_nonAdsLinkQueryParamNames.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_nonAdsLinkQueryParamNames.js
new file mode 100644
index 0000000000..93a6b7993e
--- /dev/null
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_nonAdsLinkQueryParamNames.js
@@ -0,0 +1,252 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * These tests load SERPs and click on links.
+ */
+
+"use strict";
+
+const TEST_PROVIDER_INFO = [
+ {
+ telemetryId: "example",
+ searchPageRegexp:
+ /^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetry/,
+ queryParamNames: ["s"],
+ codeParamName: "abc",
+ taggedCodes: ["ff"],
+ adServerAttributes: ["mozAttr"],
+ nonAdsLinkRegexps: [
+ /^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetry_redirect_with_js/,
+ ],
+ nonAdsLinkQueryParamNames: ["url"],
+ extraAdServersRegexps: [/^https:\/\/example\.com\/ad/],
+ shoppingTab: {
+ regexp: "&page=shopping",
+ selector: "nav a",
+ inspectRegexpInSERP: true,
+ },
+ components: [
+ {
+ type: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
+ default: true,
+ },
+ ],
+ },
+];
+
+add_setup(async function () {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+
+ registerCleanupFunction(async () => {
+ SearchSERPTelemetry.overrideSearchTelemetryForTests();
+ resetTelemetry();
+ });
+});
+
+add_task(async function test_click_absolute_url_in_query_param() {
+ resetTelemetry();
+
+ let url = getSERPUrl(
+ "searchTelemetryAd_searchbox_with_redirecting_links.html"
+ );
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
+ await waitForPageWithAdImpressions();
+
+ let browserLoadedPromise = BrowserTestUtils.browserLoaded(
+ tab.linkedBrowser,
+ true
+ );
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#shopping-redirect-absolute-link",
+ {},
+ tab.linkedBrowser
+ );
+ await browserLoadedPromise;
+ await waitForPageWithAdImpressions();
+
+ assertSERPTelemetry([
+ {
+ impression: {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "true",
+ },
+ engagements: [
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
+ target: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB,
+ },
+ ],
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ {
+ impression: {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "true",
+ is_private: "false",
+ shopping_tab_displayed: "true",
+ },
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ ]);
+
+ BrowserTestUtils.removeTab(tab);
+
+ // Reset state for other tests.
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+});
+
+add_task(async function test_click_relative_href_in_query_param() {
+ resetTelemetry();
+
+ let url = getSERPUrl(
+ "searchTelemetryAd_searchbox_with_redirecting_links.html"
+ );
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
+ await waitForPageWithAdImpressions();
+
+ let browserLoadedPromise = BrowserTestUtils.browserLoaded(
+ tab.linkedBrowser,
+ true
+ );
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#shopping-redirect-relative-link",
+ {},
+ tab.linkedBrowser
+ );
+ await browserLoadedPromise;
+ await waitForPageWithAdImpressions();
+
+ assertSERPTelemetry([
+ {
+ impression: {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "true",
+ },
+ engagements: [
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
+ target: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB,
+ },
+ ],
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ {
+ impression: {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "true",
+ is_private: "false",
+ shopping_tab_displayed: "true",
+ },
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ ]);
+
+ BrowserTestUtils.removeTab(tab);
+
+ // Reset state for other tests.
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+});
+
+add_task(async function test_click_irrelevant_href_in_query_param() {
+ resetTelemetry();
+
+ let url = getSERPUrl(
+ "searchTelemetryAd_searchbox_with_redirecting_links.html"
+ );
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
+ await waitForPageWithAdImpressions();
+
+ let browserLoadedPromise = BrowserTestUtils.browserLoaded(
+ tab.linkedBrowser,
+ true,
+ "https://example.org/foo/bar"
+ );
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#organic-redirect",
+ {},
+ tab.linkedBrowser
+ );
+ await browserLoadedPromise;
+
+ assertSERPTelemetry([
+ {
+ impression: {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "true",
+ },
+ engagements: [
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED,
+ target: SearchSERPTelemetryUtils.COMPONENTS.NON_ADS_LINK,
+ },
+ ],
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.SHOPPING_TAB,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ ]);
+
+ BrowserTestUtils.removeTab(tab);
+
+ // Reset state for other tests.
+ SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
+ await waitForIdle();
+});
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_target.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_target.js
index b30a7bc0c1..8f7f7f4e05 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_target.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_engagement_target.js
@@ -22,6 +22,7 @@ const TEST_PROVIDER_INFO = [
/^https:\/\/example.org\/browser\/browser\/components\/search\/test\/browser\/telemetry\/searchTelemetryAd_nonAdsLink_redirect.html/,
],
extraAdServersRegexps: [/^https:\/\/example\.com\/ad/],
+ ignoreLinkRegexps: [/^https:\/\/example\.org\/consent\?data=/],
components: [
{
type: SearchSERPTelemetryUtils.COMPONENTS.AD_CAROUSEL,
@@ -90,6 +91,44 @@ const TEST_PROVIDER_INFO = [
type: SearchSERPTelemetryUtils.COMPONENTS.AD_LINK,
default: true,
},
+ {
+ type: SearchSERPTelemetryUtils.COMPONENTS.COOKIE_BANNER,
+ topDown: true,
+ included: {
+ parent: {
+ selector: "#banner",
+ },
+ children: [
+ {
+ selector: "#cookie_accept",
+ eventListeners: [
+ {
+ eventType: "click",
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED_ACCEPT,
+ },
+ ],
+ },
+ {
+ selector: "#cookie_reject",
+ eventListeners: [
+ {
+ eventType: "click",
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED_REJECT,
+ },
+ ],
+ },
+ {
+ selector: "#cookie_more_options",
+ eventListeners: [
+ {
+ eventType: "click",
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED_MORE_OPTIONS,
+ },
+ ],
+ },
+ ],
+ },
+ },
],
},
];
@@ -455,3 +494,138 @@ add_task(async function test_click_link_with_special_characters_in_path() {
SearchSERPTelemetry.overrideSearchTelemetryForTests(TEST_PROVIDER_INFO);
await waitForIdle();
});
+
+// Test that clicking the accept button on the cookie banner is correctly
+// tracked as an engagement event.
+add_task(async function test_click_cookie_banner_accept() {
+ resetTelemetry();
+ let url = getSERPUrl("searchTelemetryAd_components_cookie_banner.html");
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
+ await waitForPageWithAdImpressions();
+
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#cookie_accept",
+ {},
+ tab.linkedBrowser
+ );
+
+ assertSERPTelemetry([
+ {
+ impression: {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "false",
+ },
+ engagements: [
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED_ACCEPT,
+ target: SearchSERPTelemetryUtils.COMPONENTS.COOKIE_BANNER,
+ },
+ ],
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.COOKIE_BANNER,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ ]);
+
+ BrowserTestUtils.removeTab(tab);
+});
+
+// Test that clicking the reject button on the cookie banner is accurately
+// recorded as an engagement event.
+add_task(async function test_click_cookie_banner_reject() {
+ resetTelemetry();
+ let url = getSERPUrl("searchTelemetryAd_components_cookie_banner.html");
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
+ await waitForPageWithAdImpressions();
+
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#cookie_reject",
+ {},
+ tab.linkedBrowser
+ );
+
+ assertSERPTelemetry([
+ {
+ impression: {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "false",
+ },
+ engagements: [
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED_REJECT,
+ target: SearchSERPTelemetryUtils.COMPONENTS.COOKIE_BANNER,
+ },
+ ],
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.COOKIE_BANNER,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ ]);
+
+ BrowserTestUtils.removeTab(tab);
+});
+
+// Test that clicking the more options button on the cookie banner is accurately
+// recorded as an engagement event.
+add_task(async function test_click_cookie_banner_more_options() {
+ resetTelemetry();
+ let url = getSERPUrl("searchTelemetryAd_components_cookie_banner.html");
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
+ await waitForPageWithAdImpressions();
+
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ "#cookie_more_options",
+ {},
+ tab.linkedBrowser
+ );
+
+ assertSERPTelemetry([
+ {
+ impression: {
+ provider: "example",
+ tagged: "true",
+ partner_code: "ff",
+ source: "unknown",
+ is_shopping_page: "false",
+ is_private: "false",
+ shopping_tab_displayed: "false",
+ },
+ engagements: [
+ {
+ action: SearchSERPTelemetryUtils.ACTIONS.CLICKED_MORE_OPTIONS,
+ target: SearchSERPTelemetryUtils.COMPONENTS.COOKIE_BANNER,
+ },
+ ],
+ adImpressions: [
+ {
+ component: SearchSERPTelemetryUtils.COMPONENTS.COOKIE_BANNER,
+ ads_loaded: "1",
+ ads_visible: "1",
+ ads_hidden: "0",
+ },
+ ],
+ },
+ ]);
+
+ BrowserTestUtils.removeTab(tab);
+});
diff --git a/browser/components/search/test/browser/telemetry/browser_search_telemetry_sources_webextension.js b/browser/components/search/test/browser/telemetry/browser_search_telemetry_sources_webextension.js
index f7b22f004b..cb9e123622 100644
--- a/browser/components/search/test/browser/telemetry/browser_search_telemetry_sources_webextension.js
+++ b/browser/components/search/test/browser/telemetry/browser_search_telemetry_sources_webextension.js
@@ -152,7 +152,7 @@ async function track_ad_click(
add_task(async function test_source_webextension_search() {
/* global browser */
- async function background(SEARCH_TERM) {
+ async function background() {
// Search with no tabId
browser.search.search({ query: "searchSuggestion", engine: "Example" });
}
@@ -184,7 +184,7 @@ add_task(async function test_source_webextension_search() {
});
add_task(async function test_source_webextension_query() {
- async function background(SEARCH_TERM) {
+ async function background() {
// Search with no tabId
browser.search.query({
text: "searchSuggestion",
diff --git a/browser/components/search/test/browser/telemetry/domain_category_mappings.json b/browser/components/search/test/browser/telemetry/domain_category_mappings.json
deleted file mode 100644
index 2f8d0d2af2..0000000000
--- a/browser/components/search/test/browser/telemetry/domain_category_mappings.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "DqNorjpE3CBY9OZh0wf1uA==": [2, 90],
- "kpuib0kvhtSp1moICEmGWg==": [2, 95],
- "+5WbbjV3Nmxp0mBZODcJWg==": [2, 78, 4, 10],
- "OIHlWZ/yMyTHHuY78AV9VQ==": [3, 90],
- "r1hDZinn+oNrQjabn8IB9w==": [4, 90],
- "AtlIam7nqWvzFzTGkYI01w==": [4, 90]
-}
diff --git a/browser/components/search/test/browser/telemetry/head.js b/browser/components/search/test/browser/telemetry/head.js
index 416451e400..b798099bdd 100644
--- a/browser/components/search/test/browser/telemetry/head.js
+++ b/browser/components/search/test/browser/telemetry/head.js
@@ -45,6 +45,10 @@ ChromeUtils.defineLazyGetter(this, "SEARCH_AD_CLICK_SCALARS", () => {
];
});
+ChromeUtils.defineLazyGetter(this, "gCryptoHash", () => {
+ return Cc["@mozilla.org/security/hash;1"].createInstance(Ci.nsICryptoHash);
+});
+
// For use with categorization.
const APP_MAJOR_VERSION = parseInt(Services.appinfo.version).toString();
const CHANNEL = SearchUtils.MODIFIED_APP_CHANNEL;
@@ -207,6 +211,11 @@ function resetTelemetry() {
* values we use to validate the recorded Glean impression events.
*/
function assertSERPTelemetry(expectedEvents) {
+ // Do a deep copy of impressions in case the input is using constants, as
+ // we insert impression id into the expected events to make it easier to
+ // run Assert.deepEqual() on the expected and actual result.
+ expectedEvents = JSON.parse(JSON.stringify(expectedEvents));
+
// A single test might run assertImpressionEvents more than once
// so the Set needs to be cleared or else the impression event
// check will throw.
@@ -385,6 +394,46 @@ add_setup(function () {
});
});
+async function openSerpInNewTab(url, expectedAds = true) {
+ let promise;
+ if (expectedAds) {
+ promise = waitForPageWithAdImpressions();
+ }
+ let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, url);
+ await promise;
+
+ let cleanup = async () => {
+ await BrowserTestUtils.removeTab(tab);
+ resetTelemetry();
+ };
+
+ return { tab, cleanup };
+}
+
+async function synthesizePageAction({
+ selector,
+ event = {},
+ tab,
+ expectEngagement = true,
+} = {}) {
+ let promise;
+ if (expectEngagement) {
+ promise = waitForPageWithAction();
+ } else {
+ // Wait roughly around how much it might take for a possible page action
+ // to be registered in telemetry.
+ /* eslint-disable-next-line mozilla/no-arbitrary-setTimeout */
+ promise = new Promise(resolve => setTimeout(resolve, 50));
+ }
+ await BrowserTestUtils.synthesizeMouseAtCenter(
+ selector,
+ event,
+ tab.linkedBrowser
+ );
+
+ await promise;
+}
+
function assertCategorizationValues(expectedResults) {
// TODO Bug 1868476: Replace with calls to Glean telemetry.
let actualResults = [...fakeTelemetryStorage];
@@ -435,6 +484,10 @@ function assertCategorizationValues(expectedResults) {
}
}
+function waitForPageWithAction() {
+ return TestUtils.topicObserved("reported-page-with-action");
+}
+
function waitForPageWithAdImpressions() {
return TestUtils.topicObserved("reported-page-with-ad-impressions");
}
@@ -459,10 +512,9 @@ registerCleanupFunction(async () => {
await PlacesUtils.history.clear();
});
-async function mockRecordWithAttachment({ id, version, filename }) {
+async function mockRecordWithAttachment({ id, version, filename, mapping }) {
// Get the bytes of the file for the hash and size for attachment metadata.
- let data = await IOUtils.readUTF8(getTestFilePath(filename));
- let buffer = new TextEncoder().encode(data).buffer;
+ let buffer = new TextEncoder().encode(JSON.stringify(mapping)).buffer;
let stream = Cc["@mozilla.org/io/arraybuffer-input-stream;1"].createInstance(
Ci.nsIArrayBufferInputStream
);
@@ -506,6 +558,30 @@ async function resetCategorizationCollection(record) {
await client.db.importChanges({}, Date.now());
}
+const MOCK_ATTACHMENT_VALUES = {
+ "abc.com": [2, 95],
+ "abc.org": [4, 90],
+ "def.com": [2, 78, 4, 10],
+ "def.org": [4, 90],
+ "foobar.org": [3, 90],
+};
+
+const CONVERTED_ATTACHMENT_VALUES = convertDomainsToHashes(
+ MOCK_ATTACHMENT_VALUES
+);
+
+function convertDomainsToHashes(domainsToCategories) {
+ let newObj = {};
+ for (let [key, value] of Object.entries(domainsToCategories)) {
+ gCryptoHash.init(gCryptoHash.SHA256);
+ let bytes = new TextEncoder().encode(key);
+ gCryptoHash.update(bytes, key.length);
+ let hash = gCryptoHash.finish(true);
+ newObj[hash] = value;
+ }
+ return newObj;
+}
+
async function insertRecordIntoCollection() {
const client = RemoteSettings(TELEMETRY_CATEGORIZATION_KEY);
const db = client.db;
@@ -515,6 +591,7 @@ async function insertRecordIntoCollection() {
id: "example_id",
version: 1,
filename: "domain_category_mappings.json",
+ mapping: CONVERTED_ATTACHMENT_VALUES,
});
await db.create(record);
await client.attachments.cacheImpl.set(record.id, attachment);
diff --git a/browser/components/search/test/browser/telemetry/searchTelemetryAd_components_cookie_banner.html b/browser/components/search/test/browser/telemetry/searchTelemetryAd_components_cookie_banner.html
new file mode 100644
index 0000000000..e33afb2672
--- /dev/null
+++ b/browser/components/search/test/browser/telemetry/searchTelemetryAd_components_cookie_banner.html
@@ -0,0 +1,16 @@
+<html>
+<head>
+ <title>A top-level page with cookie banner</title>
+</head>
+<body>
+ <h1>This is the top-level page</h1>
+ <div id="banner">
+ <button id="cookie_accept">Accept</button>
+ <button id="cookie_reject">Reject</button>
+ <button id="cookie_more_options"
+ onclick="location.href='https:example.org/consent?data='">
+ More Options
+ </button>
+ </div>
+</body>
+</html>
diff --git a/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_content.html b/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_content.html
index 9c4d371691..d23255984f 100644
--- a/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_content.html
+++ b/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_content.html
@@ -11,13 +11,16 @@
</form>
</section>
<nav>
- <a id="images" href="https://example.org/browser/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_content.html?s=test&page=images">Images</a>
- <a id="shopping" href="https://example.org/browser/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_content.html?s=test&page=shopping">Shopping</a>
- <a id="extra" href="https://example.org/browser/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox.html?s=test">Extra Page</a>
+ <a id="images" href="https://example.org/browser/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_content.html?s=test&page=images&abc=ff">Images</a>
+ <a id="shopping" href="https://example.org/browser/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_content.html?s=test&page=shopping&abc=ff">Shopping</a>
+ <a id="extra" href="https://example.org/browser/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox.html?s=test&abc=ff">Extra Page</a>
</nav>
<section class="refined-search-buttons">
+ <button class="arrow arrow-prev">← Prev</button>
<a id="refined-search-button" href="https://example.org/browser/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_content.html?s=test's">Test's</a>
<a id="refined-search-button-with-partner-code" href="https://example.org/browser/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_content.html?s=test2&abc=ff">Test 2</a>
+ <a href="javascript:void(0)">Element relying on Javascript</a>
+ <button class="arrow arrow-next">Next →</button>
</section>
<section id="searchresults">
<div class="lhs">
diff --git a/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_redirecting_links.html b/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_redirecting_links.html
new file mode 100644
index 0000000000..2b09409126
--- /dev/null
+++ b/browser/components/search/test/browser/telemetry/searchTelemetryAd_searchbox_with_redirecting_links.html
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+ <meta charset="utf-8">
+ <link rel="stylesheet" type="text/css" href="./serp.css" />
+</head>
+<body>
+ <nav>
+ <a href="/">All Results</a>
+ <a id="shopping-redirect-relative-link" href="https://example.org/browser/browser/components/search/test/browser/telemetry/searchTelemetryAd_shopping.html?s=test&page=shopping&abc=ff">Shopping Relative</a>
+ <a id="shopping-redirect-absolute-link" href="https://example.org/browser/browser/components/search/test/browser/telemetry/searchTelemetryAd_shopping.html?s=test&page=shopping&abc=ff">Shopping Absolute</a>
+ </nav>
+ <section>
+ <form role="search">
+ <input type="text" value="test" />
+ </form>
+ </section>
+ <section id="searchresults">
+ <a id="organic-redirect" href="https://example.org/foo/bar">Organic Redirect Result</a>
+ </section>
+</body>
+<script type="text/javascript">
+ const ORIGIN = "https://example.org";
+ const PATH = "/browser/browser/components/search/test/browser/telemetry/"
+ const REDIRECT_URL = `${ORIGIN + PATH}searchTelemetry_redirect_with_js.html`;
+ const SHOPPING_PAGE = "searchTelemetryAd_shopping.html?s=test&page=shopping&abc=ff";
+ document.getElementById("shopping-redirect-relative-link").addEventListener("click", event => {
+ event.preventDefault();
+ window.location.href = `${REDIRECT_URL}?url=${encodeURIComponent(PATH + SHOPPING_PAGE)}`;
+ });
+ document.getElementById("shopping-redirect-absolute-link").addEventListener("click", event => {
+ event.preventDefault();
+ window.location.href = `${REDIRECT_URL}?url=${encodeURIComponent(ORIGIN + PATH + SHOPPING_PAGE)}`;
+ });
+ document.getElementById("organic-redirect").addEventListener("click", event => {
+ event.preventDefault();
+ window.location.href = `${REDIRECT_URL}?url=${encodeURIComponent("https://example.org/foo/bar")}`;
+ });
+</script>
+</html>
diff --git a/browser/components/search/test/browser/telemetry/searchTelemetryDomainExtraction.html b/browser/components/search/test/browser/telemetry/searchTelemetryDomainExtraction.html
index b49e5610ae..28c31af959 100644
--- a/browser/components/search/test/browser/telemetry/searchTelemetryDomainExtraction.html
+++ b/browser/components/search/test/browser/telemetry/searchTelemetryDomainExtraction.html
@@ -25,6 +25,8 @@
<div id="test3">
<div data-layout="organic">
<a href="/dummy-page" data-testid="result-title-a">Extract domain from href (relative URL).</a>
+ <a href="https://example.org/dummy-page" data-testid="result-title-a">Extract domain from href.</a>
+ <a href="https://www.example.org/dummy-page" data-testid="result-title-a">Extract domain from href.</a>
</div>
</div>
@@ -40,7 +42,9 @@
</div>
<div id="test6">
- <a href="example.com/testing?ad_domain=def.com" class="js-carousel-item-title">Extract domain from an href's query param value.</a>
+ <a href="https://www.example.org/testing?ad_domain=def.com" class="js-carousel-item-title">Extract domain from an href's query param value.</a>
+ <a href="https://example.org/testing?ad_domain=bar.com" class="js-carousel-item-title">Extract domain from an href's query param value.</a>
+ <a href="/testing?ad_domain=baz.com" class="js-carousel-item-title">Extract domain from a relative href containing a relevant query param value.</a>
</div>
<div id="test7">
@@ -79,6 +83,179 @@
<div id="test14">
<a href="git://testing.com/testrepo">Non-standard URL scheme.</a>
</div>
+
+ <div id="test15">
+ <h5>Second-level domains to a top-level domain.</h5>
+ <a href="https://www.foobar.gc.ca/">Link</a>
+ <a href="https://www.foobar.gov.uk/">Link</a>
+ <a href="https://foobar.co.uk">Link</a>
+ <a href="https://www.foobar.co.il">Link</a>
+ </div>
+
+ <div id="test16">
+ <a href="https://ab.cd.ef.gh.foobar.com/">URL with a long subdomain</a>
+ </div>
+
+ <div id="test17">
+ <h5>URL with the same top level domain.</h5>
+ <a href="https://foobar.com/">Link</a>
+ <a href="https://www.foobar.com/">Link</a>
+ <a href="https://abc.def.foobar.com/">Link</a>
+ </div>
+
+ <div id="test18">
+ <h5>More than the threshold of links.</h5>
+ <a href="https://foobar1.com/">Link</a>
+ <a href="https://foobar1.com/">Duplicate Link</a>
+ <a href="https://foobar2.com/">Link</a>
+ <a href="https://foobar3.com/">Link</a>
+ <a href="https://foobar4.com/">Link</a>
+ <a href="https://foobar5.com/">Link</a>
+ <a href="https://foobar6.com/">Link</a>
+ <a href="https://foobar7.com/">Link</a>
+ <a href="https://foobar8.com/">Link</a>
+ <a href="https://foobar9.com/">Link</a>
+ <a href="https://foobar10.com/">Link</a>
+ <a href="https://foobar11.com/">Link Outside Threshold</a>
+ </div>
+
+ <div id="test19">
+ <h5>More than the threshold of links using multiple matching selectors.</h5>
+ <a class="foo" href="https://foobar1.com/">Link</a>
+ <a class="foo" href="https://foobar2.com/">Link</a>
+ <a class="foo" href="https://foobar3.com/">Link</a>
+ <a class="foo" href="https://foobar4.com/">Link</a>
+ <a class="foo" href="https://foobar5.com/">Link</a>
+ <a class="foo" href="https://foobar6.com/">Link</a>
+ <a class="foo" href="https://foobar7.com/">Link</a>
+ <a class="foo" href="https://foobar8.com/">Link</a>
+ <a class="foo" href="https://foobar9.com/">Link</a>
+ <a class="baz" href="https://foobaz1.com/">Link</a>
+ <a class="baz" href="https://foobaz2.com/">Link Outside Threshold</a>
+ </div>
+
+ <div id="test20">
+ <div id="b_results">
+ <div class="b_algo">
+ <div class="b_attribution">
+ <cite>https://organic.com</cite>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div id="test21">
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored.com</cite>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div id="test22">
+ <div class="adsMvCarousel">
+ <cite>Fixed up from the carousel</cite>
+ </div>
+ </div>
+
+ <div id="test23">
+ <aside>
+ <cite>Fixed up from the sidebar</cite>
+ </aside>
+ </div>
+
+ <div id="test24">
+ <h5>More than the threshold of links using the text content selection method.</h5>
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored1.com</cite>
+ </div>
+ </div>
+ </div>
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored2.com</cite>
+ </div>
+ </div>
+ </div>
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored3.com</cite>
+ </div>
+ </div>
+ </div>
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored4.com</cite>
+ </div>
+ </div>
+ </div>
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored5.com</cite>
+ </div>
+ </div>
+ </div>
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored6.com</cite>
+ </div>
+ </div>
+ </div>
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored7.com</cite>
+ </div>
+ </div>
+ </div>
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored8.com</cite>
+ </div>
+ </div>
+ </div>
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored9.com</cite>
+ </div>
+ </div>
+ </div>
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored10.com</cite>
+ </div>
+ </div>
+ </div>
+ <div id="b_results">
+ <div class="b_ad">
+ <div class="b_attribution">
+ <cite>https://sponsored11.com</cite>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div id="test25">
+ <div id="b_results">
+ <div class="b_algo">
+ <div class="b_attribution">
+ <cite>organic.com</cite>
+ </div>
+ </div>
+ </div>
+ </div>
</div>
</body>
</html>
diff --git a/browser/components/search/test/browser/telemetry/searchTelemetrySinglePageApp.html b/browser/components/search/test/browser/telemetry/searchTelemetrySinglePageApp.html
index 7598da694e..f52088206f 100644
--- a/browser/components/search/test/browser/telemetry/searchTelemetrySinglePageApp.html
+++ b/browser/components/search/test/browser/telemetry/searchTelemetrySinglePageApp.html
@@ -204,7 +204,7 @@
}
})
- window.addEventListener("DOMContentLoaded", (event) => {
+ window.addEventListener("DOMContentLoaded", () => {
let url = new URL(window.location.href);
searchKey = url.searchParams.has("r") ? "r": "s";
@@ -219,7 +219,7 @@
updateSuggestions();
});
- window.addEventListener("popstate", (event) => {
+ window.addEventListener("popstate", () => {
let baseUrl = new URL(window.location.href);
let page = baseUrl.searchParams.get("page");
switch (page) {
diff --git a/browser/components/search/test/browser/telemetry/searchTelemetry_redirect_with_js.html b/browser/components/search/test/browser/telemetry/searchTelemetry_redirect_with_js.html
new file mode 100644
index 0000000000..744fcd2906
--- /dev/null
+++ b/browser/components/search/test/browser/telemetry/searchTelemetry_redirect_with_js.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <title>Page will redirect using the url param</title>
+ <script>
+ let parentWindow = window.parent;
+ let params = new URLSearchParams(window.location.search);
+ let paramValue = params.get("url");
+ if (paramValue) {
+ // Replicate how some SERPs load pages by encoding the true destination
+ // in the query param value.
+ let url = paramValue.startsWith("https://") ?
+ new URL(paramValue).href :
+ new URL(paramValue, "https://example.org/").href;
+ window.location.href = url;
+ }
+ </script>
+ </head>
+ <body>
+ <h1>Redirecting...</h1>
+ </body>
+</html>
diff --git a/browser/components/search/test/unit/domain_category_mappings_1a.json b/browser/components/search/test/unit/domain_category_mappings_1a.json
deleted file mode 100644
index 51b18e12a7..0000000000
--- a/browser/components/search/test/unit/domain_category_mappings_1a.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "Wrq9YDsieAMC3Y2DSY5Rcg==": [1, 100]
-}
diff --git a/browser/components/search/test/unit/domain_category_mappings_1b.json b/browser/components/search/test/unit/domain_category_mappings_1b.json
deleted file mode 100644
index 698ef45f1a..0000000000
--- a/browser/components/search/test/unit/domain_category_mappings_1b.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "G99y4E1rUMgqSMfk3TjMaQ==": [2, 90]
-}
diff --git a/browser/components/search/test/unit/domain_category_mappings_2a.json b/browser/components/search/test/unit/domain_category_mappings_2a.json
deleted file mode 100644
index 08db2fa8c2..0000000000
--- a/browser/components/search/test/unit/domain_category_mappings_2a.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "Wrq9YDsieAMC3Y2DSY5Rcg==": [1, 80]
-}
diff --git a/browser/components/search/test/unit/domain_category_mappings_2b.json b/browser/components/search/test/unit/domain_category_mappings_2b.json
deleted file mode 100644
index dec2d130c1..0000000000
--- a/browser/components/search/test/unit/domain_category_mappings_2b.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "G99y4E1rUMgqSMfk3TjMaQ==": [2, 50, 4, 80]
-}
diff --git a/browser/components/search/test/unit/test_search_telemetry_categorization_logic.js b/browser/components/search/test/unit/test_search_telemetry_categorization_logic.js
index 947a7aae46..44b9147c50 100644
--- a/browser/components/search/test/unit/test_search_telemetry_categorization_logic.js
+++ b/browser/components/search/test/unit/test_search_telemetry_categorization_logic.js
@@ -15,90 +15,111 @@ ChromeUtils.defineESModuleGetters(this, {
SearchSERPTelemetryUtils: "resource:///modules/SearchSERPTelemetry.sys.mjs",
});
-const TEST_DOMAIN_TO_CATEGORIES_MAP_SIMPLE = {
- "byVQ4ej7T7s2xf/cPqgMyw==": [2, 90],
- "1TEnSjgNCuobI6olZinMiQ==": [2, 95],
- "/Bnju09b9iBPjg7K+5ENIw==": [2, 78, 4, 10],
- "Ja6RJq5LQftdl7NQrX1avQ==": [2, 56, 4, 24],
- "Jy26Qt99JrUderAcURtQ5A==": [2, 89],
- "sZnJyyzY9QcN810Q6jfbvw==": [2, 43],
- "QhmteGKeYk0okuB/bXzwRw==": [2, 65],
- "CKQZZ1IJjzjjE4LUV8vUSg==": [2, 67],
- "FK7mL5E1JaE6VzOiGMmlZg==": [2, 89],
- "mzcR/nhDcrs0ed4kTf+ZFg==": [2, 99],
-};
-
-const TEST_DOMAIN_TO_CATEGORIES_MAP_INCONCLUSIVE = {
- "IkOfhoSlHTMIZzWXkYf7fg==": [0, 0],
- "PIAHxeaBOeDNY2tvZKqQuw==": [0, 0],
- "DKx2mqmFtEvxrHAqpwSevA==": [0, 0],
- "DlZKnz9ryYqbxJq9wodzlA==": [0, 0],
- "n3NWT4N9JlKX0I7MUtAsYg==": [0, 0],
- "A6KyupOlu5zXt8loti90qw==": [0, 0],
- "gf5rpseruOaq8nXOSJPG3Q==": [0, 0],
- "vlQYOvbcbAp6sMx54OwqCQ==": [0, 0],
- "8PcaPATLgmHD9SR0/961Sw==": [0, 0],
- "l+hLycEAW2v/OPE/XFpNwQ==": [0, 0],
-};
-
-const TEST_DOMAIN_TO_CATEGORIES_MAP_UNKNOWN_AND_INCONCLUSIVE = {
- "CEA642T3hV+Fdi2PaRH9BQ==": [0, 0],
- "cVqopYLASYxcWdDW4F+w2w==": [0, 0],
- "X61OdTU20n8pxZ76K2eAHg==": [0, 0],
- "/srrOggOAwgaBGCsPdC4bA==": [0, 0],
- "onnMGn+MmaCQx3RNLBzGOQ==": [0, 0],
-};
-
-const TEST_DOMAIN_TO_CATEGORIES_MAP_ALL_TYPES = {
- "VSXaqgDKYWrJ/yjsFomUdg==": [3, 90],
- "6re74Kk34n2V6VCdLmCD5w==": [3, 88],
- "s8gOGIaFnly5hHX7nPncnw==": [3, 90, 6, 2],
- "zfRJyKV+2jd1RKNsSHm9pw==": [3, 78, 6, 7],
- "zcW+KbRfLRO6Dljf5qnuwQ==": [3, 97],
- "Rau9mfbBcIRiRQIliUxkow==": [0, 0],
- "4AFhUOmLQ8804doOsI4jBA==": [0, 0],
-};
-
-const TEST_DOMAIN_TO_CATEGORIES_MAP_TIE = {
- "fmEqRSc+pBr9noi0l99nGw==": [1, 50, 2, 50],
- "cms8ipz0JQ3WS9o48RtvnQ==": [1, 50, 2, 50],
- "y8Haj7Qdmx+k762RaxCPvA==": [1, 50, 2, 50],
- "tCbLmi5xJ/OrF8tbRm8PrA==": [1, 50, 2, 50],
- "uYNQECmDShqI409HrSTdLQ==": [1, 50, 2, 50],
- "D88hdsmzLWIXYhkrDal33w==": [3, 50, 4, 50],
- "1mhx0I0B4cEaI91x8zor7Q==": [5, 50, 6, 50],
- "dVZYATQixuBHmalCFR9+Lw==": [7, 50, 8, 50],
- "pdOFJG49D7hE/+FtsWDihQ==": [9, 50, 10, 50],
- "+gl+dBhWE0nx0AM69m2g5w==": [11, 50, 12, 50],
-};
-
-const TEST_DOMAIN_TO_CATEGORIES_MAP_RANK_PENALIZATION_1 = {
- "VSXaqgDKYWrJ/yjsFomUdg==": [1, 45],
- "6re74Kk34n2V6VCdLmCD5w==": [2, 45],
- "s8gOGIaFnly5hHX7nPncnw==": [3, 45],
- "zfRJyKV+2jd1RKNsSHm9pw==": [4, 45],
- "zcW+KbRfLRO6Dljf5qnuwQ==": [5, 45],
- "Rau9mfbBcIRiRQIliUxkow==": [6, 45],
- "4AFhUOmLQ8804doOsI4jBA==": [7, 45],
- "YZ3aEL73MR+Cjog0D7A24w==": [8, 45],
- "crMclD9rwInEQ30DpZLg+g==": [9, 45],
- "/r7oPRoE6LJAE95nuwmu7w==": [10, 45],
-};
-
-const TEST_DOMAIN_TO_CATEGORIES_MAP_RANK_PENALIZATION_2 = {
- "sHWSmFwSYL3snycBZCY8Kg==": [1, 35, 2, 4],
- "FZ5zPYh6ByI0KGWKkmpDoA==": [1, 5, 2, 94],
-};
+ChromeUtils.defineLazyGetter(this, "gCryptoHash", () => {
+ return Cc["@mozilla.org/security/hash;1"].createInstance(Ci.nsICryptoHash);
+});
+
+function convertDomainsToHashes(domainsToCategories) {
+ let newObj = {};
+ for (let [key, value] of Object.entries(domainsToCategories)) {
+ gCryptoHash.init(gCryptoHash.SHA256);
+ let bytes = new TextEncoder().encode(key);
+ gCryptoHash.update(bytes, key.length);
+ let hash = gCryptoHash.finish(true);
+ newObj[hash] = value;
+ }
+ return newObj;
+}
+
+const TEST_DOMAIN_TO_CATEGORIES_MAP_SIMPLE = convertDomainsToHashes({
+ "test1.com": [2, 90],
+ "test2.com": [2, 95],
+ "test3.com": [2, 78, 4, 10],
+ "test4.com": [2, 56, 4, 24],
+ "test5.com": [2, 89],
+ "test6.com": [2, 43],
+ "test7.com": [2, 65],
+ "test8.com": [2, 67],
+ "test9.com": [2, 89],
+ "test10.com": [2, 99],
+});
+
+const TEST_DOMAIN_TO_CATEGORIES_MAP_INCONCLUSIVE = convertDomainsToHashes({
+ "test11.com": [0, 0],
+ "test12.com": [0, 0],
+ "test13.com": [0, 0],
+ "test14.com": [0, 0],
+ "test15.com": [0, 0],
+ "test16.com": [0, 0],
+ "test17.com": [0, 0],
+ "test18.com": [0, 0],
+ "test19.com": [0, 0],
+ "test20.com": [0, 0],
+});
+
+const TEST_DOMAIN_TO_CATEGORIES_MAP_UNKNOWN_AND_INCONCLUSIVE =
+ convertDomainsToHashes({
+ "test31.com": [0, 0],
+ "test32.com": [0, 0],
+ "test33.com": [0, 0],
+ "test34.com": [0, 0],
+ "test35.com": [0, 0],
+ });
+
+const TEST_DOMAIN_TO_CATEGORIES_MAP_ALL_TYPES = convertDomainsToHashes({
+ "test51.com": [3, 90],
+ "test52.com": [3, 88],
+ "test53.com": [3, 90, 6, 2],
+ "test54.com": [3, 78, 6, 7],
+ "test55.com": [3, 97],
+ "test56.com": [0, 0],
+ "test57.com": [0, 0],
+});
+
+const TEST_DOMAIN_TO_CATEGORIES_MAP_TIE = convertDomainsToHashes({
+ "test41.com": [1, 50, 2, 50],
+ "test42.com": [1, 50, 2, 50],
+ "test43.com": [1, 50, 2, 50],
+ "test44.com": [1, 50, 2, 50],
+ "test45.com": [1, 50, 2, 50],
+ "test46.com": [3, 50, 4, 50],
+ "test47.com": [5, 50, 6, 50],
+ "test48.com": [7, 50, 8, 50],
+ "test49.com": [9, 50, 10, 50],
+ "test50.com": [11, 50, 12, 50],
+});
+
+const TEST_DOMAIN_TO_CATEGORIES_MAP_RANK_PENALIZATION_1 =
+ convertDomainsToHashes({
+ "test51.com": [1, 45],
+ "test52.com": [2, 45],
+ "test53.com": [3, 45],
+ "test54.com": [4, 45],
+ "test55.com": [5, 45],
+ "test56.com": [6, 45],
+ "test57.com": [7, 45],
+ "test58.com": [8, 45],
+ "test59.com": [9, 45],
+ "test60.com": [10, 45],
+ });
+
+const TEST_DOMAIN_TO_CATEGORIES_MAP_RANK_PENALIZATION_2 =
+ convertDomainsToHashes({
+ "test61.com": [1, 35, 2, 4],
+ "test62.com": [1, 5, 2, 94],
+ });
add_setup(async () => {
+ do_get_profile();
Services.prefs.setBoolPref(
"browser.search.serpEventTelemetryCategorization.enabled",
true
);
+ await SearchSERPDomainToCategoriesMap.init();
});
add_task(async function test_categorization_simple() {
- SearchSERPDomainToCategoriesMap.overrideMapForTests(
+ await SearchSERPDomainToCategoriesMap.overrideMapForTests(
TEST_DOMAIN_TO_CATEGORIES_MAP_SIMPLE
);
@@ -115,8 +136,9 @@ add_task(async function test_categorization_simple() {
"test10.com",
]);
- let resultsToReport =
- SearchSERPCategorization.applyCategorizationLogic(domains);
+ let resultsToReport = await SearchSERPCategorization.applyCategorizationLogic(
+ domains
+ );
Assert.deepEqual(
resultsToReport,
@@ -126,7 +148,7 @@ add_task(async function test_categorization_simple() {
});
add_task(async function test_categorization_inconclusive() {
- SearchSERPDomainToCategoriesMap.overrideMapForTests(
+ await SearchSERPDomainToCategoriesMap.overrideMapForTests(
TEST_DOMAIN_TO_CATEGORIES_MAP_INCONCLUSIVE
);
@@ -143,8 +165,9 @@ add_task(async function test_categorization_inconclusive() {
"test20.com",
]);
- let resultsToReport =
- SearchSERPCategorization.applyCategorizationLogic(domains);
+ let resultsToReport = await SearchSERPCategorization.applyCategorizationLogic(
+ domains
+ );
Assert.deepEqual(
resultsToReport,
@@ -161,7 +184,7 @@ add_task(async function test_categorization_inconclusive() {
add_task(async function test_categorization_unknown() {
// Reusing TEST_DOMAIN_TO_CATEGORIES_MAP_SIMPLE since none of this task's
// domains will be keys within it.
- SearchSERPDomainToCategoriesMap.overrideMapForTests(
+ await SearchSERPDomainToCategoriesMap.overrideMapForTests(
TEST_DOMAIN_TO_CATEGORIES_MAP_SIMPLE
);
@@ -178,8 +201,9 @@ add_task(async function test_categorization_unknown() {
"test30.com",
]);
- let resultsToReport =
- SearchSERPCategorization.applyCategorizationLogic(domains);
+ let resultsToReport = await SearchSERPCategorization.applyCategorizationLogic(
+ domains
+ );
Assert.deepEqual(
resultsToReport,
@@ -194,7 +218,7 @@ add_task(async function test_categorization_unknown() {
});
add_task(async function test_categorization_unknown_and_inconclusive() {
- SearchSERPDomainToCategoriesMap.overrideMapForTests(
+ await SearchSERPDomainToCategoriesMap.overrideMapForTests(
TEST_DOMAIN_TO_CATEGORIES_MAP_UNKNOWN_AND_INCONCLUSIVE
);
@@ -211,8 +235,9 @@ add_task(async function test_categorization_unknown_and_inconclusive() {
"test40.com",
]);
- let resultsToReport =
- SearchSERPCategorization.applyCategorizationLogic(domains);
+ let resultsToReport = await SearchSERPCategorization.applyCategorizationLogic(
+ domains
+ );
Assert.deepEqual(
resultsToReport,
@@ -228,7 +253,7 @@ add_task(async function test_categorization_unknown_and_inconclusive() {
// Tests a mixture of categorized, inconclusive and unknown domains.
add_task(async function test_categorization_all_types() {
- SearchSERPDomainToCategoriesMap.overrideMapForTests(
+ await SearchSERPDomainToCategoriesMap.overrideMapForTests(
TEST_DOMAIN_TO_CATEGORIES_MAP_ALL_TYPES
);
@@ -247,8 +272,9 @@ add_task(async function test_categorization_all_types() {
"test60.com",
]);
- let resultsToReport =
- SearchSERPCategorization.applyCategorizationLogic(domains);
+ let resultsToReport = await SearchSERPCategorization.applyCategorizationLogic(
+ domains
+ );
Assert.deepEqual(
resultsToReport,
@@ -263,7 +289,7 @@ add_task(async function test_categorization_all_types() {
});
add_task(async function test_categorization_tie() {
- SearchSERPDomainToCategoriesMap.overrideMapForTests(
+ await SearchSERPDomainToCategoriesMap.overrideMapForTests(
TEST_DOMAIN_TO_CATEGORIES_MAP_TIE
);
@@ -280,8 +306,9 @@ add_task(async function test_categorization_tie() {
"test50.com",
]);
- let resultsToReport =
- SearchSERPCategorization.applyCategorizationLogic(domains);
+ let resultsToReport = await SearchSERPCategorization.applyCategorizationLogic(
+ domains
+ );
Assert.equal(
[1, 2].includes(resultsToReport.category),
@@ -301,7 +328,7 @@ add_task(async function test_categorization_tie() {
});
add_task(async function test_rank_penalization_equal_scores() {
- SearchSERPDomainToCategoriesMap.overrideMapForTests(
+ await SearchSERPDomainToCategoriesMap.overrideMapForTests(
TEST_DOMAIN_TO_CATEGORIES_MAP_RANK_PENALIZATION_1
);
@@ -318,8 +345,9 @@ add_task(async function test_rank_penalization_equal_scores() {
"test60.com",
]);
- let resultsToReport =
- SearchSERPCategorization.applyCategorizationLogic(domains);
+ let resultsToReport = await SearchSERPCategorization.applyCategorizationLogic(
+ domains
+ );
Assert.deepEqual(
resultsToReport,
@@ -329,14 +357,15 @@ add_task(async function test_rank_penalization_equal_scores() {
});
add_task(async function test_rank_penalization_highest_score_lower_on_page() {
- SearchSERPDomainToCategoriesMap.overrideMapForTests(
+ await SearchSERPDomainToCategoriesMap.overrideMapForTests(
TEST_DOMAIN_TO_CATEGORIES_MAP_RANK_PENALIZATION_2
);
let domains = new Set(["test61.com", "test62.com"]);
- let resultsToReport =
- SearchSERPCategorization.applyCategorizationLogic(domains);
+ let resultsToReport = await SearchSERPCategorization.applyCategorizationLogic(
+ domains
+ );
Assert.deepEqual(
resultsToReport,
diff --git a/browser/components/search/test/unit/test_search_telemetry_categorization_process_domains.js b/browser/components/search/test/unit/test_search_telemetry_categorization_process_domains.js
deleted file mode 100644
index 84acedaa7a..0000000000
--- a/browser/components/search/test/unit/test_search_telemetry_categorization_process_domains.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ */
-
-/*
- * This test ensures we are correctly processing the domains that have been
- * extracted from a SERP.
- */
-
-ChromeUtils.defineESModuleGetters(this, {
- BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
- SearchSERPCategorization: "resource:///modules/SearchSERPTelemetry.sys.mjs",
- SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
- SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
- sinon: "resource://testing-common/Sinon.sys.mjs",
-});
-
-// Links including the provider name are not extracted.
-const PROVIDER = "example";
-
-const TESTS = [
- {
- title: "Domains matching the provider.",
- domains: ["example.com", "www.example.com", "www.foobar.com"],
- expected: ["foobar.com"],
- },
- {
- title: "Second-level domains to a top-level domain.",
- domains: [
- "www.foobar.gc.ca",
- "www.foobar.gov.uk",
- "foobar.co.uk",
- "www.foobar.co.il",
- ],
- expected: ["foobar.gc.ca", "foobar.gov.uk", "foobar.co.uk", "foobar.co.il"],
- },
- {
- title: "Long subdomain.",
- domains: ["ab.cd.ef.gh.foobar.com"],
- expected: ["foobar.com"],
- },
- {
- title: "Same top-level domain.",
- domains: ["foobar.com", "www.foobar.com", "abc.def.foobar.com"],
- expected: ["foobar.com"],
- },
- {
- title: "Empty input.",
- domains: [""],
- expected: [],
- },
-];
-
-add_setup(async function () {
- Services.prefs.setBoolPref(
- SearchUtils.BROWSER_SEARCH_PREF + "serpEventTelemetry.enabled",
- true
- );
- Services.prefs.setBoolPref(
- SearchUtils.BROWSER_SEARCH_PREF +
- "serpEventTelemetryCategorization.enabled",
- true
- );
-
- // Required or else BrowserSearchTelemetry will throw.
- sinon.stub(BrowserSearchTelemetry, "shouldRecordSearchCount").returns(true);
- await SearchSERPTelemetry.init();
-});
-
-add_task(async function test_parsing_extracted_urls() {
- for (let i = 0; i < TESTS.length; i++) {
- let currentTest = TESTS[i];
- let domains = new Set(currentTest.domains);
-
- if (currentTest.title) {
- info(currentTest.title);
- }
- let expectedDomains = new Set(currentTest.expected);
- let actualDomains = SearchSERPCategorization.processDomains(
- domains,
- PROVIDER
- );
-
- Assert.deepEqual(
- Array.from(actualDomains),
- Array.from(expectedDomains),
- "Domains should have been parsed correctly."
- );
- }
-});
diff --git a/browser/components/search/test/unit/test_search_telemetry_categorization_sync.js b/browser/components/search/test/unit/test_search_telemetry_categorization_sync.js
index 423ee0a81d..40d38efbba 100644
--- a/browser/components/search/test/unit/test_search_telemetry_categorization_sync.js
+++ b/browser/components/search/test/unit/test_search_telemetry_categorization_sync.js
@@ -16,16 +16,34 @@ ChromeUtils.defineESModuleGetters(this, {
TestUtils: "resource://testing-common/TestUtils.sys.mjs",
});
+ChromeUtils.defineLazyGetter(this, "gCryptoHash", () => {
+ return Cc["@mozilla.org/security/hash;1"].createInstance(Ci.nsICryptoHash);
+});
+
+function convertDomainsToHashes(domainsToCategories) {
+ let newObj = {};
+ for (let [key, value] of Object.entries(domainsToCategories)) {
+ gCryptoHash.init(gCryptoHash.SHA256);
+ let bytes = new TextEncoder().encode(key);
+ gCryptoHash.update(bytes, key.length);
+ let hash = gCryptoHash.finish(true);
+ newObj[hash] = value;
+ }
+ return newObj;
+}
+
async function waitForDomainToCategoriesUpdate() {
return TestUtils.topicObserved("domain-to-categories-map-update-complete");
}
-async function mockRecordWithCachedAttachment({ id, version, filename }) {
+async function mockRecordWithCachedAttachment({
+ id,
+ version,
+ filename,
+ mapping,
+}) {
// Get the bytes of the file for the hash and size for attachment metadata.
- let data = await IOUtils.readUTF8(
- PathUtils.join(do_get_cwd().path, filename)
- );
- let buffer = new TextEncoder().encode(data).buffer;
+ let buffer = new TextEncoder().encode(JSON.stringify(mapping)).buffer;
let stream = Cc["@mozilla.org/io/arraybuffer-input-stream;1"].createInstance(
Ci.nsIArrayBufferInputStream
);
@@ -73,21 +91,33 @@ const RECORDS = {
id: RECORD_A_ID,
version: 1,
filename: "domain_category_mappings_1a.json",
+ mapping: convertDomainsToHashes({
+ "example.com": [1, 100],
+ }),
},
record1b: {
id: RECORD_B_ID,
version: 1,
filename: "domain_category_mappings_1b.json",
+ mapping: convertDomainsToHashes({
+ "example.org": [2, 90],
+ }),
},
record2a: {
id: RECORD_A_ID,
version: 2,
filename: "domain_category_mappings_2a.json",
+ mapping: convertDomainsToHashes({
+ "example.com": [1, 80],
+ }),
},
record2b: {
id: RECORD_B_ID,
version: 2,
filename: "domain_category_mappings_2b.json",
+ mapping: convertDomainsToHashes({
+ "example.org": [2, 50, 4, 80],
+ }),
},
};
@@ -115,13 +145,13 @@ add_task(async function test_initial_import() {
await promise;
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.com"),
+ await SearchSERPDomainToCategoriesMap.get("example.com"),
[{ category: 1, score: 100 }],
"Return value from lookup of example.com should be the same."
);
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.org"),
+ await SearchSERPDomainToCategoriesMap.get("example.org"),
[{ category: 2, score: 90 }],
"Return value from lookup of example.org should be the same."
);
@@ -167,13 +197,13 @@ add_task(async function test_update_records() {
await promise;
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.com"),
+ await SearchSERPDomainToCategoriesMap.get("example.com"),
[{ category: 1, score: 80 }],
"Return value from lookup of example.com should have changed."
);
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.org"),
+ await SearchSERPDomainToCategoriesMap.get("example.org"),
[
{ category: 2, score: 50 },
{ category: 4, score: 80 },
@@ -224,13 +254,13 @@ add_task(async function test_delayed_initial_import() {
await promise;
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.com"),
+ await SearchSERPDomainToCategoriesMap.get("example.com"),
[{ category: 1, score: 100 }],
"Return value from lookup of example.com should be the same."
);
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.org"),
+ await SearchSERPDomainToCategoriesMap.get("example.org"),
[{ category: 2, score: 90 }],
"Return value from lookup of example.org should be the same."
);
@@ -264,7 +294,7 @@ add_task(async function test_remove_record() {
await promise;
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.com"),
+ await SearchSERPDomainToCategoriesMap.get("example.com"),
[{ category: 1, score: 80 }],
"Initialized properly."
);
@@ -283,13 +313,13 @@ add_task(async function test_remove_record() {
await promise;
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.com"),
+ await SearchSERPDomainToCategoriesMap.get("example.com"),
[{ category: 1, score: 80 }],
"Return value from lookup of example.com should remain unchanged."
);
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.org"),
+ await SearchSERPDomainToCategoriesMap.get("example.org"),
[],
"Return value from lookup of example.org should be empty."
);
@@ -323,7 +353,7 @@ add_task(async function test_different_versions_coexisting() {
await promise;
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.com"),
+ await SearchSERPDomainToCategoriesMap.get("example.com"),
[
{
category: 1,
@@ -334,7 +364,7 @@ add_task(async function test_different_versions_coexisting() {
);
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.org"),
+ await SearchSERPDomainToCategoriesMap.get("example.org"),
[
{ category: 2, score: 50 },
{ category: 4, score: 80 },
@@ -367,7 +397,7 @@ add_task(async function test_download_error() {
await promise;
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.com"),
+ await SearchSERPDomainToCategoriesMap.get("example.com"),
[
{
category: 1,
@@ -406,7 +436,7 @@ add_task(async function test_download_error() {
await observeDownloadError;
Assert.deepEqual(
- SearchSERPDomainToCategoriesMap.get("example.com"),
+ await SearchSERPDomainToCategoriesMap.get("example.com"),
[],
"Domain should not exist in store."
);
diff --git a/browser/components/search/test/unit/xpcshell.toml b/browser/components/search/test/unit/xpcshell.toml
index 61cdb83378..423d218d19 100644
--- a/browser/components/search/test/unit/xpcshell.toml
+++ b/browser/components/search/test/unit/xpcshell.toml
@@ -8,16 +8,8 @@ firefox-appdir = "browser"
["test_search_telemetry_categorization_logic.js"]
-["test_search_telemetry_categorization_process_domains.js"]
-
["test_search_telemetry_categorization_sync.js"]
prefs = ["browser.search.serpEventTelemetryCategorization.enabled=true"]
-support-files = [
- "domain_category_mappings_1a.json",
- "domain_category_mappings_1b.json",
- "domain_category_mappings_2a.json",
- "domain_category_mappings_2b.json",
-]
["test_search_telemetry_compare_urls.js"]
diff --git a/browser/components/shell/WindowsUserChoice.cpp b/browser/components/shell/WindowsUserChoice.cpp
index baa3e7286e..d533a1d8b3 100644
--- a/browser/components/shell/WindowsUserChoice.cpp
+++ b/browser/components/shell/WindowsUserChoice.cpp
@@ -284,6 +284,19 @@ UniquePtr<wchar_t[]> GetAssociationKeyPath(const wchar_t* aExt) {
return keyPath;
}
+void AppendAssociationKeyPath(const wchar_t* aExt, nsAString& aOutput) {
+ if (aExt[0] == L'.') {
+ aOutput.AppendLiteral(
+ u"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\");
+ } else {
+ aOutput.AppendLiteral(
+ u"SOFTWARE\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations"
+ u"\\");
+ }
+
+ aOutput.Append(aExt);
+}
+
UniquePtr<wchar_t[]> GenerateUserChoiceHash(const wchar_t* aExt,
const wchar_t* aUserSid,
const wchar_t* aProgId,
diff --git a/browser/components/shell/WindowsUserChoice.h b/browser/components/shell/WindowsUserChoice.h
index ae83e093e4..b4925c0552 100644
--- a/browser/components/shell/WindowsUserChoice.h
+++ b/browser/components/shell/WindowsUserChoice.h
@@ -62,6 +62,15 @@ CheckUserChoiceHashResult CheckUserChoiceHash(const wchar_t* aExt,
mozilla::UniquePtr<wchar_t[]> GetAssociationKeyPath(const wchar_t* aExt);
/*
+ * Appends the registry path for the given association, file extension or
+ * protocol to the parameter string.
+ *
+ * @param aExt File extension or protocol association to return path to.
+ * @param aOutput String to append registry path to.
+ */
+void AppendAssociationKeyPath(const wchar_t* aExt, nsAString& aOutput);
+
+/*
* Get the current user's SID
*
* @return String SID for the user of the current process, nullptr on failure.
diff --git a/browser/components/shopping/content/letter-grade.css b/browser/components/shopping/content/letter-grade.css
index 75be411151..bf37e62a6a 100644
--- a/browser/components/shopping/content/letter-grade.css
+++ b/browser/components/shopping/content/letter-grade.css
@@ -68,7 +68,7 @@
box-sizing: border-box;
display: flex;
font-size: 0.87rem;
- font-weight: var(--font-weight-default);
+ font-weight: var(--font-weight);
margin: 0;
padding: 0.125rem 0.5rem;
}
diff --git a/browser/components/shopping/content/shopping-container.css b/browser/components/shopping/content/shopping-container.css
index 6ac09964bf..709a53ac8b 100644
--- a/browser/components/shopping/content/shopping-container.css
+++ b/browser/components/shopping/content/shopping-container.css
@@ -47,7 +47,7 @@
#beta-marker {
font-size: var(--font-size-small);
- font-weight: var(--font-weight-default);
+ font-weight: var(--font-weight);
padding: 2px 4px;
margin: 0;
line-height: 150%;
diff --git a/browser/components/shopping/content/shopping-sidebar.js b/browser/components/shopping/content/shopping-sidebar.js
index 6873682ae6..09c6015bec 100644
--- a/browser/components/shopping/content/shopping-sidebar.js
+++ b/browser/components/shopping/content/shopping-sidebar.js
@@ -10,7 +10,6 @@
const SHOPPING_SIDEBAR_WIDTH_PREF =
"browser.shopping.experience2023.sidebarWidth";
class ShoppingSidebar extends MozXULElement {
- #browser;
#initialized;
static get markup() {
@@ -46,7 +45,6 @@
}
this.resizeObserverFn = this.resizeObserverFn.bind(this);
this.appendChild(this.constructor.fragment);
- this.#browser = this.querySelector(".shopping-sidebar");
let previousWidth = Services.prefs.getIntPref(
SHOPPING_SIDEBAR_WIDTH_PREF,
diff --git a/browser/components/sidebar/jar.mn b/browser/components/sidebar/jar.mn
new file mode 100644
index 0000000000..c3d7f0cbcf
--- /dev/null
+++ b/browser/components/sidebar/jar.mn
@@ -0,0 +1,5 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+browser.jar:
diff --git a/browser/components/sidebar/moz.build b/browser/components/sidebar/moz.build
new file mode 100644
index 0000000000..d988c0ff9b
--- /dev/null
+++ b/browser/components/sidebar/moz.build
@@ -0,0 +1,7 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+JAR_MANIFESTS += ["jar.mn"]
diff --git a/browser/components/storybook/.babelrc.json b/browser/components/storybook/.babelrc.json
new file mode 100644
index 0000000000..4f1658faf4
--- /dev/null
+++ b/browser/components/storybook/.babelrc.json
@@ -0,0 +1,5 @@
+{
+ "sourceType": "unambiguous",
+ "presets": ["@babel/preset-env", "@babel/preset-react"],
+ "plugins": []
+}
diff --git a/browser/components/storybook/.storybook/addon-component-status/StatusIndicator.mjs b/browser/components/storybook/.storybook/addon-component-status/StatusIndicator.jsx
index 05d72146cb..581d63a6fa 100644
--- a/browser/components/storybook/.storybook/addon-component-status/StatusIndicator.mjs
+++ b/browser/components/storybook/.storybook/addon-component-status/StatusIndicator.jsx
@@ -4,7 +4,7 @@
// eslint-disable-next-line no-unused-vars
import React from "react";
-import { useParameter } from "@storybook/api";
+import { useParameter } from "@storybook/manager-api";
import {
// eslint-disable-next-line no-unused-vars
Badge,
@@ -85,7 +85,7 @@ export const StatusIndicator = () => {
style={{
display: "flex",
}}
- onVisibilityChange={onVisibilityChange}
+ onVisibleChange={onVisibilityChange}
tooltip={() => (
<div id="statusMessage">
<TooltipMessage
diff --git a/browser/components/storybook/.storybook/addon-component-status/preset/manager.mjs b/browser/components/storybook/.storybook/addon-component-status/preset/manager.mjs
index 4aa611b156..3fe5eb3f1b 100644
--- a/browser/components/storybook/.storybook/addon-component-status/preset/manager.mjs
+++ b/browser/components/storybook/.storybook/addon-component-status/preset/manager.mjs
@@ -4,11 +4,9 @@
/** This file handles registering the Storybook addon */
-// eslint-disable-next-line no-unused-vars
-import React from "react";
-import { addons, types } from "@storybook/addons";
+import { addons, types } from "@storybook/manager-api";
import { ADDON_ID, TOOL_ID } from "../constants.mjs";
-import { StatusIndicator } from "../StatusIndicator.mjs";
+import { StatusIndicator } from "../StatusIndicator.jsx";
addons.register(ADDON_ID, () => {
addons.add(TOOL_ID, {
diff --git a/browser/components/storybook/.storybook/addon-fluent/FluentPanel.jsx b/browser/components/storybook/.storybook/addon-fluent/FluentPanel.jsx
new file mode 100644
index 0000000000..71714d8d25
--- /dev/null
+++ b/browser/components/storybook/.storybook/addon-fluent/FluentPanel.jsx
@@ -0,0 +1,110 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// eslint-disable-next-line no-unused-vars
+import React, { useEffect, useState } from "react";
+import { addons, useGlobals, useStorybookApi } from "@storybook/manager-api";
+// eslint-disable-next-line no-unused-vars
+import { AddonPanel, Table, Form } from "@storybook/components";
+import { FLUENT_CHANGED, FLUENT_SET_STRINGS } from "./constants.mjs";
+// eslint-disable-next-line import/no-unassigned-import
+import "./fluent-panel.css";
+
+export const FluentPanel = ({ active }) => {
+ const [fileName, setFileName] = useState(null);
+ const [strings, setStrings] = useState([]);
+ const [{ fluentStrings }, updateGlobals] = useGlobals();
+ const channel = addons.getChannel();
+ const api = useStorybookApi();
+
+ useEffect(() => {
+ channel.on(FLUENT_CHANGED, handleFluentChanged);
+ return () => {
+ channel.off(FLUENT_CHANGED, handleFluentChanged);
+ };
+ }, [channel]);
+
+ const handleFluentChanged = (nextStrings, fluentFile) => {
+ setFileName(fluentFile);
+ setStrings(nextStrings);
+ };
+
+ const onInput = e => {
+ let nextStrings = [];
+ for (let [key, value] of strings) {
+ if (key == e.target.name) {
+ let stringValue = e.target.value;
+ if (stringValue.startsWith(".")) {
+ stringValue = "\n" + stringValue;
+ }
+ nextStrings.push([key, stringValue]);
+ } else {
+ nextStrings.push([key, value]);
+ }
+ }
+ let stringified = nextStrings
+ .map(([key, value]) => `${key} = ${value}`)
+ .join("\n");
+ channel.emit(FLUENT_SET_STRINGS, stringified);
+ updateGlobals({
+ fluentStrings: { ...fluentStrings, [fileName]: nextStrings },
+ });
+ return { fileName, strings };
+ };
+
+ const addonTemplate = () => {
+ if (strings.length === 0) {
+ return (
+ <AddonPanel active={!!active} api={api}>
+ <div className="addon-panel-body">
+ <div className="addon-panel-message">
+ This story is not configured to use Fluent.
+ </div>
+ </div>
+ </AddonPanel>
+ );
+ }
+
+ return (
+ <AddonPanel active={!!active} api={api}>
+ <div className="addon-panel-body">
+ <Table aria-hidden="false" className="addon-panel-table">
+ <thead className="addon-panel-table-head">
+ <tr>
+ <th>
+ <span>Identifier</span>
+ </th>
+ <th>
+ <span>String</span>
+ </th>
+ </tr>
+ </thead>
+ <tbody className="addon-panel-table-body">
+ {strings.map(([identifier, value]) => (
+ <tr key={identifier}>
+ <td>
+ <span>{identifier}</span>
+ </td>
+ <td>
+ <Form.Textarea
+ name={identifier}
+ onInput={onInput}
+ defaultValue={value
+ .trim()
+ .split("\n")
+ .map(s => s.trim())
+ .join("\n")}
+ ></Form.Textarea>
+ </td>
+ </tr>
+ ))}
+ </tbody>
+ </Table>
+ </div>
+ </AddonPanel>
+ );
+ };
+
+ return addonTemplate();
+};
diff --git a/browser/components/storybook/.storybook/addon-fluent/FluentPanel.mjs b/browser/components/storybook/.storybook/addon-fluent/FluentPanel.mjs
deleted file mode 100644
index 692ff73737..0000000000
--- a/browser/components/storybook/.storybook/addon-fluent/FluentPanel.mjs
+++ /dev/null
@@ -1,121 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-import React from "react";
-import { addons } from "@storybook/addons";
-// eslint-disable-next-line no-unused-vars
-import { AddonPanel } from "@storybook/components";
-import { FLUENT_CHANGED, FLUENT_SET_STRINGS } from "./constants.mjs";
-// eslint-disable-next-line import/no-unassigned-import
-import "./fluent-panel.css";
-
-export class FluentPanel extends React.Component {
- constructor(props) {
- super(props);
- this.channel = addons.getChannel();
- this.state = {
- name: null,
- strings: [],
- };
- }
-
- componentDidMount() {
- const { api } = this.props;
- api.on(FLUENT_CHANGED, this.handleFluentChanged);
- }
-
- componentWillUnmount() {
- const { api } = this.props;
- api.off(FLUENT_CHANGED, this.handleFluentChanged);
- }
-
- handleFluentChanged = strings => {
- let storyData = this.props.api.getCurrentStoryData();
- let fileName = `${storyData.component}.ftl`;
- this.setState(state => ({ ...state, strings, fileName }));
- };
-
- onInput = e => {
- this.setState(state => {
- let strings = [];
- for (let [key, value] of state.strings) {
- if (key == e.target.name) {
- let stringValue = e.target.value;
- if (stringValue.startsWith(".")) {
- stringValue = "\n" + stringValue;
- }
- strings.push([key, stringValue]);
- } else {
- strings.push([key, value]);
- }
- }
- let stringified = strings
- .map(([key, value]) => `${key} = ${value}`)
- .join("\n");
- this.channel.emit(FLUENT_SET_STRINGS, stringified);
- const { fluentStrings } = this.props.api.getGlobals();
- this.props.api.updateGlobals({
- fluentStrings: { ...fluentStrings, [state.fileName]: strings },
- });
- return { ...state, strings };
- });
- };
-
- render() {
- const { api, active } = this.props;
- const { strings } = this.state;
- if (strings.length === 0) {
- return (
- <AddonPanel active={!!active} api={api}>
- <div className="addon-panel-body">
- <div className="addon-panel-message">
- This story is not configured to use Fluent.
- </div>
- </div>
- </AddonPanel>
- );
- }
-
- return (
- <AddonPanel active={!!active} api={api}>
- <div className="addon-panel-body">
- <table aria-hidden="false" className="addon-panel-table">
- <thead className="addon-panel-table-head">
- <tr>
- <th>
- <span>Identifier</span>
- </th>
- <th>
- <span>String</span>
- </th>
- </tr>
- </thead>
- <tbody className="addon-panel-table-body">
- {strings.map(([identifier, value]) => (
- <tr key={identifier}>
- <td>
- <span>{identifier}</span>
- </td>
- <td>
- <label>
- <textarea
- name={identifier}
- onInput={this.onInput}
- defaultValue={value
- .trim()
- .split("\n")
- .map(s => s.trim())
- .join("\n")}
- ></textarea>
- </label>
- </td>
- </tr>
- ))}
- </tbody>
- </table>
- </div>
- </AddonPanel>
- );
- }
-}
diff --git a/browser/components/storybook/.storybook/addon-fluent/PseudoLocalizationButton.mjs b/browser/components/storybook/.storybook/addon-fluent/PseudoLocalizationButton.jsx
index d60112d224..9af7e5ad2b 100644
--- a/browser/components/storybook/.storybook/addon-fluent/PseudoLocalizationButton.mjs
+++ b/browser/components/storybook/.storybook/addon-fluent/PseudoLocalizationButton.jsx
@@ -4,7 +4,7 @@
// eslint-disable-next-line no-unused-vars
import React from "react";
-import { useGlobals } from "@storybook/api";
+import { useGlobals } from "@storybook/manager-api";
import {
// eslint-disable-next-line no-unused-vars
Icons,
diff --git a/browser/components/storybook/.storybook/addon-fluent/fluent-panel.css b/browser/components/storybook/.storybook/addon-fluent/fluent-panel.css
index 75f4562820..cb6dd9b6f2 100644
--- a/browser/components/storybook/.storybook/addon-fluent/fluent-panel.css
+++ b/browser/components/storybook/.storybook/addon-fluent/fluent-panel.css
@@ -15,69 +15,59 @@
font-size: 13px;
}
-.addon-panel-table {
- border-collapse: collapse;
+table.addon-panel-table {
border-spacing: 0;
- color: #333333;
- font-size: 13px;
- line-height: 20px;
text-align: left;
width: 100%;
margin: 0;
}
-.addon-panel-table-head {
- color: rgba(51,51,51,0.75);
+table.addon-panel-table thead.addon-panel-table-head th {
+ border: none;
+ color: rgba(46, 52, 56, 0.75);
}
-.addon-panel-table-head th {
- padding: 10px 15px;
- border: none;
- vertical-align: top;
+@media (prefers-color-scheme: dark) {
+ table.addon-panel-table thead.addon-panel-table-head th {
+ color: rgba(201, 205, 207, 0.55)
+ }
+}
+
+table.addon-panel-table thead.addon-panel-table-head tr {
+ border-top: none;
}
-.addon-panel-table-head th:first-of-type, .addon-panel-table-body td:first-of-type {
+.addon-panel-table-head th:first-of-type,
+.addon-panel-table-body td:first-of-type {
width: 25%;
padding-left: 20px;
+ border-inline: none;
}
-.addon-panel-table-head th:last-of-type, .addon-panel-table-body td:last-of-type {
+.addon-panel-table-head th:last-of-type,
+.addon-panel-table-body td:last-of-type {
padding-right: 20px;
+ border-inline-start: none;
}
-.addon-panel-table-body {
- border-radius: 4px;
-}
-
-.addon-panel-table-body tr {
+.addon-panel-body {
overflow: hidden;
- border-top: 1px solid #e6e6e6;
}
.addon-panel-table-body td {
- padding: 10px 15px;
font-weight: bold;
+ vertical-align: top;
}
-.addon-panel-table-body label {
- display: flex;
+table.addon-panel-table .addon-panel-table-body tr:nth-of-type(2n) {
+ background-color: unset;
+}
+
+.addon-panel-table-body tr:last-of-type td {
+ border-bottom: none;
}
.addon-panel-table-body textarea {
height: fit-content;
- appearance: none;
- border: none;
- box-sizing: inherit;
- display: block;
- margin: 0;
- background-color: rgb(255, 255, 255);
- padding: 6px 10px;
- color: #333333;
- box-shadow: rgba(0,0,0,.1) 0 0 0 1px inset;
- border-radius: 4px;
- line-height: 20px;
- flex: 1;
- text-align: left;
- overflow: visible;
- max-height: 400px;
+ width: 100%;
}
diff --git a/browser/components/storybook/.storybook/addon-fluent/preset/manager.mjs b/browser/components/storybook/.storybook/addon-fluent/preset/manager.mjs
index 0f7ff9299b..29b57812bd 100644
--- a/browser/components/storybook/.storybook/addon-fluent/preset/manager.mjs
+++ b/browser/components/storybook/.storybook/addon-fluent/preset/manager.mjs
@@ -4,13 +4,10 @@
/** This file handles registering the Storybook addon */
-// eslint-disable-next-line no-unused-vars
-import React from "react";
-import { addons, types } from "@storybook/addons";
+import { addons, types } from "@storybook/manager-api";
import { ADDON_ID, PANEL_ID, TOOL_ID } from "../constants.mjs";
-import { PseudoLocalizationButton } from "../PseudoLocalizationButton.mjs";
-// eslint-disable-next-line no-unused-vars
-import { FluentPanel } from "../FluentPanel.mjs";
+import { PseudoLocalizationButton } from "../PseudoLocalizationButton.jsx";
+import { FluentPanel } from "../FluentPanel.jsx";
// Register the addon.
addons.register(ADDON_ID, api => {
@@ -27,8 +24,6 @@ addons.register(ADDON_ID, api => {
title: "Fluent",
//👇 Sets the type of UI element in Storybook
type: types.PANEL,
- render: ({ active, key }) => (
- <FluentPanel active={active} api={api} key={key}></FluentPanel>
- ),
+ render: ({ active }) => FluentPanel({ active }),
});
});
diff --git a/browser/components/storybook/.storybook/addon-fluent/withPseudoLocalization.mjs b/browser/components/storybook/.storybook/addon-fluent/withPseudoLocalization.mjs
index 9d6c62af38..74fd67a6cd 100644
--- a/browser/components/storybook/.storybook/addon-fluent/withPseudoLocalization.mjs
+++ b/browser/components/storybook/.storybook/addon-fluent/withPseudoLocalization.mjs
@@ -2,7 +2,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-import { useEffect, useGlobals, addons } from "@storybook/addons";
+import { useEffect, useGlobals, useChannel } from "@storybook/preview-api";
import {
DIRECTIONS,
DIRECTION_BY_STRATEGY,
@@ -25,11 +25,11 @@ export const withPseudoLocalization = (StoryFn, context) => {
const [{ pseudoStrategy }] = useGlobals();
const direction = DIRECTION_BY_STRATEGY[pseudoStrategy] || DIRECTIONS.ltr;
const isInDocs = context.viewMode === "docs";
- const channel = addons.getChannel();
+ const emit = useChannel({});
useEffect(() => {
if (pseudoStrategy) {
- channel.emit(UPDATE_STRATEGY_EVENT, pseudoStrategy);
+ emit(UPDATE_STRATEGY_EVENT, pseudoStrategy);
}
}, [pseudoStrategy]);
@@ -56,8 +56,7 @@ export const withPseudoLocalization = (StoryFn, context) => {
*/
export const withFluentStrings = (StoryFn, context) => {
const [{ fluentStrings }, updateGlobals] = useGlobals();
- const channel = addons.getChannel();
-
+ const emit = useChannel({});
const fileName = context.component + ".ftl";
let strings = [];
@@ -83,7 +82,7 @@ export const withFluentStrings = (StoryFn, context) => {
}
}
- channel.emit(FLUENT_CHANGED, strings);
+ emit(FLUENT_CHANGED, strings, fileName);
return StoryFn();
};
diff --git a/browser/components/storybook/.storybook/main.js b/browser/components/storybook/.storybook/main.js
index 3e42f778a4..5791d1e492 100644
--- a/browser/components/storybook/.storybook/main.js
+++ b/browser/components/storybook/.storybook/main.js
@@ -6,6 +6,7 @@
const path = require("path");
const webpack = require("webpack");
const rewriteChromeUri = require("./chrome-uri-utils.js");
+const mdIndexer = require("./markdown-story-indexer.js");
const projectRoot = path.resolve(__dirname, "../../../../");
@@ -37,34 +38,35 @@ module.exports = {
path.resolve(__dirname, "addon-fluent"),
path.resolve(__dirname, "addon-component-status"),
],
- framework: "@storybook/web-components",
+ framework: {
+ name: "@storybook/web-components-webpack5",
+ options: {},
+ },
+
+ experimental_indexers: async existingIndexers => {
+ const customIndexer = {
+ test: /(stories|story)\.md$/,
+ createIndex: mdIndexer,
+ };
+ return [...existingIndexers, customIndexer];
+ },
webpackFinal: async (config, { configType }) => {
// `configType` has a value of 'DEVELOPMENT' or 'PRODUCTION'
// You can change the configuration based on that.
// 'PRODUCTION' is used when building the static version of storybook.
// Make whatever fine-grained changes you need
- config.resolve.alias.browser = `${projectRoot}/browser`;
- config.resolve.alias.toolkit = `${projectRoot}/toolkit`;
- config.resolve.alias[
- "toolkit-widgets"
- ] = `${projectRoot}/toolkit/content/widgets/`;
- config.resolve.alias[
- "lit.all.mjs"
- ] = `${projectRoot}/toolkit/content/widgets/vendor/lit.all.mjs`;
- // @mdx-js/react@1.x.x versions don't get hoisted to the root node_modules
- // folder due to the versions of React it accepts as a peer dependency. That
- // means we have to go one level deeper and look in the node_modules of
- // @storybook/addon-docs, which depends on @mdx-js/react.
- config.resolve.alias["@storybook/addon-docs"] =
- "browser/components/storybook/node_modules/@storybook/addon-docs";
- config.resolve.alias["@mdx-js/react"] =
- "@storybook/addon-docs/node_modules/@mdx-js/react";
-
- // The @storybook/web-components project uses lit-html. Redirect it to our
- // bundled version.
- config.resolve.alias["lit-html/directive-helpers.js"] = "lit.all.mjs";
- config.resolve.alias["lit-html"] = "lit.all.mjs";
+ config.resolve.alias = {
+ browser: `${projectRoot}/browser`,
+ toolkit: `${projectRoot}/toolkit`,
+ "toolkit-widgets": `${projectRoot}/toolkit/content/widgets/`,
+ "lit.all.mjs": `${projectRoot}/toolkit/content/widgets/vendor/lit.all.mjs`,
+ react: "browser/components/storybook/node_modules/react",
+ "react/jsx-runtime":
+ "browser/components/storybook/node_modules/react/jsx-runtime",
+ "@storybook/addon-docs":
+ "browser/components/storybook/node_modules/@storybook/addon-docs",
+ };
config.plugins.push(
// Rewrite chrome:// URI imports to file system paths.
@@ -147,7 +149,4 @@ module.exports = {
// Return the altered config
return config;
},
- core: {
- builder: "webpack5",
- },
};
diff --git a/browser/components/storybook/.storybook/markdown-story-indexer.js b/browser/components/storybook/.storybook/markdown-story-indexer.js
new file mode 100644
index 0000000000..7a03f94844
--- /dev/null
+++ b/browser/components/storybook/.storybook/markdown-story-indexer.js
@@ -0,0 +1,50 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+/* eslint-env node */
+
+const { loadCsf } = require("@storybook/csf-tools");
+const { compile } = require("@storybook/mdx2-csf");
+const { getStoryTitle, getMDXSource } = require("./markdown-story-utils.js");
+const fs = require("fs");
+
+/**
+ * Function that tells Storybook how to index markdown based stories. This is
+ * responsible for Storybook knowing how to populate the sidebar in the
+ * Storybook UI, then retrieve the relevant file when a story is selected. In
+ * order to get the data Storybook needs, we have to convert the markdown to
+ * MDX, the convert that to CSF.
+ * More info on indexers can be found here: storybook.js.org/docs/api/main-config-indexers
+ * @param {string} fileName - Path to the file being processed.
+ * @param {Object} opts - Options to configure the indexer.
+ * @returns Array of IndexInput objects.
+ */
+module.exports = async (fileName, opts) => {
+ // eslint-disable-next-line no-unsanitized/method
+ const content = fs.readFileSync(fileName, "utf8");
+ const title = getStoryTitle(fileName);
+ const code = getMDXSource(content, title);
+
+ // Compile MDX into CSF
+ const csfCode = await compile(code, opts);
+
+ // Parse CSF component
+ let csf = loadCsf(csfCode, { fileName, makeTitle: () => title }).parse();
+
+ // Return an array of story indexes.
+ // Cribbed from https://github.com/storybookjs/storybook/blob/4169cd5b4ec9111de69f64a5e06edab9a6d2b0b8/code/addons/docs/src/preset.ts#L189
+ const { indexInputs, stories } = csf;
+ return indexInputs.map((input, index) => {
+ const docsOnly = stories[index].parameters?.docsOnly;
+ const tags = input.tags ? input.tags : [];
+ if (docsOnly) {
+ tags.push("stories-mdx-docsOnly");
+ }
+ // the mdx-csf compiler automatically adds the 'stories-mdx' tag to meta,
+ // here' we're just making sure it is always there
+ if (!tags.includes("stories-mdx")) {
+ tags.push("stories-mdx");
+ }
+ return { ...input, tags };
+ });
+};
diff --git a/browser/components/storybook/.storybook/markdown-story-loader.js b/browser/components/storybook/.storybook/markdown-story-loader.js
index b11036af74..f1848d0e82 100644
--- a/browser/components/storybook/.storybook/markdown-story-loader.js
+++ b/browser/components/storybook/.storybook/markdown-story-loader.js
@@ -15,71 +15,7 @@
* Storybook usually uses to transform MDX files.
*/
-const path = require("path");
-const fs = require("fs");
-
-const projectRoot = path.resolve(__dirname, "../../../../");
-
-/**
- * Takes a file path and returns a string to use as the story title, capitalized
- * and split into multiple words. The file name gets transformed into the story
- * name, which will be visible in the Storybook sidebar. For example, either:
- *
- * /stories/hello-world.stories.md or /stories/helloWorld.md
- *
- * will result in a story named "Hello World".
- *
- * @param {string} filePath - path of the file being processed.
- * @returns {string} The title of the story.
- */
-function getStoryTitle(filePath) {
- let fileName = path.basename(filePath, ".stories.md");
- if (fileName != "README") {
- try {
- let relatedFilePath = path.resolve(
- "../../../",
- filePath.replace(".md", ".mjs")
- );
- let relatedFile = fs.readFileSync(relatedFilePath).toString();
- let relatedTitle = relatedFile.match(/title: "(.*)"/)[1];
- if (relatedTitle) {
- return relatedTitle + "/README";
- }
- } catch {}
- }
- return separateWords(fileName);
-}
-
-/**
- * Splits a string into multiple capitalized words e.g. hello-world, helloWorld,
- * and hello.world all become "Hello World."
- * @param {string} str - String in any case.
- * @returns {string} The string split into multiple words.
- */
-function separateWords(str) {
- return (
- str
- .match(/[A-Z]?[a-z0-9]+/g)
- ?.map(text => text[0].toUpperCase() + text.substring(1))
- .join(" ") || str
- );
-}
-
-/**
- * Enables rendering code in our markdown docs by parsing the source for
- * annotated code blocks and replacing them with Storybook's Canvas component.
- * @param {string} source - Stringified markdown source code.
- * @returns {string} Source with code blocks replaced by Canvas components.
- */
-function parseStoriesFromMarkdown(source) {
- let storiesRegex = /```(?:js|html) story\n(?<code>[\s\S]*?)```/g;
- // $code comes from the <code> capture group in the regex above. It consists
- // of any code in between backticks and gets run when used in a Canvas component.
- return source.replace(
- storiesRegex,
- "<Canvas withSource='none'><with-common-styles>\n$<code></with-common-styles></Canvas>"
- );
-}
+const { getStoryTitle, getMDXSource } = require("./markdown-story-utils.js");
/**
* The WebpackLoader export. Takes markdown as its source and returns a docs
@@ -89,61 +25,8 @@ function parseStoriesFromMarkdown(source) {
* @param {string} source - The markdown source to rewrite to MDX.
*/
module.exports = function markdownStoryLoader(source) {
- // Currently we sort docs only stories under "Docs" by default.
- let storyPath = "Docs";
-
// `this.resourcePath` is the path of the file being processed.
- let relativePath = path
- .relative(projectRoot, this.resourcePath)
- .replaceAll(path.sep, "/");
- let componentName;
-
- if (relativePath.includes("toolkit/content/widgets")) {
- let storyNameRegex = /(?<=\/widgets\/)(?<name>.*?)(?=\/)/g;
- componentName = storyNameRegex.exec(relativePath)?.groups?.name;
- if (componentName) {
- // Get the common name for a component e.g. Toggle for moz-toggle
- storyPath =
- "UI Widgets/" + separateWords(componentName).replace(/^Moz/g, "");
- }
- }
-
- let storyTitle = getStoryTitle(relativePath);
- let title = storyTitle.includes("/")
- ? storyTitle
- : `${storyPath}/${storyTitle}`;
-
- let componentStories;
- if (componentName) {
- componentStories = this.resourcePath
- .replace("README", componentName)
- .replace(".md", ".mjs");
- try {
- fs.statSync(componentStories);
- componentStories = "./" + path.basename(componentStories);
- } catch {
- componentStories = null;
- }
- }
-
- // Unfortunately the indentation/spacing here seems to be important for the
- // MDX parser to know what to do in the next step of the Webpack process.
- let mdxSource = `
-import { Meta, Description, Canvas, Story } from "@storybook/addon-docs";
-${componentStories ? `import * as Stories from "${componentStories}";` : ""}
-
-<Meta
- title="${title}"
- ${componentStories ? `of={Stories}` : ""}
- parameters={{
- previewTabs: {
- canvas: { hidden: true },
- },
- viewMode: "docs",
- }}
-/>
-
-${parseStoriesFromMarkdown(source)}`;
-
+ let title = getStoryTitle(this.resourcePath);
+ let mdxSource = getMDXSource(source, title, this.resourcePath);
return mdxSource;
};
diff --git a/browser/components/storybook/.storybook/markdown-story-utils.js b/browser/components/storybook/.storybook/markdown-story-utils.js
new file mode 100644
index 0000000000..1cc78164ad
--- /dev/null
+++ b/browser/components/storybook/.storybook/markdown-story-utils.js
@@ -0,0 +1,197 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+/* eslint-env node */
+
+const path = require("path");
+const fs = require("fs");
+
+const projectRoot = path.resolve(__dirname, "../../../../");
+
+/**
+ * Takes a file path and returns a string to use as the story title, capitalized
+ * and split into multiple words. The file name gets transformed into the story
+ * name, which will be visible in the Storybook sidebar. For example, either:
+ *
+ * /stories/hello-world.stories.md or /stories/helloWorld.md
+ *
+ * will result in a story named "Hello World".
+ *
+ * @param {string} filePath - path of the file being processed.
+ * @returns {string} The title of the story.
+ */
+function getTitleFromPath(filePath) {
+ let fileName = path.basename(filePath, ".stories.md");
+ if (fileName != "README") {
+ try {
+ let relatedFilePath = path.resolve(
+ "../../../",
+ filePath.replace(".md", ".mjs")
+ );
+ let relatedFile = fs.readFileSync(relatedFilePath).toString();
+ let relatedTitle = relatedFile.match(/title: "(.*)"/)[1];
+ if (relatedTitle) {
+ return relatedTitle + "/README";
+ }
+ } catch {}
+ }
+ return separateWords(fileName);
+}
+
+/**
+ * Splits a string into multiple capitalized words e.g. hello-world, helloWorld,
+ * and hello.world all become "Hello World."
+ * @param {string} str - String in any case.
+ * @returns {string} The string split into multiple words.
+ */
+function separateWords(str) {
+ return (
+ str
+ .match(/[A-Z]?[a-z0-9]+/g)
+ ?.map(text => text[0].toUpperCase() + text.substring(1))
+ .join(" ") || str
+ );
+}
+
+/**
+ * Enables rendering code in our markdown docs by parsing the source for
+ * annotated code blocks and replacing them with Storybook's Canvas component.
+ * @param {string} source - Stringified markdown source code.
+ * @returns {string} Source with code blocks replaced by Canvas components.
+ */
+function parseStoriesFromMarkdown(source) {
+ let storiesRegex = /```(?:js|html) story\n(?<code>[\s\S]*?)```/g;
+ // $code comes from the <code> capture group in the regex above. It consists
+ // of any code in between backticks and gets run when used in a Canvas component.
+ return source.replace(
+ storiesRegex,
+ "<Canvas withSource='none'><with-common-styles>\n$<code></with-common-styles></Canvas>"
+ );
+}
+
+/**
+ * Finds the name of the component for files in toolkit widgets.
+ * @param {string} resourcePath - Path to the file being processed.
+ * @returns The component name e.g. "moz-toggle"
+ */
+function getComponentName(resourcePath) {
+ let componentName = "";
+ if (resourcePath.includes("toolkit/content/widgets")) {
+ let storyNameRegex = /(?<=\/widgets\/)(?<name>.*?)(?=\/)/g;
+ componentName = storyNameRegex.exec(resourcePath)?.groups?.name;
+ }
+ return componentName;
+}
+
+/**
+ * Figures out where a markdown based story should live in Storybook i.e.
+ * whether it belongs under "Docs" or "UI Widgets" as well as what name to
+ * display in the sidebar.
+ * @param {string} resourcePath - Path to the file being processed.
+ * @returns {string} The title of the story.
+ */
+function getStoryTitle(resourcePath) {
+ // Currently we sort docs only stories under "Docs" by default.
+ let storyPath = "Docs";
+
+ let relativePath = path
+ .relative(projectRoot, resourcePath)
+ .replaceAll(path.sep, "/");
+
+ let componentName = getComponentName(relativePath);
+ if (componentName) {
+ // Get the common name for a component e.g. Toggle for moz-toggle
+ storyPath =
+ "UI Widgets/" + separateWords(componentName).replace(/^Moz/g, "");
+ }
+
+ let storyTitle = getTitleFromPath(relativePath);
+ let title = storyTitle.includes("/")
+ ? storyTitle
+ : `${storyPath}/${storyTitle}`;
+ return title;
+}
+
+/**
+ * Figures out the path to import a component for cases where we have
+ * interactive examples in the docs that require the component to have been
+ * loaded. This wasn't necessary prior to Storybook V7 since everything was
+ * loaded up front; now stories are loaded on demand.
+ * @param {string} resourcePath - Path to the file being processed.
+ * @returns Path used to import a component into a story.
+ */
+function getImportPath(resourcePath) {
+ // Limiting this to toolkit widgets for now since we don't have any
+ // interactive examples in other docs stories.
+ if (!resourcePath.includes("toolkit/content/widgets")) {
+ return "";
+ }
+ let componentName = getComponentName(resourcePath);
+ let fileExtension = "";
+ if (componentName) {
+ let mjsPath = resourcePath.replace(
+ "README.stories.md",
+ `${componentName}.mjs`
+ );
+ let jsPath = resourcePath.replace(
+ "README.stories.md",
+ `${componentName}.js`
+ );
+
+ if (fs.existsSync(mjsPath)) {
+ fileExtension = "mjs";
+ } else if (fs.existsSync(jsPath)) {
+ fileExtension = "js";
+ } else {
+ return "";
+ }
+ }
+ return `"toolkit-widgets/${componentName}/${componentName}.${fileExtension}"`;
+}
+
+/**
+ * Takes markdown and re-writes it to MDX. Conditionally includes a table of
+ * arguments when we're documenting a component.
+ * @param {string} source - The markdown source to rewrite to MDX.
+ * @param {string} title - The title of the story.
+ * @param {string} resourcePath - Path to the file being processed.
+ * @returns The markdown source converted to MDX.
+ */
+function getMDXSource(source, title, resourcePath = "") {
+ let importPath = getImportPath(resourcePath);
+ let componentName = getComponentName(resourcePath);
+
+ // Unfortunately the indentation/spacing here seems to be important for the
+ // MDX parser to know what to do in the next step of the Webpack process.
+ let mdxSource = `
+import { Meta, Canvas, ArgTypes } from "@storybook/addon-docs";
+${importPath ? `import ${importPath};` : ""}
+
+<Meta
+ title="${title}"
+ parameters={{
+ previewTabs: {
+ canvas: { hidden: true },
+ },
+ viewMode: "docs",
+ }}
+/>
+
+${parseStoriesFromMarkdown(source)}
+
+${
+ importPath &&
+ `
+## Args Table
+
+<ArgTypes of={"${componentName}"} />
+`
+}`;
+
+ return mdxSource;
+}
+
+module.exports = {
+ getMDXSource,
+ getStoryTitle,
+};
diff --git a/browser/components/storybook/.storybook/preview-head.html b/browser/components/storybook/.storybook/preview-head.html
index c2f9e8d1a2..206972e714 100644
--- a/browser/components/storybook/.storybook/preview-head.html
+++ b/browser/components/storybook/.storybook/preview-head.html
@@ -21,6 +21,15 @@
text-decoration: underline !important;
}
+ div:has(p, .toc-wrapper) {
+ width: unset !important;
+ min-width: 10rem !important;
+ }
+
+ .toc-wrapper {
+ margin-inline-end: 8px;
+ }
+
/* Override the default Storybook padding in favour of styles
provided by our WithCommonStyles wrapper */
.sb-show-main.sb-main-padded {
diff --git a/browser/components/storybook/.storybook/preview.mjs b/browser/components/storybook/.storybook/preview.mjs
index acff43b7c0..4e0f3f407d 100644
--- a/browser/components/storybook/.storybook/preview.mjs
+++ b/browser/components/storybook/.storybook/preview.mjs
@@ -94,15 +94,27 @@ class WithCommonStyles extends MozLitElement {
customElements.define("with-common-styles", WithCommonStyles);
// Wrap all stories in `with-common-styles`.
-export const decorators = [
- (story, context) =>
- html`
- <with-common-styles
- .story=${story}
- .context=${context}
- ></with-common-styles>
- `,
-];
+export default {
+ decorators: [
+ (story, context) =>
+ html`
+ <with-common-styles
+ .story=${story}
+ .context=${context}
+ ></with-common-styles>
+ `,
+ ],
+ parameters: {
+ docs: {
+ toc: {
+ disable: false,
+ headingSelector: "h2, h3",
+ ignoreSelector: "h2.text-truncated-ellipsis, .toc-ignore",
+ title: "On this page",
+ },
+ },
+ },
+};
// Enable props tables documentation.
setCustomElementsManifest(customElementsManifest);
diff --git a/browser/components/storybook/docs/README.typography.stories.md b/browser/components/storybook/docs/README.typography.stories.md
index 4b85d59ef8..de0913f4ba 100644
--- a/browser/components/storybook/docs/README.typography.stories.md
+++ b/browser/components/storybook/docs/README.typography.stories.md
@@ -23,7 +23,7 @@ We also don't specify line height units and rely on the default.
<td><code>h1,<br/>.heading-xlarge</code></td>
<td>
```html story
- <h1 class="text-truncated-ellipsis">The quick brown fox jumps over the lazy dog</h1>
+ <h1 class="text-truncated-ellipsis toc-ignore">The quick brown fox jumps over the lazy dog</h1>
```
</td>
<td>
@@ -38,7 +38,7 @@ We also don't specify line height units and rely on the default.
<td><code>h2,<br/>.heading-large</code></td>
<td>
```html story
- <h2 class="text-truncated-ellipsis">The quick brown fox jumps over the lazy dog</h2>
+ <h2 class="text-truncated-ellipsis toc-ignore">The quick brown fox jumps over the lazy dog</h2>
```
</td>
<td>
@@ -53,7 +53,7 @@ We also don't specify line height units and rely on the default.
<td><code>h3,<br/>.heading-medium</code></td>
<td >
```html story
- <h3 class="text-truncated-ellipsis">The quick brown fox jumps over the lazy dog</h3>
+ <h3 class="text-truncated-ellipsis toc-ignore">The quick brown fox jumps over the lazy dog</h3>
```
</td>
<td>
@@ -260,7 +260,7 @@ Type setting relies on design tokens for font size and font weight.
<tbody>
<tr>
<th>
- <code>--font-weight-default</code>
+ <code>--font-weight</code>
</th>
<td>
<code>normal</code>
@@ -324,7 +324,7 @@ h1,
##### Large (h2)
```html story
- <h2>Recent browsing</h2>
+ <h2 class="toc-ignore">Recent browsing</h2>
```
```css story
diff --git a/browser/components/storybook/package-lock.json b/browser/components/storybook/package-lock.json
index 15610f69c5..33873d40a1 100644
--- a/browser/components/storybook/package-lock.json
+++ b/browser/components/storybook/package-lock.json
@@ -10,17 +10,21 @@
"license": "MPL-2.0",
"devDependencies": {
"@babel/core": "^7.16.0",
+ "@babel/preset-env": "^7.23.6",
+ "@babel/preset-react": "^7.23.3",
"@custom-elements-manifest/analyzer": "^0.6.6",
"@fluent/bundle": "^0.17.1",
"@fluent/dom": "^0.8.1",
- "@storybook/addon-a11y": "^6.5.15",
- "@storybook/addon-actions": "^6.4.8",
- "@storybook/addon-essentials": "^6.4.8",
- "@storybook/addon-links": "^6.4.8",
- "@storybook/builder-webpack5": "^6.4.8",
- "@storybook/manager-webpack5": "^6.4.8",
- "@storybook/web-components": "^6.4.8",
- "babel-loader": "^8.2.3"
+ "@storybook/addon-a11y": "^7.6.4",
+ "@storybook/addon-actions": "^7.6.4",
+ "@storybook/addon-essentials": "^7.6.4",
+ "@storybook/addon-links": "^7.6.4",
+ "@storybook/web-components": "^7.6.4",
+ "@storybook/web-components-webpack5": "^7.6.4",
+ "babel-loader": "^8.2.3",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "storybook": "^7.6.4"
}
},
"node_modules/@ampproject/remapping": {
@@ -36,48 +40,61 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@aw-web-design/x-default-browser": {
+ "version": "1.4.126",
+ "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz",
+ "integrity": "sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==",
+ "dev": true,
+ "dependencies": {
+ "default-browser-id": "3.0.0"
+ },
+ "bin": {
+ "x-default-browser": "bin/x-default-browser.js"
+ }
+ },
"node_modules/@babel/code-frame": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
- "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.18.6"
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/compat-data": {
- "version": "7.20.10",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz",
- "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
+ "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.20.12",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz",
- "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==",
- "dev": true,
- "dependencies": {
- "@ampproject/remapping": "^2.1.0",
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.20.7",
- "@babel/helper-compilation-targets": "^7.20.7",
- "@babel/helper-module-transforms": "^7.20.11",
- "@babel/helpers": "^7.20.7",
- "@babel/parser": "^7.20.7",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.20.12",
- "@babel/types": "^7.20.7",
- "convert-source-map": "^1.7.0",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz",
+ "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==",
+ "dev": true,
+ "dependencies": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-compilation-targets": "^7.23.6",
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helpers": "^7.23.6",
+ "@babel/parser": "^7.23.6",
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
@@ -87,14 +104,24 @@
"url": "https://opencollective.com/babel"
}
},
+ "node_modules/@babel/core/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,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/@babel/generator": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz",
- "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.20.7",
+ "@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
},
"engines": {
@@ -102,9 +129,9 @@
}
},
"node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "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",
@@ -116,63 +143,69 @@
}
},
"node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
- "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+ "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.18.6"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz",
- "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
+ "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
"dev": true,
"dependencies": {
- "@babel/helper-explode-assignable-expression": "^7.18.6",
- "@babel/types": "^7.18.9"
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
- "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
+ "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.20.5",
- "@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.21.3",
+ "@babel/compat-data": "^7.23.5",
+ "@babel/helper-validator-option": "^7.23.5",
+ "browserslist": "^4.22.2",
"lru-cache": "^5.1.1",
- "semver": "^6.3.0"
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
+ }
+ },
+ "node_modules/@babel/helper-compilation-targets/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,
+ "bin": {
+ "semver": "bin/semver.js"
}
},
"node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.20.12",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz",
- "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz",
+ "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.19.0",
- "@babel/helper-member-expression-to-functions": "^7.20.7",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-replace-supers": "^7.20.7",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
- "@babel/helper-split-export-declaration": "^7.18.6"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-member-expression-to-functions": "^7.23.0",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.20",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
@@ -181,14 +214,24 @@
"@babel/core": "^7.0.0"
}
},
+ "node_modules/@babel/helper-create-class-features-plugin/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,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz",
- "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
+ "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "regexpu-core": "^5.2.1"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "regexpu-core": "^5.3.1",
+ "semver": "^6.3.1"
},
"engines": {
"node": ">=6.9.0"
@@ -197,143 +240,138 @@
"@babel/core": "^7.0.0"
}
},
+ "node_modules/@babel/helper-create-regexp-features-plugin/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,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
"node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz",
- "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==",
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz",
+ "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==",
"dev": true,
"dependencies": {
- "@babel/helper-compilation-targets": "^7.17.7",
- "@babel/helper-plugin-utils": "^7.16.7",
+ "@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",
- "semver": "^6.1.2"
+ "resolve": "^1.14.2"
},
"peerDependencies": {
- "@babel/core": "^7.4.0-0"
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/@babel/helper-environment-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
- "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@babel/helper-explode-assignable-expression": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz",
- "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
"node_modules/@babel/helper-function-name": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
- "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.18.10",
- "@babel/types": "^7.19.0"
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "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.18.6"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz",
- "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
+ "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.20.7"
+ "@babel/types": "^7.23.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
- "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz",
- "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.20.2",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.19.1",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.20.10",
- "@babel/types": "^7.20.7"
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
+ "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-validator-identifier": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
- "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
+ "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.18.6"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-plugin-utils": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
- "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
+ "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.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz",
- "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
+ "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
"dev": true,
"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"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-wrap-function": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
@@ -343,122 +381,121 @@
}
},
"node_modules/@babel/helper-replace-supers": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz",
- "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz",
+ "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-member-expression-to-functions": "^7.20.7",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.20.7",
- "@babel/types": "^7.20.7"
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-member-expression-to-functions": "^7.22.15",
+ "@babel/helper-optimise-call-expression": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.0.0"
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
- "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
+ "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.20.2"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
- "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
+ "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.20.0"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.19.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
- "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
- "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
- "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
+ "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-wrap-function": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
- "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
+ "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
"dev": true,
"dependencies": {
- "@babel/helper-function-name": "^7.19.0",
- "@babel/template": "^7.18.10",
- "@babel/traverse": "^7.20.5",
- "@babel/types": "^7.20.5"
+ "@babel/helper-function-name": "^7.22.5",
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.22.19"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz",
- "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz",
+ "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.20.7",
- "@babel/types": "^7.20.7"
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.6",
+ "@babel/types": "^7.23.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
"js-tokens": "^4.0.0"
},
"engines": {
@@ -466,9 +503,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz",
- "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -478,12 +515,12 @@
}
},
"node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.18.6",
- "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.18.6.tgz",
- "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
+ "version": "7.23.3",
+ "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.23.3.tgz",
+ "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -493,14 +530,14 @@
}
},
"node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz",
- "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz",
+ "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==",
"dev": true,
"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"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.23.3"
},
"engines": {
"node": ">=6.9.0"
@@ -509,68 +546,53 @@
"@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==",
+ "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz",
+ "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==",
"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"
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-proposal-class-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
- "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
+ "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-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-class-static-block": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz",
- "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==",
+ "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-create-class-features-plugin": "^7.20.7",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-class-static-block": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@babel/helper-plugin-utils": "^7.12.13"
},
"peerDependencies": {
- "@babel/core": "^7.12.0"
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-decorators": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.7.tgz",
- "integrity": "sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A==",
+ "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-create-class-features-plugin": "^7.20.7",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-replace-supers": "^7.20.7",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/plugin-syntax-decorators": "^7.19.0"
+ "@babel/helper-plugin-utils": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
@@ -579,46 +601,37 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-dynamic-import": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz",
- "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==",
+ "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.18.6",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-export-default-from": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz",
- "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==",
+ "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.18.9",
- "@babel/plugin-syntax-export-default-from": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@babel/helper-plugin-utils": "^7.8.3"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-export-namespace-from": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz",
- "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==",
+ "node_modules/@babel/plugin-syntax-flow": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz",
+ "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.9",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -627,14 +640,13 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-json-strings": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz",
- "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==",
+ "node_modules/@babel/plugin-syntax-import-assertions": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz",
+ "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-json-strings": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -643,14 +655,13 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-logical-assignment-operators": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz",
- "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==",
+ "node_modules/@babel/plugin-syntax-import-attributes": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz",
+ "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -659,49 +670,37 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
- "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
+ "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.18.6",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@babel/helper-plugin-utils": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-numeric-separator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
- "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
+ "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.18.6",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-object-rest-spread": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz",
- "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==",
+ "node_modules/@babel/plugin-syntax-jsx": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
+ "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
"dev": true,
"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"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -710,93 +709,70 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
- "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
+ "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.18.6",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@babel/helper-plugin-utils": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-optional-chaining": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz",
- "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==",
+ "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.20.2",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@babel/helper-plugin-utils": "^7.8.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-private-methods": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
- "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
+ "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-create-class-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@babel/helper-plugin-utils": "^7.10.4"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-proposal-private-property-in-object": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz",
- "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==",
+ "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-annotate-as-pure": "^7.18.6",
- "@babel/helper-create-class-features-plugin": "^7.20.5",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
+ "@babel/helper-plugin-utils": "^7.8.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==",
+ "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-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=4"
+ "@babel/helper-plugin-utils": "^7.8.0"
},
"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==",
+ "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"
@@ -805,22 +781,25 @@
"@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==",
+ "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.12.13"
+ "@babel/helper-plugin-utils": "^7.14.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-class-static-block": {
+ "node_modules/@babel/plugin-syntax-top-level-await": {
"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==",
+ "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"
@@ -832,13 +811,13 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-decorators": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz",
- "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==",
+ "node_modules/@babel/plugin-syntax-typescript": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
+ "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.19.0"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -847,25 +826,29 @@
"@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==",
+ "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-plugin-utils": "^7.8.0"
+ "@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"
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-syntax-export-default-from": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz",
- "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==",
+ "node_modules/@babel/plugin-transform-arrow-functions": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz",
+ "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -874,25 +857,33 @@
"@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==",
+ "node_modules/@babel/plugin-transform-async-generator-functions": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz",
+ "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.20",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz",
- "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==",
+ "node_modules/@babel/plugin-transform-async-to-generator": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz",
+ "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.19.0"
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
@@ -901,37 +892,44 @@
"@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==",
+ "node_modules/@babel/plugin-transform-block-scoped-functions": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz",
+ "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
},
"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==",
+ "node_modules/@babel/plugin-transform-block-scoping": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz",
+ "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
},
"peerDependencies": {
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
- "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "node_modules/@babel/plugin-transform-class-properties": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz",
+ "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-create-class-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -940,85 +938,116 @@
"@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==",
+ "node_modules/@babel/plugin-transform-class-static-block": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz",
+ "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-create-class-features-plugin": "^7.22.15",
+ "@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.0.0-0"
+ "@babel/core": "^7.12.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"
+ "node_modules/@babel/plugin-transform-classes": {
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz",
+ "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.20",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "globals": "^11.1.0"
+ },
+ "engines": {
+ "node": ">=6.9.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==",
+ "node_modules/@babel/plugin-transform-computed-properties": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz",
+ "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/template": "^7.22.15"
+ },
+ "engines": {
+ "node": ">=6.9.0"
},
"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==",
+ "node_modules/@babel/plugin-transform-destructuring": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz",
+ "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.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==",
+ "node_modules/@babel/plugin-transform-dotall-regex": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz",
+ "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
+ "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.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==",
+ "node_modules/@babel/plugin-transform-duplicate-keys": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz",
+ "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
+ "@babel/helper-plugin-utils": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.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==",
+ "node_modules/@babel/plugin-transform-dynamic-import": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz",
+ "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1027,13 +1056,14 @@
"@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==",
+ "node_modules/@babel/plugin-transform-exponentiation-operator": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz",
+ "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1042,13 +1072,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz",
- "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==",
+ "node_modules/@babel/plugin-transform-export-namespace-from": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz",
+ "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.19.0"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1057,13 +1088,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz",
- "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==",
+ "node_modules/@babel/plugin-transform-flow-strip-types": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz",
+ "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-flow": "^7.23.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1072,15 +1104,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz",
- "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==",
+ "node_modules/@babel/plugin-transform-for-of": {
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz",
+ "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==",
"dev": true,
"dependencies": {
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-remap-async-to-generator": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1089,13 +1120,15 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
- "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
+ "node_modules/@babel/plugin-transform-function-name": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz",
+ "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1104,13 +1137,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz",
- "integrity": "sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==",
+ "node_modules/@babel/plugin-transform-json-strings": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz",
+ "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1119,21 +1153,13 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-classes": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz",
- "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==",
- "dev": true,
- "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.19.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"
+ "node_modules/@babel/plugin-transform-literals": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz",
+ "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1142,14 +1168,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz",
- "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==",
+ "node_modules/@babel/plugin-transform-logical-assignment-operators": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz",
+ "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/template": "^7.20.7"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
},
"engines": {
"node": ">=6.9.0"
@@ -1158,13 +1184,13 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz",
- "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==",
+ "node_modules/@babel/plugin-transform-member-expression-literals": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz",
+ "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1173,14 +1199,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
- "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
+ "node_modules/@babel/plugin-transform-modules-amd": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz",
+ "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1189,13 +1215,15 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz",
- "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==",
+ "node_modules/@babel/plugin-transform-modules-commonjs": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz",
+ "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-simple-access": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1204,14 +1232,16 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
- "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
+ "node_modules/@babel/plugin-transform-modules-systemjs": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz",
+ "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==",
"dev": true,
"dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
@@ -1220,13 +1250,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-for-of": {
- "version": "7.18.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz",
- "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==",
+ "node_modules/@babel/plugin-transform-modules-umd": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz",
+ "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1235,30 +1266,29 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-function-name": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz",
- "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==",
+ "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-compilation-targets": "^7.18.9",
- "@babel/helper-function-name": "^7.18.9",
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@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"
+ "@babel/core": "^7.0.0"
}
},
- "node_modules/@babel/plugin-transform-literals": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz",
- "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==",
+ "node_modules/@babel/plugin-transform-new-target": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz",
+ "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1267,13 +1297,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
- "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
+ "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz",
+ "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1282,14 +1313,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz",
- "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==",
+ "node_modules/@babel/plugin-transform-numeric-separator": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz",
+ "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.20.11",
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
},
"engines": {
"node": ">=6.9.0"
@@ -1298,15 +1329,17 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz",
- "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==",
+ "node_modules/@babel/plugin-transform-object-rest-spread": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz",
+ "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.20.11",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-simple-access": "^7.20.2"
+ "@babel/compat-data": "^7.23.3",
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.23.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1315,16 +1348,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz",
- "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==",
+ "node_modules/@babel/plugin-transform-object-super": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz",
+ "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==",
"dev": true,
"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"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.20"
},
"engines": {
"node": ">=6.9.0"
@@ -1333,14 +1364,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
- "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
+ "node_modules/@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz",
+ "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==",
"dev": true,
"dependencies": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1349,29 +1380,30 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
- "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
+ "node_modules/@babel/plugin-transform-optional-chaining": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz",
+ "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.20.5",
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@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"
+ "@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-new-target": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz",
- "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==",
+ "node_modules/@babel/plugin-transform-parameters": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz",
+ "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1380,14 +1412,14 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-object-super": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
- "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
+ "node_modules/@babel/plugin-transform-private-methods": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz",
+ "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.6"
+ "@babel/helper-create-class-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1396,13 +1428,16 @@
"@babel/core": "^7.0.0-0"
}
},
- "node_modules/@babel/plugin-transform-parameters": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz",
- "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==",
+ "node_modules/@babel/plugin-transform-private-property-in-object": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz",
+ "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1412,12 +1447,12 @@
}
},
"node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
- "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz",
+ "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1427,12 +1462,12 @@
}
},
"node_modules/@babel/plugin-transform-react-display-name": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz",
- "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz",
+ "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1442,16 +1477,16 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz",
- "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz",
+ "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-jsx": "^7.18.6",
- "@babel/types": "^7.20.7"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-jsx": "^7.23.3",
+ "@babel/types": "^7.23.4"
},
"engines": {
"node": ">=6.9.0"
@@ -1461,12 +1496,12 @@
}
},
"node_modules/@babel/plugin-transform-react-jsx-development": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
- "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
+ "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
"dev": true,
"dependencies": {
- "@babel/plugin-transform-react-jsx": "^7.18.6"
+ "@babel/plugin-transform-react-jsx": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1476,13 +1511,13 @@
}
},
"node_modules/@babel/plugin-transform-react-pure-annotations": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz",
- "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz",
+ "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==",
"dev": true,
"dependencies": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1492,13 +1527,13 @@
}
},
"node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz",
- "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz",
+ "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2",
- "regenerator-transform": "^0.15.1"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "regenerator-transform": "^0.15.2"
},
"engines": {
"node": ">=6.9.0"
@@ -1508,12 +1543,12 @@
}
},
"node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
- "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz",
+ "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1523,12 +1558,12 @@
}
},
"node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
- "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz",
+ "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1538,13 +1573,13 @@
}
},
"node_modules/@babel/plugin-transform-spread": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz",
- "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz",
+ "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1554,12 +1589,12 @@
}
},
"node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
- "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz",
+ "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1569,12 +1604,12 @@
}
},
"node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz",
- "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz",
+ "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1584,12 +1619,12 @@
}
},
"node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz",
- "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz",
+ "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1599,14 +1634,15 @@
}
},
"node_modules/@babel/plugin-transform-typescript": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz",
- "integrity": "sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz",
+ "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==",
"dev": true,
"dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.20.7",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-typescript": "^7.20.0"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.23.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-typescript": "^7.23.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1616,12 +1652,28 @@
}
},
"node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz",
- "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz",
+ "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@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.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz",
+ "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1631,13 +1683,13 @@
}
},
"node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
- "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz",
+ "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==",
"dev": true,
"dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
},
"engines": {
"node": ">=6.9.0"
@@ -1646,39 +1698,44 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/plugin-transform-unicode-sets-regex": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz",
+ "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+ "@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.20.2",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz",
- "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.20.1",
- "@babel/helper-compilation-targets": "^7.20.0",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
- "@babel/plugin-proposal-async-generator-functions": "^7.20.1",
- "@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/plugin-proposal-class-static-block": "^7.18.6",
- "@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.18.9",
- "@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.2",
- "@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
- "@babel/plugin-proposal-optional-chaining": "^7.18.9",
- "@babel/plugin-proposal-private-methods": "^7.18.6",
- "@babel/plugin-proposal-private-property-in-object": "^7.18.6",
- "@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.6.tgz",
+ "integrity": "sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/compat-data": "^7.23.5",
+ "@babel/helper-compilation-targets": "^7.23.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.23.5",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3",
+ "@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.20.0",
+ "@babel/plugin-syntax-import-assertions": "^7.23.3",
+ "@babel/plugin-syntax-import-attributes": "^7.23.3",
+ "@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",
@@ -1688,45 +1745,112 @@
"@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.18.6",
- "@babel/plugin-transform-async-to-generator": "^7.18.6",
- "@babel/plugin-transform-block-scoped-functions": "^7.18.6",
- "@babel/plugin-transform-block-scoping": "^7.20.2",
- "@babel/plugin-transform-classes": "^7.20.2",
- "@babel/plugin-transform-computed-properties": "^7.18.9",
- "@babel/plugin-transform-destructuring": "^7.20.2",
- "@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.18.8",
- "@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.19.6",
- "@babel/plugin-transform-modules-commonjs": "^7.19.6",
- "@babel/plugin-transform-modules-systemjs": "^7.19.6",
- "@babel/plugin-transform-modules-umd": "^7.18.6",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
- "@babel/plugin-transform-new-target": "^7.18.6",
- "@babel/plugin-transform-object-super": "^7.18.6",
- "@babel/plugin-transform-parameters": "^7.20.1",
- "@babel/plugin-transform-property-literals": "^7.18.6",
- "@babel/plugin-transform-regenerator": "^7.18.6",
- "@babel/plugin-transform-reserved-words": "^7.18.6",
- "@babel/plugin-transform-shorthand-properties": "^7.18.6",
- "@babel/plugin-transform-spread": "^7.19.0",
- "@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.20.2",
- "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"
+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.23.3",
+ "@babel/plugin-transform-async-generator-functions": "^7.23.4",
+ "@babel/plugin-transform-async-to-generator": "^7.23.3",
+ "@babel/plugin-transform-block-scoped-functions": "^7.23.3",
+ "@babel/plugin-transform-block-scoping": "^7.23.4",
+ "@babel/plugin-transform-class-properties": "^7.23.3",
+ "@babel/plugin-transform-class-static-block": "^7.23.4",
+ "@babel/plugin-transform-classes": "^7.23.5",
+ "@babel/plugin-transform-computed-properties": "^7.23.3",
+ "@babel/plugin-transform-destructuring": "^7.23.3",
+ "@babel/plugin-transform-dotall-regex": "^7.23.3",
+ "@babel/plugin-transform-duplicate-keys": "^7.23.3",
+ "@babel/plugin-transform-dynamic-import": "^7.23.4",
+ "@babel/plugin-transform-exponentiation-operator": "^7.23.3",
+ "@babel/plugin-transform-export-namespace-from": "^7.23.4",
+ "@babel/plugin-transform-for-of": "^7.23.6",
+ "@babel/plugin-transform-function-name": "^7.23.3",
+ "@babel/plugin-transform-json-strings": "^7.23.4",
+ "@babel/plugin-transform-literals": "^7.23.3",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.23.4",
+ "@babel/plugin-transform-member-expression-literals": "^7.23.3",
+ "@babel/plugin-transform-modules-amd": "^7.23.3",
+ "@babel/plugin-transform-modules-commonjs": "^7.23.3",
+ "@babel/plugin-transform-modules-systemjs": "^7.23.3",
+ "@babel/plugin-transform-modules-umd": "^7.23.3",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
+ "@babel/plugin-transform-new-target": "^7.23.3",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4",
+ "@babel/plugin-transform-numeric-separator": "^7.23.4",
+ "@babel/plugin-transform-object-rest-spread": "^7.23.4",
+ "@babel/plugin-transform-object-super": "^7.23.3",
+ "@babel/plugin-transform-optional-catch-binding": "^7.23.4",
+ "@babel/plugin-transform-optional-chaining": "^7.23.4",
+ "@babel/plugin-transform-parameters": "^7.23.3",
+ "@babel/plugin-transform-private-methods": "^7.23.3",
+ "@babel/plugin-transform-private-property-in-object": "^7.23.4",
+ "@babel/plugin-transform-property-literals": "^7.23.3",
+ "@babel/plugin-transform-regenerator": "^7.23.3",
+ "@babel/plugin-transform-reserved-words": "^7.23.3",
+ "@babel/plugin-transform-shorthand-properties": "^7.23.3",
+ "@babel/plugin-transform-spread": "^7.23.3",
+ "@babel/plugin-transform-sticky-regex": "^7.23.3",
+ "@babel/plugin-transform-template-literals": "^7.23.3",
+ "@babel/plugin-transform-typeof-symbol": "^7.23.3",
+ "@babel/plugin-transform-unicode-escapes": "^7.23.3",
+ "@babel/plugin-transform-unicode-property-regex": "^7.23.3",
+ "@babel/plugin-transform-unicode-regex": "^7.23.3",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.23.3",
+ "@babel/preset-modules": "0.1.6-no-external-plugins",
+ "babel-plugin-polyfill-corejs2": "^0.4.6",
+ "babel-plugin-polyfill-corejs3": "^0.8.5",
+ "babel-plugin-polyfill-regenerator": "^0.5.3",
+ "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/@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/preset-env/node_modules/babel-plugin-polyfill-corejs3": {
+ "version": "0.8.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz",
+ "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-define-polyfill-provider": "^0.4.4",
+ "core-js-compat": "^3.33.1"
+ },
+ "peerDependencies": {
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
+ }
+ },
+ "node_modules/@babel/preset-env/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,
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/@babel/preset-flow": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz",
+ "integrity": "sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
+ "@babel/plugin-transform-flow-strip-types": "^7.23.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1736,33 +1860,31 @@
}
},
"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==",
+ "version": "0.1.6-no-external-plugins",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+ "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
"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"
+ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/@babel/preset-react": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz",
- "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz",
+ "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-transform-react-display-name": "^7.18.6",
- "@babel/plugin-transform-react-jsx": "^7.18.6",
- "@babel/plugin-transform-react-jsx-development": "^7.18.6",
- "@babel/plugin-transform-react-pure-annotations": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
+ "@babel/plugin-transform-react-display-name": "^7.23.3",
+ "@babel/plugin-transform-react-jsx": "^7.22.15",
+ "@babel/plugin-transform-react-jsx-development": "^7.22.5",
+ "@babel/plugin-transform-react-pure-annotations": "^7.23.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1772,14 +1894,16 @@
}
},
"node_modules/@babel/preset-typescript": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz",
- "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz",
+ "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==",
"dev": true,
"dependencies": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-transform-typescript": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
+ "@babel/plugin-syntax-jsx": "^7.23.3",
+ "@babel/plugin-transform-modules-commonjs": "^7.23.3",
+ "@babel/plugin-transform-typescript": "^7.23.3"
},
"engines": {
"node": ">=6.9.0"
@@ -1789,9 +1913,9 @@
}
},
"node_modules/@babel/register": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz",
- "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz",
+ "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==",
"dev": true,
"dependencies": {
"clone-deep": "^4.0.1",
@@ -1807,6 +1931,121 @@
"@babel/core": "^7.0.0-0"
}
},
+ "node_modules/@babel/register/node_modules/find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "dependencies": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/register/node_modules/find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "dependencies": {
+ "locate-path": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/register/node_modules/locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "dependencies": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/register/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,
+ "dependencies": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/register/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/@babel/register/node_modules/p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "dependencies": {
+ "p-limit": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/register/node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/@babel/register/node_modules/pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "dependencies": {
+ "find-up": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@babel/register/node_modules/semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
+ "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.20.7",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz",
@@ -1820,34 +2059,34 @@
}
},
"node_modules/@babel/template": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
- "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.20.12",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz",
- "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.20.7",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.19.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7",
- "debug": "^4.1.0",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz",
+ "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
},
"engines": {
@@ -1855,35 +2094,19 @@
}
},
"node_modules/@babel/types": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
- "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.19.4",
- "@babel/helper-validator-identifier": "^7.19.1",
+ "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
- "node_modules/@cnakazawa/watch": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
- "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
- "dev": true,
- "dependencies": {
- "exec-sh": "^0.3.2",
- "minimist": "^1.2.0"
- },
- "bin": {
- "watch": "cli.js"
- },
- "engines": {
- "node": ">=0.1.95"
- }
- },
"node_modules/@colors/colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -1988,6 +2211,411 @@
"node": ">=10.0.0"
}
},
+ "node_modules/@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz",
+ "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==",
+ "dev": true,
+ "peerDependencies": {
+ "react": ">=16.8.0"
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
+ "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
+ "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
+ "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
+ "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
+ "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
+ "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
+ "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
+ "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
+ "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
+ "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
+ "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
+ "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
+ "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
+ "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
+ "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+ "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
+ "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
+ "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
+ "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+ "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@fal-works/esbuild-plugin-global-externals": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz",
+ "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==",
+ "dev": true
+ },
+ "node_modules/@floating-ui/core": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.2.tgz",
+ "integrity": "sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==",
+ "dev": true,
+ "dependencies": {
+ "@floating-ui/utils": "^0.1.3"
+ }
+ },
+ "node_modules/@floating-ui/dom": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz",
+ "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==",
+ "dev": true,
+ "dependencies": {
+ "@floating-ui/core": "^1.4.2",
+ "@floating-ui/utils": "^0.1.3"
+ }
+ },
+ "node_modules/@floating-ui/react-dom": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz",
+ "integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==",
+ "dev": true,
+ "dependencies": {
+ "@floating-ui/dom": "^1.5.1"
+ },
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
+ "node_modules/@floating-ui/utils": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz",
+ "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==",
+ "dev": true
+ },
"node_modules/@fluent/bundle": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/@fluent/bundle/-/bundle-0.17.1.tgz",
@@ -2011,18 +2639,56 @@
"npm": ">=7.0.0"
}
},
- "node_modules/@gar/promisify": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
- "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
- "dev": true
- },
"node_modules/@github/catalyst": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/@github/catalyst/-/catalyst-1.6.0.tgz",
"integrity": "sha512-u8A+DameixqpeyHzvnJWTGj+wfiskQOYHzSiJscCWVfMkIT3rxnbHMtGh3lMthaRY21nbUOK71WcsCnCrXhBJQ==",
"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/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/@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -2100,30 +2766,42 @@
"node": ">=8"
}
},
+ "node_modules/@jest/schemas": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+ "dev": true,
+ "dependencies": {
+ "@sinclair/typebox": "^0.27.8"
+ },
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
"node_modules/@jest/transform": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
- "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^26.6.2",
- "babel-plugin-istanbul": "^6.0.0",
+ "@babel/core": "^7.11.6",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-util": "^26.6.2",
- "micromatch": "^4.0.2",
- "pirates": "^4.0.1",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
"slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
+ "write-file-atomic": "^4.0.2"
},
"engines": {
- "node": ">= 10.14.2"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/transform/node_modules/ansi-styles": {
@@ -2197,19 +2875,20 @@
}
},
"node_modules/@jest/types": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
- "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"dependencies": {
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
- "@types/yargs": "^15.0.0",
+ "@types/yargs": "^17.0.8",
"chalk": "^4.0.0"
},
"engines": {
- "node": ">= 10.14.2"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/types/node_modules/ansi-styles": {
@@ -2338,142 +3017,72 @@
}
},
"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==",
+ "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.17",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
- "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
- "dev": true,
- "dependencies": {
- "@jridgewell/resolve-uri": "3.1.0",
- "@jridgewell/sourcemap-codec": "1.4.14"
- }
- },
- "node_modules/@mdx-js/mdx": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz",
- "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==",
- "dev": true,
- "dependencies": {
- "@babel/core": "7.12.9",
- "@babel/plugin-syntax-jsx": "7.12.1",
- "@babel/plugin-syntax-object-rest-spread": "7.8.3",
- "@mdx-js/util": "1.6.22",
- "babel-plugin-apply-mdx-type-prop": "1.6.22",
- "babel-plugin-extract-import-names": "1.6.22",
- "camelcase-css": "2.0.1",
- "detab": "2.0.4",
- "hast-util-raw": "6.0.1",
- "lodash.uniq": "4.5.0",
- "mdast-util-to-hast": "10.0.1",
- "remark-footnotes": "2.0.0",
- "remark-mdx": "1.6.22",
- "remark-parse": "8.0.3",
- "remark-squeeze-paragraphs": "4.0.0",
- "style-to-object": "0.3.0",
- "unified": "9.2.0",
- "unist-builder": "2.0.3",
- "unist-util-visit": "2.0.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/@mdx-js/mdx/node_modules/@babel/core": {
- "version": "7.12.9",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz",
- "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==",
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.5",
- "@babel/parser": "^7.12.7",
- "@babel/template": "^7.12.7",
- "@babel/traverse": "^7.12.9",
- "@babel/types": "^7.12.7",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
- "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
+ "node_modules/@juggle/resize-observer": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
+ "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==",
+ "dev": true
},
- "node_modules/@mdx-js/mdx/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "node_modules/@lit-labs/ssr-dom-shim": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz",
+ "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==",
"dev": true,
- "bin": {
- "semver": "bin/semver"
- }
+ "peer": true
},
- "node_modules/@mdx-js/mdx/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "node_modules/@lit/reactive-element": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.2.tgz",
+ "integrity": "sha512-SVOwLAWUQg3Ji1egtOt1UiFe4zdDpnWHyc5qctSceJ5XIu0Uc76YmGpIjZgx9YJ0XtdW0Jm507sDvjOu+HnB8w==",
"dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "peer": true,
+ "dependencies": {
+ "@lit-labs/ssr-dom-shim": "^1.1.2"
}
},
- "node_modules/@mdx-js/util": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz",
- "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==",
+ "node_modules/@mdx-js/react": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz",
+ "integrity": "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==",
"dev": true,
+ "dependencies": {
+ "@types/mdx": "^2.0.0",
+ "@types/react": ">=16"
+ },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/unified"
+ },
+ "peerDependencies": {
+ "react": ">=16"
}
},
- "node_modules/@mrmlnc/readdir-enhanced": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
- "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "node_modules/@ndelangen/get-tarball": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz",
+ "integrity": "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==",
"dev": true,
"dependencies": {
- "call-me-maybe": "^1.0.1",
- "glob-to-regexp": "^0.3.0"
- },
- "engines": {
- "node": ">=4"
+ "gunzip-maybe": "^1.4.2",
+ "pump": "^3.0.0",
+ "tar-fs": "^2.1.1"
}
},
- "node_modules/@mrmlnc/readdir-enhanced/node_modules/glob-to-regexp": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
- "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==",
- "dev": true
- },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -2509,1998 +3118,926 @@
"node": ">= 8"
}
},
- "node_modules/@npmcli/fs": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
- "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+ "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,
- "dependencies": {
- "@gar/promisify": "^1.0.1",
- "semver": "^7.3.5"
+ "optional": true,
+ "engines": {
+ "node": ">=14"
}
},
- "node_modules/@npmcli/fs/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==",
+ "node_modules/@radix-ui/number": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz",
+ "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==",
"dev": true,
"dependencies": {
- "yallist": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
+ "@babel/runtime": "^7.13.10"
}
},
- "node_modules/@npmcli/fs/node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "node_modules/@radix-ui/primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz",
+ "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==",
"dev": true,
"dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
+ "@babel/runtime": "^7.13.10"
}
},
- "node_modules/@npmcli/fs/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/@npmcli/move-file": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
- "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
- "deprecated": "This functionality has been moved to @npmcli/fs",
+ "node_modules/@radix-ui/react-arrow": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz",
+ "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==",
"dev": true,
"dependencies": {
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@storybook/addon-a11y": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-6.5.15.tgz",
- "integrity": "sha512-4IgsCU7mrfooyGSgvyQdkZVu2iGJZqZ+2GDDIzzeIs1yXvuRy6QiHYNzesSrgeL52ykDXaPGuzKu2pcMKfDQHA==",
- "dev": true,
- "dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/theming": "6.5.15",
- "axe-core": "^4.2.0",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "react-sizeme": "^3.0.1",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "react": {
+ "@types/react": {
"optional": true
},
- "react-dom": {
+ "@types/react-dom": {
"optional": true
}
}
},
- "node_modules/@storybook/addon-actions": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.15.tgz",
- "integrity": "sha512-cnLzVK1S+EydFDSuvxMmMAxVqNXijBGdV9QTgsu6ys5sOkoiXRETKZmxuN8/ZRbkfc4N+1KAylSCZOOHzBQTBQ==",
- "dev": true,
- "dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "polished": "^4.2.2",
- "prop-types": "^15.7.2",
- "react-inspector": "^5.1.0",
- "regenerator-runtime": "^0.13.7",
- "telejson": "^6.0.8",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "uuid-browser": "^3.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "node_modules/@radix-ui/react-collection": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz",
+ "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-slot": "1.0.2"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "react": {
+ "@types/react": {
"optional": true
},
- "react-dom": {
+ "@types/react-dom": {
"optional": true
}
}
},
- "node_modules/@storybook/addon-actions/node_modules/react-inspector": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz",
- "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==",
+ "node_modules/@radix-ui/react-compose-refs": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
+ "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
"dev": true,
"dependencies": {
- "@babel/runtime": "^7.0.0",
- "is-dom": "^1.0.0",
- "prop-types": "^15.0.0"
+ "@babel/runtime": "^7.13.10"
},
"peerDependencies": {
- "react": "^16.8.4 || ^17.0.0"
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/addon-backgrounds": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.15.tgz",
- "integrity": "sha512-9ddB3QIL8mRurf7TvYG1P9i1sW0b8Iik3kGlHggKogHER9WJPzbiUeH0XDjkASSa4rMCZdYn5CZKNkIAoJ2jdA==",
- "dev": true,
- "dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "memoizerific": "^1.11.3",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "node_modules/@radix-ui/react-context": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz",
+ "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "react": {
- "optional": true
- },
- "react-dom": {
+ "@types/react": {
"optional": true
}
}
},
- "node_modules/@storybook/addon-controls": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.5.15.tgz",
- "integrity": "sha512-q5y0TvD0stvQoJZ2PnFmmKIRNSOI4/k2NKyZq//J2cBUBcP1reYlFxdsNwLZWmAFpSIkc2+nsliEzNxU1WByoA==",
- "dev": true,
- "dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/node-logger": "6.5.15",
- "@storybook/store": "6.5.15",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "lodash": "^4.17.21",
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "node_modules/@radix-ui/react-direction": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz",
+ "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "react": {
- "optional": true
- },
- "react-dom": {
+ "@types/react": {
"optional": true
}
}
},
- "node_modules/@storybook/addon-docs": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.5.15.tgz",
- "integrity": "sha512-k3LAu+wVp6pNhfh6B1soCRl6+7sNTNxtqy6WTrIeVJVCGbXbyc5s7gQ48gJ4WAk6meoDEZbypiP4NK1El03YLg==",
- "dev": true,
- "dependencies": {
- "@babel/plugin-transform-react-jsx": "^7.12.12",
- "@babel/preset-env": "^7.12.11",
- "@jest/transform": "^26.6.2",
- "@mdx-js/react": "^1.6.22",
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/docs-tools": "6.5.15",
- "@storybook/mdx1-csf": "^0.0.1",
- "@storybook/node-logger": "6.5.15",
- "@storybook/postinstall": "6.5.15",
- "@storybook/preview-web": "6.5.15",
- "@storybook/source-loader": "6.5.15",
- "@storybook/store": "6.5.15",
- "@storybook/theming": "6.5.15",
- "babel-loader": "^8.0.0",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "regenerator-runtime": "^0.13.7",
- "remark-external-links": "^8.0.0",
- "remark-slug": "^6.0.0",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "node_modules/@radix-ui/react-dismissable-layer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz",
+ "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-escape-keydown": "1.0.3"
},
"peerDependencies": {
- "@storybook/mdx2-csf": "^0.0.3",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "@storybook/mdx2-csf": {
+ "@types/react": {
"optional": true
},
- "react": {
- "optional": true
- },
- "react-dom": {
+ "@types/react-dom": {
"optional": true
}
}
},
- "node_modules/@storybook/addon-docs/node_modules/@mdx-js/react": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz",
- "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==",
+ "node_modules/@radix-ui/react-focus-guards": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz",
+ "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==",
"dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- },
- "peerDependencies": {
- "react": "^16.13.1 || ^17.0.0"
- }
- },
- "node_modules/@storybook/addon-essentials": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.5.15.tgz",
- "integrity": "sha512-m3EY6BhUk6Z9Et7P5wGaRGNoEDHzJIOsLbGS/4IXvIoDfrqmNIilqUQl8kfDqpVdBSFprvpacHpKpLosu9H37w==",
- "dev": true,
- "dependencies": {
- "@storybook/addon-actions": "6.5.15",
- "@storybook/addon-backgrounds": "6.5.15",
- "@storybook/addon-controls": "6.5.15",
- "@storybook/addon-docs": "6.5.15",
- "@storybook/addon-measure": "6.5.15",
- "@storybook/addon-outline": "6.5.15",
- "@storybook/addon-toolbars": "6.5.15",
- "@storybook/addon-viewport": "6.5.15",
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "core-js": "^3.8.2",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "dependencies": {
+ "@babel/runtime": "^7.13.10"
},
"peerDependencies": {
- "@babel/core": "^7.9.6"
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "@storybook/angular": {
- "optional": true
- },
- "@storybook/builder-manager4": {
- "optional": true
- },
- "@storybook/builder-manager5": {
- "optional": true
- },
- "@storybook/builder-webpack4": {
- "optional": true
- },
- "@storybook/builder-webpack5": {
- "optional": true
- },
- "@storybook/html": {
- "optional": true
- },
- "@storybook/vue": {
- "optional": true
- },
- "@storybook/vue3": {
- "optional": true
- },
- "@storybook/web-components": {
- "optional": true
- },
- "lit": {
- "optional": true
- },
- "lit-html": {
- "optional": true
- },
- "react": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- },
- "svelte": {
- "optional": true
- },
- "sveltedoc-parser": {
- "optional": true
- },
- "vue": {
- "optional": true
- },
- "webpack": {
+ "@types/react": {
"optional": true
}
}
},
- "node_modules/@storybook/addon-links": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.5.15.tgz",
- "integrity": "sha512-L7Q3u/xEUuy1uPq8ttjDfvDj19Hr2Crq/Us0RfowfGAAzOb7fCoiUJDP37ADtRUlCYyuKM5V/nHxN8eGpWtugw==",
+ "node_modules/@radix-ui/react-focus-scope": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz",
+ "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==",
"dev": true,
"dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/router": "6.5.15",
- "@types/qs": "^6.9.5",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "prop-types": "^15.7.2",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "react": {
+ "@types/react": {
"optional": true
},
- "react-dom": {
+ "@types/react-dom": {
"optional": true
}
}
},
- "node_modules/@storybook/addon-measure": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.5.15.tgz",
- "integrity": "sha512-j77WX/v6qpWK8ZuYscWLIc+Am4/WOJRsVgyXLIw1EZIviQsjoXPo7mmyoTneEIbbHfPtWlLRbtmkjh8DAVDrCA==",
+ "node_modules/@radix-ui/react-id": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz",
+ "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==",
"dev": true,
"dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "core-js": "^3.8.2",
- "global": "^4.4.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-layout-effect": "1.0.1"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "react": {
- "optional": true
- },
- "react-dom": {
+ "@types/react": {
"optional": true
}
}
},
- "node_modules/@storybook/addon-outline": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.5.15.tgz",
- "integrity": "sha512-8yGEZQOYypnliU3rsakoZlgT4Pkq8iOhX9JclVXZL/fJMQWFQGCsXqlLaRn8sx7qsa+21PPxY5bd2+Hv/Au4zQ==",
- "dev": true,
- "dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "node_modules/@radix-ui/react-popper": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz",
+ "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@floating-ui/react-dom": "^2.0.0",
+ "@radix-ui/react-arrow": "1.0.3",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-layout-effect": "1.0.1",
+ "@radix-ui/react-use-rect": "1.0.1",
+ "@radix-ui/react-use-size": "1.0.1",
+ "@radix-ui/rect": "1.0.1"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "react": {
+ "@types/react": {
"optional": true
},
- "react-dom": {
+ "@types/react-dom": {
"optional": true
}
}
},
- "node_modules/@storybook/addon-toolbars": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.5.15.tgz",
- "integrity": "sha512-btwDTgElmaaT0dBRASABbTpq6m1UiQXQmLUmxfjLxVC3I2SK5tyJKbPQ2hVLFAQHK4cQn4u45BxdZ5LDpJ830A==",
+ "node_modules/@radix-ui/react-portal": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz",
+ "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==",
"dev": true,
"dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "regenerator-runtime": "^0.13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "react": {
+ "@types/react": {
"optional": true
},
- "react-dom": {
+ "@types/react-dom": {
"optional": true
}
}
},
- "node_modules/@storybook/addon-viewport": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.5.15.tgz",
- "integrity": "sha512-oOiVzgFMlTnzPLVoHWQNzWdmpksrUyT6Aq8ZOyBPNMQ0RN2doIgFr7W53nZ1OBB5cPQx9q2FgWwzJ7Tawo+iVA==",
- "dev": true,
- "dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "memoizerific": "^1.11.3",
- "prop-types": "^15.7.2",
- "regenerator-runtime": "^0.13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "node_modules/@radix-ui/react-primitive": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz",
+ "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.2"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "react": {
+ "@types/react": {
"optional": true
},
- "react-dom": {
+ "@types/react-dom": {
"optional": true
}
}
},
- "node_modules/@storybook/addons": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.15.tgz",
- "integrity": "sha512-xT31SuSX+kYGyxCNK2nqL7WTxucs3rSmhiCLovJcUjYk+QquV3c2c53Ki7lwwdDbzfXFcNAe0HJ4hoTN4jhn0Q==",
+ "node_modules/@radix-ui/react-roving-focus": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz",
+ "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==",
"dev": true,
"dependencies": {
- "@storybook/api": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/router": "6.5.15",
- "@storybook/theming": "6.5.15",
- "@types/webpack-env": "^1.16.0",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "regenerator-runtime": "^0.13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-collection": "1.0.3",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-direction": "1.0.1",
+ "@radix-ui/react-id": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-controllable-state": "1.0.1"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/@storybook/api": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.15.tgz",
- "integrity": "sha512-BBE0KXKvj1/3jTghbIoWfrcDM0t+xO7EYtWWAXD6XlhGsZVD2Dy82Z52ONyLulMDRpMWl0OYy3h6A1YnFUH25w==",
- "dev": true,
- "dependencies": {
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/router": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "regenerator-runtime": "^0.13.7",
- "store2": "^2.12.0",
- "telejson": "^6.0.8",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.5.15.tgz",
- "integrity": "sha512-1ZkMECUUdiYplhlgyUF5fqW3XU7eWNDJbuPUguyDOeidgJ111WZzBcLuKj+SNrzdNNgXwROCWAFybiNnX33YHQ==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.12.10",
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/channel-postmessage": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "@storybook/preview-web": "6.5.15",
- "@storybook/router": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@storybook/store": "6.5.15",
- "@storybook/theming": "6.5.15",
- "@storybook/ui": "6.5.15",
- "@types/node": "^14.0.10 || ^16.0.0",
- "@types/webpack": "^4.41.26",
- "autoprefixer": "^9.8.6",
- "babel-loader": "^8.0.0",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
- "core-js": "^3.8.2",
- "css-loader": "^3.6.0",
- "file-loader": "^6.2.0",
- "find-up": "^5.0.0",
- "fork-ts-checker-webpack-plugin": "^4.1.6",
- "glob": "^7.1.6",
- "glob-promise": "^3.4.0",
- "global": "^4.4.0",
- "html-webpack-plugin": "^4.0.0",
- "pnp-webpack-plugin": "1.6.4",
- "postcss": "^7.0.36",
- "postcss-flexbugs-fixes": "^4.2.1",
- "postcss-loader": "^4.2.0",
- "raw-loader": "^4.0.2",
- "stable": "^0.1.8",
- "style-loader": "^1.3.0",
- "terser-webpack-plugin": "^4.2.3",
- "ts-dedent": "^2.0.0",
- "url-loader": "^4.1.1",
- "util-deprecate": "^1.0.2",
- "webpack": "4",
- "webpack-dev-middleware": "^3.7.3",
- "webpack-filter-warnings-plugin": "^1.2.1",
- "webpack-hot-middleware": "^2.25.1",
- "webpack-virtual-modules": "^0.2.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "node_modules/@radix-ui/react-select": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz",
+ "integrity": "sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/number": "1.0.1",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-collection": "1.0.3",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-direction": "1.0.1",
+ "@radix-ui/react-dismissable-layer": "1.0.4",
+ "@radix-ui/react-focus-guards": "1.0.1",
+ "@radix-ui/react-focus-scope": "1.0.3",
+ "@radix-ui/react-id": "1.0.1",
+ "@radix-ui/react-popper": "1.1.2",
+ "@radix-ui/react-portal": "1.0.3",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-slot": "1.0.2",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-controllable-state": "1.0.1",
+ "@radix-ui/react-use-layout-effect": "1.0.1",
+ "@radix-ui/react-use-previous": "1.0.1",
+ "@radix-ui/react-visually-hidden": "1.0.3",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.5.5"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
"peerDependenciesMeta": {
- "typescript": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
"optional": true
}
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/@types/html-minifier-terser": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz",
- "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==",
- "dev": true
- },
- "node_modules/@storybook/builder-webpack4/node_modules/@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
- "dev": true,
- "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/@storybook/builder-webpack4/node_modules/@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
- "dev": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
- "dev": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
- "dev": true
- },
- "node_modules/@storybook/builder-webpack4/node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "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/@storybook/builder-webpack4/node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "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/@storybook/builder-webpack4/node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "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/@storybook/builder-webpack4/node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
- "dev": true,
- "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/@storybook/builder-webpack4/node_modules/@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+ "node_modules/@radix-ui/react-separator": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.0.3.tgz",
+ "integrity": "sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
},
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "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"
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">=0.10.0"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "node_modules/@radix-ui/react-slot": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
+ "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
"dev": true,
"dependencies": {
- "is-extendable": "^0.1.0"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "node_modules/@storybook/builder-webpack4/node_modules/clean-css": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz",
- "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==",
- "dev": true,
- "dependencies": {
- "source-map": "~0.6.0"
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">= 4.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/css-loader": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
- "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
+ "node_modules/@radix-ui/react-toggle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz",
+ "integrity": "sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==",
"dev": true,
"dependencies": {
- "camelcase": "^5.3.1",
- "cssesc": "^3.0.0",
- "icss-utils": "^4.1.1",
- "loader-utils": "^1.2.3",
- "normalize-path": "^3.0.0",
- "postcss": "^7.0.32",
- "postcss-modules-extract-imports": "^2.0.0",
- "postcss-modules-local-by-default": "^3.0.2",
- "postcss-modules-scope": "^2.2.0",
- "postcss-modules-values": "^3.0.0",
- "postcss-value-parser": "^4.1.0",
- "schema-utils": "^2.7.0",
- "semver": "^6.3.0"
- },
- "engines": {
- "node": ">= 8.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-controllable-state": "1.0.1"
},
"peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/css-loader/node_modules/loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/enhanced-resolve": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
- "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/enhanced-resolve/node_modules/memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+ "node_modules/@radix-ui/react-toggle-group": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz",
+ "integrity": "sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==",
"dev": true,
"dependencies": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-direction": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-roving-focus": "1.0.4",
+ "@radix-ui/react-toggle": "1.0.3",
+ "@radix-ui/react-use-controllable-state": "1.0.1"
},
- "engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/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"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+ "node_modules/@radix-ui/react-toolbar": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz",
+ "integrity": "sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==",
"dev": true,
"dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-direction": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-roving-focus": "1.0.4",
+ "@radix-ui/react-separator": "1.0.3",
+ "@radix-ui/react-toggle-group": "1.0.4"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">=0.10.0"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/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==",
+ "node_modules/@radix-ui/react-use-callback-ref": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz",
+ "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==",
"dev": true,
"dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^3.0.2",
- "pkg-dir": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
+ "@babel/runtime": "^7.13.10"
},
- "funding": {
- "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/fork-ts-checker-webpack-plugin": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
- "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.5.5",
- "chalk": "^2.4.1",
- "micromatch": "^3.1.10",
- "minimatch": "^3.0.4",
- "semver": "^5.6.0",
- "tapable": "^1.0.0",
- "worker-rpc": "^0.1.0"
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">=6.11.5",
- "yarn": ">=1.0.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/html-minifier-terser": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
- "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
+ "node_modules/@radix-ui/react-use-controllable-state": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz",
+ "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==",
"dev": true,
"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"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
},
- "bin": {
- "html-minifier-terser": "cli.js"
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">=6"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/html-minifier-terser/node_modules/terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
+ "node_modules/@radix-ui/react-use-escape-keydown": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz",
+ "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==",
"dev": true,
"dependencies": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
},
- "bin": {
- "terser": "bin/terser"
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">=6.0.0"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/html-minifier-terser/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/@storybook/builder-webpack4/node_modules/html-webpack-plugin": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz",
- "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==",
+ "node_modules/@radix-ui/react-use-layout-effect": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz",
+ "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==",
"dev": true,
"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"
+ "@babel/runtime": "^7.13.10"
},
"peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/html-webpack-plugin/node_modules/loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/@storybook/builder-webpack4/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+ "node_modules/@radix-ui/react-use-previous": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz",
+ "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==",
"dev": true,
"dependencies": {
- "kind-of": "^3.0.2"
+ "@babel/runtime": "^7.13.10"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
- "dev": true,
- "engines": {
- "node": ">=4"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "node_modules/@radix-ui/react-use-rect": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz",
+ "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==",
"dev": true,
"dependencies": {
- "minimist": "^1.2.0"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/rect": "1.0.1"
},
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
- "dev": true,
- "engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
- }
- },
- "node_modules/@storybook/builder-webpack4/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"
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">=8"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/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==",
+ "node_modules/@radix-ui/react-use-size": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz",
+ "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==",
"dev": true,
"dependencies": {
- "semver": "^6.0.0"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-layout-effect": "1.0.1"
},
- "engines": {
- "node": ">=8"
+ "peerDependencies": {
+ "@types/react": "*",
+ "react": "^16.8 || ^17.0 || ^18.0"
},
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "node_modules/@radix-ui/react-visually-hidden": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz",
+ "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==",
"dev": true,
"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"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/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"
+ "peerDependencies": {
+ "@types/react": "*",
+ "@types/react-dom": "*",
+ "react": "^16.8 || ^17.0 || ^18.0",
+ "react-dom": "^16.8 || ^17.0 || ^18.0"
},
- "engines": {
- "node": ">=4.0.0"
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "@types/react-dom": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/builder-webpack4/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==",
+ "node_modules/@radix-ui/rect": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz",
+ "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==",
"dev": true,
"dependencies": {
- "minimist": "^1.2.6"
- },
- "bin": {
- "mkdirp": "bin/cmd.js"
+ "@babel/runtime": "^7.13.10"
}
},
- "node_modules/@storybook/builder-webpack4/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/@sinclair/typebox": {
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "dev": true
},
- "node_modules/@storybook/builder-webpack4/node_modules/p-locate/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "node_modules/@storybook/addon-a11y": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-7.6.4.tgz",
+ "integrity": "sha512-NwROJMes3D1WVPSmASVnHtDCIFQCF3DoPJEpzpnUYFxCR2IQzqPSlf9jptRkot6XjL5XwVX5mV2KxC2lKA1cfg==",
"dev": true,
"dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
+ "@storybook/addon-highlight": "7.6.4",
+ "axe-core": "^4.2.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/builder-webpack4/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==",
+ "node_modules/@storybook/addon-actions": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.4.tgz",
+ "integrity": "sha512-91UD5KPDik74VKVioPMcbwwvDXN/non8p1wArYAHCHCmd/Pts5MJRiFueSdfomSpNjUtjtn6eSXtwpIL3XVOfQ==",
"dev": true,
"dependencies": {
- "find-up": "^4.0.0"
+ "@storybook/core-events": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "@types/uuid": "^9.0.1",
+ "dequal": "^2.0.2",
+ "polished": "^4.2.2",
+ "uuid": "^9.0.0"
},
- "engines": {
- "node": ">=8"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/pkg-dir/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==",
+ "node_modules/@storybook/addon-backgrounds": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.4.tgz",
+ "integrity": "sha512-gNy3kIkHSr+Lg/jVDHwbZjIe1po5SDGZNVe39vrJwnqGz8T1clWes9WHCL6zk/uaCDA3yUna2Nt/KlOFAWDSoQ==",
"dev": true,
"dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
+ "@storybook/global": "^5.0.0",
+ "memoizerific": "^1.11.3",
+ "ts-dedent": "^2.0.0"
},
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/pretty-error": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
- "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.20",
- "renderkid": "^2.0.4"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/renderkid": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz",
- "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==",
+ "node_modules/@storybook/addon-controls": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.4.tgz",
+ "integrity": "sha512-k4AtZfazmD/nL3JAtLGAB7raPhkhUo0jWnaZWrahd9h1Fm13mBU/RW+JzTRhCw3Mp2HPERD7NI5Qcd2fUP6WDA==",
"dev": true,
"dependencies": {
- "css-select": "^4.1.3",
- "dom-converter": "^0.2.0",
- "htmlparser2": "^6.1.0",
+ "@storybook/blocks": "7.6.4",
"lodash": "^4.17.21",
- "strip-ansi": "^3.0.1"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/serialize-javascript": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
- "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "dependencies": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "node_modules/@storybook/builder-webpack4/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/@storybook/builder-webpack4/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
+ "ts-dedent": "^2.0.0"
},
- "engines": {
- "node": ">=0.10.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/style-loader": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz",
- "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==",
- "dev": true,
- "dependencies": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^2.7.0"
- },
- "engines": {
- "node": ">= 8.9.0"
+ "node_modules/@storybook/addon-docs": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.4.tgz",
+ "integrity": "sha512-PbFMbvC9sK3sGdMhwmagXs9TqopTp9FySji+L8O7W9SHRC6wSmdwoWWPWybkOYxr/z/wXi7EM0azSAX7yQxLbw==",
+ "dev": true,
+ "dependencies": {
+ "@jest/transform": "^29.3.1",
+ "@mdx-js/react": "^2.1.5",
+ "@storybook/blocks": "7.6.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/components": "7.6.4",
+ "@storybook/csf-plugin": "7.6.4",
+ "@storybook/csf-tools": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "@storybook/mdx2-csf": "^1.0.0",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/postinstall": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@storybook/react-dom-shim": "7.6.4",
+ "@storybook/theming": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "fs-extra": "^11.1.0",
+ "remark-external-links": "^8.0.0",
+ "remark-slug": "^6.0.0",
+ "ts-dedent": "^2.0.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/webpack"
+ "url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/terser-webpack-plugin": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz",
- "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==",
- "dev": true,
- "dependencies": {
- "cacache": "^15.0.5",
- "find-cache-dir": "^3.3.1",
- "jest-worker": "^26.5.0",
- "p-limit": "^3.0.2",
- "schema-utils": "^3.0.0",
- "serialize-javascript": "^5.0.1",
- "source-map": "^0.6.1",
- "terser": "^5.3.4",
- "webpack-sources": "^1.4.3"
- },
- "engines": {
- "node": ">= 10.13.0"
+ "node_modules/@storybook/addon-essentials": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.4.tgz",
+ "integrity": "sha512-J+zPmP4pbuuFxQ3pjLRYQRnxEtp7jF3xRXGFO8brVnEqtqoxwJ6j3euUrRLe0rpGAU3AD7dYfaaFjd3xkENgTw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/addon-actions": "7.6.4",
+ "@storybook/addon-backgrounds": "7.6.4",
+ "@storybook/addon-controls": "7.6.4",
+ "@storybook/addon-docs": "7.6.4",
+ "@storybook/addon-highlight": "7.6.4",
+ "@storybook/addon-measure": "7.6.4",
+ "@storybook/addon-outline": "7.6.4",
+ "@storybook/addon-toolbars": "7.6.4",
+ "@storybook/addon-viewport": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/manager-api": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "ts-dedent": "^2.0.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/webpack"
+ "url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/terser-webpack-plugin/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
+ "node_modules/@storybook/addon-highlight": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.4.tgz",
+ "integrity": "sha512-0kvjDzquoPwWWU61QYmEtcSGWXufnV7Z/bfBTYh132uxvV/X9YzDFcXXrxGL7sBJkK32gNUUBDuiTOxs5NxyOQ==",
"dev": true,
"dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
- "engines": {
- "node": ">= 10.13.0"
+ "@storybook/global": "^5.0.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
- },
- "optionalDependencies": {
- "chokidar": "^3.4.1",
- "watchpack-chokidar2": "^2.0.1"
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/webpack": {
- "version": "4.46.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
- "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
+ "node_modules/@storybook/addon-links": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.4.tgz",
+ "integrity": "sha512-TEhxYdMhJO28gD84ej1FCwLv9oLuCPt77bRXip9ndaNPRTdHYdWv6IP94dhbuDi8eHux7Z4A/mllciFuDFrnCw==",
"dev": true,
"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"
+ "@storybook/csf": "^0.1.2",
+ "@storybook/global": "^5.0.0",
+ "ts-dedent": "^2.0.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/webpack"
+ "url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- },
- "webpack-command": {
+ "react": {
"optional": true
}
}
},
- "node_modules/@storybook/builder-webpack4/node_modules/webpack-dev-middleware": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
- "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==",
- "dev": true,
- "dependencies": {
- "memory-fs": "^0.4.1",
- "mime": "^2.4.4",
- "mkdirp": "^0.5.1",
- "range-parser": "^1.2.1",
- "webpack-log": "^2.0.0"
- },
- "engines": {
- "node": ">= 6"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack-filter-warnings-plugin": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz",
- "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==",
- "dev": true,
- "engines": {
- "node": ">= 4.3 < 5.0.0 || >= 5.10"
- },
- "peerDependencies": {
- "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "dependencies": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack-virtual-modules": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz",
- "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==",
- "dev": true,
- "dependencies": {
- "debug": "^3.0.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "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/@storybook/builder-webpack4/node_modules/webpack/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/@storybook/builder-webpack4/node_modules/webpack/node_modules/find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/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,
- "dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/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/@storybook/builder-webpack4/node_modules/webpack/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "dependencies": {
- "find-up": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/@storybook/builder-webpack4/node_modules/webpack/node_modules/terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "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/@storybook/builder-webpack4/node_modules/webpack/node_modules/terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
+ "node_modules/@storybook/addon-measure": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.4.tgz",
+ "integrity": "sha512-73wsJ8PALsgWniR3MA/cmxcFuU6cRruWdIyYzOMgM8ife2Jm3xSkV7cTTXAqXt2H9Uuki4PGnuMHWWFLpPeyVA==",
"dev": true,
"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/@storybook/builder-webpack5": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-6.5.15.tgz",
- "integrity": "sha512-BnSoAmI02pvbGBSyzCx+voXb/d5EopQ78zx/lYv4CeOspBFOYEfGvAgYHILFo04V12S2/k8aSOc/tCYw5AqPtw==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.12.10",
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/channel-postmessage": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "@storybook/preview-web": "6.5.15",
- "@storybook/router": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@storybook/store": "6.5.15",
- "@storybook/theming": "6.5.15",
- "@types/node": "^14.0.10 || ^16.0.0",
- "babel-loader": "^8.0.0",
- "babel-plugin-named-exports-order": "^0.0.2",
- "browser-assert": "^1.2.1",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
- "core-js": "^3.8.2",
- "css-loader": "^5.0.1",
- "fork-ts-checker-webpack-plugin": "^6.0.4",
- "glob": "^7.1.6",
- "glob-promise": "^3.4.0",
- "html-webpack-plugin": "^5.0.0",
- "path-browserify": "^1.0.1",
- "process": "^0.11.10",
- "stable": "^0.1.8",
- "style-loader": "^2.0.0",
- "terser-webpack-plugin": "^5.0.3",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "webpack": "^5.9.0",
- "webpack-dev-middleware": "^4.1.0",
- "webpack-hot-middleware": "^2.25.1",
- "webpack-virtual-modules": "^0.4.1"
+ "@storybook/global": "^5.0.0",
+ "tiny-invariant": "^1.3.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
}
},
- "node_modules/@storybook/builder-webpack5/node_modules/@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "node_modules/@storybook/channel-postmessage": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.5.15.tgz",
- "integrity": "sha512-gMpA8LWT8lC4z5KWnaMh03aazEwtDO7GtY5kZVru+EEMgExGmaR82qgekwmLmgLj2nRJEv0o138o9IqYUcou8w==",
+ "node_modules/@storybook/addon-outline": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.4.tgz",
+ "integrity": "sha512-CFxGASRse/qeFocetDKFNeWZ3Aa2wapVtRciDNa4Zx7k1wCnTjEsPIm54waOuCaNVcrvO+nJUAZG5WyiorQvcg==",
"dev": true,
"dependencies": {
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "qs": "^6.10.0",
- "telejson": "^6.0.8"
+ "@storybook/global": "^5.0.0",
+ "ts-dedent": "^2.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/channel-websocket": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.5.15.tgz",
- "integrity": "sha512-K85KEgzo5ahzJNJjyUbSNyuRmkeC8glJX2hCg2j9HiJ9rasX53qugkODrKDlWAeheulo3kR13VSuAqIuwVbmbw==",
+ "node_modules/@storybook/addon-toolbars": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.4.tgz",
+ "integrity": "sha512-ENMQJgU4sRCLLDVXYfa+P3cQVV9PC0ZxwVAKeM3NPYPNH/ODoryGNtq+Q68LwHlM4ObCE2oc9MzaQqPxloFcCw==",
"dev": true,
- "dependencies": {
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "telejson": "^6.0.8"
- },
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/channels": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.15.tgz",
- "integrity": "sha512-gPpsBgirv2NCXbH4WbYqdkI0JLE96aiVuu7UEWfn9yu071pQ9CLHbhXGD9fSFNrfOkyBBY10ppSE7uCXw3Wexg==",
+ "node_modules/@storybook/addon-viewport": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.4.tgz",
+ "integrity": "sha512-SoTcHIoqybhYD28v7QExF1EZnl7FfxuP74VDhtze5LyMd2CbqmVnUfwewLCz/3IvCNce0GqdNyg1m6QJ7Eq1uw==",
"dev": true,
"dependencies": {
- "core-js": "^3.8.2",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "memoizerific": "^1.11.3"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/client-api": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.5.15.tgz",
- "integrity": "sha512-0ZGpRgVz7rdbCguBqBpwObXbsVY5qlSTWDzzIBpmz8EkxW/MtK5wEyeq+0L0O+DTn41FwvH5yCGLAENpzWD8BQ==",
+ "node_modules/@storybook/blocks": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.4.tgz",
+ "integrity": "sha512-iXinXXhTUBtReREP1Jifpu35DnGg7FidehjvCM8sM4E4aymfb8czdg9DdvG46T2UFUPUct36nnjIdMLWOya8Bw==",
"dev": true,
"dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/channel-postmessage": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/store": "6.5.15",
- "@types/qs": "^6.9.5",
- "@types/webpack-env": "^1.16.0",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
+ "@storybook/channels": "7.6.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/components": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/docs-tools": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "@storybook/manager-api": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@storybook/theming": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/lodash": "^4.14.167",
+ "color-convert": "^2.0.1",
+ "dequal": "^2.0.2",
"lodash": "^4.17.21",
+ "markdown-to-jsx": "^7.1.8",
"memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "store2": "^2.12.0",
- "synchronous-promise": "^2.0.15",
+ "polished": "^4.2.2",
+ "react-colorful": "^5.1.2",
+ "telejson": "^7.2.0",
+ "tocbot": "^4.20.1",
"ts-dedent": "^2.0.0",
"util-deprecate": "^1.0.2"
},
@@ -4513,1136 +4050,480 @@
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/client-logger": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.15.tgz",
- "integrity": "sha512-0uyxKvodq+FycGv6aUwC1wUR6suXf2+7ywMFAOlYolI4UvNj8NyU/5AfgKT5XnxYAgPmoCiAjOE700TrfHrosw==",
+ "node_modules/@storybook/blocks/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": {
- "core-js": "^3.8.2",
- "global": "^4.4.0"
+ "color-name": "~1.1.4"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "engines": {
+ "node": ">=7.0.0"
}
},
- "node_modules/@storybook/components": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.15.tgz",
- "integrity": "sha512-bHTT0Oa3s4g+MBMaLBbX9ofMtb1AW59AzIUNGrfqW1XqJMGuUHMiJ7TSo+i5dRSFpbFygnwMEG9LfHxpR2Z0Dw==",
- "dev": true,
- "dependencies": {
- "@storybook/client-logger": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
+ "node_modules/@storybook/blocks/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/@storybook/core": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.5.15.tgz",
- "integrity": "sha512-T9TjLxbb5P/XvLEoj0dnbtexJa0V3pqCifRlIUNkTJO0nU3PdGLMcKMSyIYWjkthAJ9oBrajnodV0UveM/epTg==",
+ "node_modules/@storybook/builder-manager": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.4.tgz",
+ "integrity": "sha512-k5+D3fXw7LdMOWd5tF7cIq8L3irrdW6/vmcEHLaJj1EXZ+DvsNCH9xSsLS+6zfrUcxug4oSfRqvF87w6Oz3DtA==",
"dev": true,
"dependencies": {
- "@storybook/core-client": "6.5.15",
- "@storybook/core-server": "6.5.15"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "webpack": "*"
- },
- "peerDependenciesMeta": {
- "@storybook/builder-webpack5": {
- "optional": true
- },
- "@storybook/manager-webpack5": {
- "optional": true
- },
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@storybook/core-client": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.5.15.tgz",
- "integrity": "sha512-i9t4WONy2MxJwLI1FIp5ck7b52EXyJfALnxUn4O/3GTkw09J0NOKi2DPjefUsi7IB5MzFpDjDH9vw/XiTM+OZw==",
- "dev": true,
- "dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/channel-postmessage": "6.5.15",
- "@storybook/channel-websocket": "6.5.15",
- "@storybook/client-api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/preview-web": "6.5.15",
- "@storybook/store": "6.5.15",
- "@storybook/ui": "6.5.15",
- "airbnb-js-shims": "^2.2.1",
- "ansi-to-html": "^0.6.11",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "unfetch": "^4.2.0",
- "util-deprecate": "^1.0.2"
+ "@fal-works/esbuild-plugin-global-externals": "^2.1.2",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/manager": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@types/ejs": "^3.1.1",
+ "@types/find-cache-dir": "^3.2.1",
+ "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10",
+ "browser-assert": "^1.2.1",
+ "ejs": "^3.1.8",
+ "esbuild": "^0.18.0",
+ "esbuild-plugin-alias": "^0.2.1",
+ "express": "^4.17.3",
+ "find-cache-dir": "^3.0.0",
+ "fs-extra": "^11.1.0",
+ "process": "^0.11.10",
+ "util": "^0.12.4"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "webpack": "*"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
}
},
- "node_modules/@storybook/core-common": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.5.15.tgz",
- "integrity": "sha512-uits9o6qwHTPnjsNZP25f7hWmUBGRJ7FXtxxtEaNSmtiwk50KWxBaro7wt505lJ1Gb9vOhpNPhS7y3IxdsXNmQ==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-proposal-class-properties": "^7.12.1",
- "@babel/plugin-proposal-decorators": "^7.12.12",
- "@babel/plugin-proposal-export-default-from": "^7.12.1",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
- "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
- "@babel/plugin-proposal-optional-chaining": "^7.12.7",
- "@babel/plugin-proposal-private-methods": "^7.12.1",
- "@babel/plugin-proposal-private-property-in-object": "^7.12.1",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-transform-arrow-functions": "^7.12.1",
- "@babel/plugin-transform-block-scoping": "^7.12.12",
- "@babel/plugin-transform-classes": "^7.12.1",
- "@babel/plugin-transform-destructuring": "^7.12.1",
- "@babel/plugin-transform-for-of": "^7.12.1",
- "@babel/plugin-transform-parameters": "^7.12.1",
- "@babel/plugin-transform-shorthand-properties": "^7.12.1",
- "@babel/plugin-transform-spread": "^7.12.1",
- "@babel/preset-env": "^7.12.11",
- "@babel/preset-react": "^7.12.10",
- "@babel/preset-typescript": "^7.12.7",
- "@babel/register": "^7.12.1",
- "@storybook/node-logger": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@types/node": "^14.0.10 || ^16.0.0",
- "@types/pretty-hrtime": "^1.0.0",
- "babel-loader": "^8.0.0",
- "babel-plugin-macros": "^3.0.1",
- "babel-plugin-polyfill-corejs3": "^0.1.0",
- "chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "express": "^4.17.1",
- "file-system-cache": "^1.0.5",
- "find-up": "^5.0.0",
- "fork-ts-checker-webpack-plugin": "^6.0.4",
- "fs-extra": "^9.0.1",
- "glob": "^7.1.6",
- "handlebars": "^4.7.7",
- "interpret": "^2.2.0",
- "json5": "^2.1.3",
- "lazy-universal-dotenv": "^3.0.1",
- "picomatch": "^2.3.0",
- "pkg-dir": "^5.0.0",
- "pretty-hrtime": "^1.0.3",
- "resolve-from": "^5.0.0",
- "slash": "^3.0.0",
- "telejson": "^6.0.8",
+ "node_modules/@storybook/builder-webpack5": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.4.tgz",
+ "integrity": "sha512-J5wzPn/rsowlur5A7W9pAfN3a5fMapOoHaZsDKUklGRud/JUeabAIVdL1P/eX+yE3xaJk9auYivEWbglSx2Kpg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.23.2",
+ "@storybook/channels": "7.6.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/core-webpack": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/preview": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@swc/core": "^1.3.82",
+ "@types/node": "^18.0.0",
+ "@types/semver": "^7.3.4",
+ "babel-loader": "^9.0.0",
+ "browser-assert": "^1.2.1",
+ "case-sensitive-paths-webpack-plugin": "^2.4.0",
+ "constants-browserify": "^1.0.0",
+ "css-loader": "^6.7.1",
+ "es-module-lexer": "^1.4.1",
+ "express": "^4.17.3",
+ "fork-ts-checker-webpack-plugin": "^8.0.0",
+ "fs-extra": "^11.1.0",
+ "html-webpack-plugin": "^5.5.0",
+ "magic-string": "^0.30.5",
+ "path-browserify": "^1.0.1",
+ "process": "^0.11.10",
+ "semver": "^7.3.7",
+ "style-loader": "^3.3.1",
+ "swc-loader": "^0.2.3",
+ "terser-webpack-plugin": "^5.3.1",
"ts-dedent": "^2.0.0",
+ "url": "^0.11.0",
+ "util": "^0.12.4",
"util-deprecate": "^1.0.2",
- "webpack": "4"
+ "webpack": "5",
+ "webpack-dev-middleware": "^6.1.1",
+ "webpack-hot-middleware": "^2.25.1",
+ "webpack-virtual-modules": "^0.5.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
},
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
"peerDependenciesMeta": {
"typescript": {
"optional": true
}
}
},
- "node_modules/@storybook/core-common/node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
- "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
+ "node_modules/@storybook/builder-webpack5/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": {
- "@babel/helper-compilation-targets": "^7.13.0",
- "@babel/helper-module-imports": "^7.12.13",
- "@babel/helper-plugin-utils": "^7.13.0",
- "@babel/traverse": "^7.13.0",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2",
- "semver": "^6.1.2"
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
},
- "peerDependencies": {
- "@babel/core": "^7.4.0-0"
- }
- },
- "node_modules/@storybook/core-common/node_modules/@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "node_modules/@storybook/core-common/node_modules/@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "node_modules/@storybook/core-common/node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "node_modules/@storybook/core-common/node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "node_modules/@storybook/core-common/node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "node_modules/@storybook/core-common/node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
- "dev": true,
- "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/@storybook/core-common/node_modules/@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
- "dev": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/@storybook/core-common/node_modules/@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
- "dev": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@storybook/core-common/node_modules/@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
- "dev": true
- },
- "node_modules/@storybook/core-common/node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "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/@storybook/core-common/node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "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/@storybook/core-common/node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "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/@storybook/core-common/node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
- "dev": true,
- "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"
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/@storybook/core-common/node_modules/@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+ "node_modules/@storybook/builder-webpack5/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": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@storybook/core-common/node_modules/acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
+ "fast-deep-equal": "^3.1.3"
},
- "engines": {
- "node": ">=0.4.0"
+ "peerDependencies": {
+ "ajv": "^8.8.2"
}
},
- "node_modules/@storybook/core-common/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==",
+ "node_modules/@storybook/builder-webpack5/node_modules/babel-loader": {
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
+ "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
+ "find-cache-dir": "^4.0.0",
+ "schema-utils": "^4.0.0"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/@storybook/core-common/node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
- "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.1.5",
- "core-js-compat": "^3.8.1"
+ "node": ">= 14.15.0"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.12.0",
+ "webpack": ">=5"
}
},
- "node_modules/@storybook/core-common/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "node_modules/@storybook/builder-webpack5/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": {
- "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"
+ "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": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-common/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
+ "node": ">= 12.13.0"
},
- "engines": {
- "node": ">=0.10.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.0.0"
}
},
- "node_modules/@storybook/core-common/node_modules/cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "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/@storybook/builder-webpack5/node_modules/es-module-lexer": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz",
+ "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==",
+ "dev": true
},
- "node_modules/@storybook/core-common/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@storybook/builder-webpack5/node_modules/find-cache-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
+ "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
"dev": true,
"dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "common-path-prefix": "^3.0.0",
+ "pkg-dir": "^7.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14.16"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "node_modules/@storybook/core-common/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==",
+ "node_modules/@storybook/builder-webpack5/node_modules/find-up": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+ "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
"dev": true,
"dependencies": {
- "color-name": "~1.1.4"
+ "locate-path": "^7.1.0",
+ "path-exists": "^5.0.0"
},
"engines": {
- "node": ">=7.0.0"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/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/@storybook/core-common/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==",
+ "node_modules/@storybook/builder-webpack5/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/@storybook/core-common/node_modules/enhanced-resolve": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
- "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
+ "node_modules/@storybook/builder-webpack5/node_modules/locate-path": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
"dev": true,
"dependencies": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
+ "p-locate": "^6.0.0"
},
"engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@storybook/core-common/node_modules/enhanced-resolve/node_modules/memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "dependencies": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
- "engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/node_modules/eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "node_modules/@storybook/builder-webpack5/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": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
+ "yallist": "^4.0.0"
},
"engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/core-common/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": ">=10"
}
},
- "node_modules/@storybook/core-common/node_modules/fill-range": {
+ "node_modules/@storybook/builder-webpack5/node_modules/p-limit": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+ "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
"dev": true,
"dependencies": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
+ "yocto-queue": "^1.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-common/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-common/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/@storybook/core-common/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/@storybook/core-common/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+ "node_modules/@storybook/builder-webpack5/node_modules/p-locate": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+ "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
"dev": true,
"dependencies": {
- "kind-of": "^3.0.2"
+ "p-limit": "^4.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-common/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-common/node_modules/is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
- "dev": true,
- "engines": {
- "node": ">=4"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/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/@storybook/core-common/node_modules/loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
+ "node_modules/@storybook/builder-webpack5/node_modules/path-exists": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
"dev": true,
"engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
- "node_modules/@storybook/core-common/node_modules/loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+ "node_modules/@storybook/builder-webpack5/node_modules/pkg-dir": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+ "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
"dev": true,
"dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
+ "find-up": "^6.3.0"
},
"engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/core-common/node_modules/loader-utils/node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.0"
+ "node": ">=14.16"
},
- "bin": {
- "json5": "lib/cli.js"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-common/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "node_modules/@storybook/builder-webpack5/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": {
- "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"
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-common/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"
+ "node": ">= 12.13.0"
},
- "bin": {
- "mkdirp": "bin/cmd.js"
- }
- },
- "node_modules/@storybook/core-common/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
}
},
- "node_modules/@storybook/core-common/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "node_modules/@storybook/builder-webpack5/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"dependencies": {
- "glob": "^7.1.3"
+ "lru-cache": "^6.0.0"
},
"bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/@storybook/core-common/node_modules/schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/@storybook/core-common/node_modules/serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/@storybook/core-common/node_modules/ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "dependencies": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "node_modules/@storybook/core-common/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/@storybook/core-common/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"
+ "semver": "bin/semver.js"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
- "node_modules/@storybook/core-common/node_modules/terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
+ "node_modules/@storybook/builder-webpack5/node_modules/style-loader": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz",
+ "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==",
"dev": true,
- "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/@storybook/core-common/node_modules/terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
- "dev": true,
- "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"
+ "node": ">= 12.13.0"
},
- "engines": {
- "node": ">= 6.9.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
},
"peerDependencies": {
- "webpack": "^4.0.0"
- }
- },
- "node_modules/@storybook/core-common/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
+ "webpack": "^5.0.0"
}
},
- "node_modules/@storybook/core-common/node_modules/watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
- },
- "optionalDependencies": {
- "chokidar": "^3.4.1",
- "watchpack-chokidar2": "^2.0.1"
- }
- },
- "node_modules/@storybook/core-common/node_modules/webpack": {
- "version": "4.46.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
- "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
+ "node_modules/@storybook/builder-webpack5/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": {
- "@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"
+ "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": ">=6.11.5"
+ "node": ">= 14.15.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/webpack"
},
+ "peerDependencies": {
+ "webpack": "^5.0.0"
+ },
"peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- },
- "webpack-command": {
+ "webpack": {
"optional": true
}
}
},
- "node_modules/@storybook/core-common/node_modules/webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
+ "node_modules/@storybook/builder-webpack5/node_modules/webpack-virtual-modules": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz",
+ "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==",
+ "dev": true
+ },
+ "node_modules/@storybook/builder-webpack5/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/@storybook/builder-webpack5/node_modules/yocto-queue": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+ "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
"dev": true,
- "dependencies": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
+ "engines": {
+ "node": ">=12.20"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/@storybook/core-events": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.15.tgz",
- "integrity": "sha512-B1Ba6l5W7MeNclclqMMTMHgYgfdpB5SIhNCQFnzIz8blynzRhNFMdxvbAl6Je5G0S4xydYYd7Lno2kXQebs7HA==",
+ "node_modules/@storybook/channels": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.4.tgz",
+ "integrity": "sha512-Z4PY09/Czl70ap4ObmZ4bgin+EQhPaA3HdrEDNwpnH7A9ttfEO5u5KThytIjMq6kApCCihmEPDaYltoVrfYJJA==",
"dev": true,
"dependencies": {
- "core-js": "^3.8.2"
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "qs": "^6.10.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/core-server": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.5.15.tgz",
- "integrity": "sha512-m+pZwHhCjwryeqTptyyKHSbIjnnPGKoRSnkqLTOpKQf8llZMnNQWUFrn4fx6UDKzxFQ2st2+laV8O2QbMs8qwQ==",
- "dev": true,
- "dependencies": {
- "@discoveryjs/json-ext": "^0.5.3",
- "@storybook/builder-webpack4": "6.5.15",
- "@storybook/core-client": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/csf-tools": "6.5.15",
- "@storybook/manager-webpack4": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@storybook/store": "6.5.15",
- "@storybook/telemetry": "6.5.15",
- "@types/node": "^14.0.10 || ^16.0.0",
- "@types/node-fetch": "^2.5.7",
- "@types/pretty-hrtime": "^1.0.0",
- "@types/webpack": "^4.41.26",
- "better-opn": "^2.1.1",
- "boxen": "^5.1.2",
+ "node_modules/@storybook/cli": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.4.tgz",
+ "integrity": "sha512-GqvaFdkkBMJOdnrVe82XY0V3b+qFMhRNyVoTv2nqB87iMUXZHqh4Pu4LqwaJBsBpuNregvCvVOPe9LGgoOzy4A==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.23.2",
+ "@babel/preset-env": "^7.23.2",
+ "@babel/types": "^7.23.0",
+ "@ndelangen/get-tarball": "^3.0.7",
+ "@storybook/codemod": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/core-server": "7.6.4",
+ "@storybook/csf-tools": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/telemetry": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/semver": "^7.3.4",
+ "@yarnpkg/fslib": "2.10.3",
+ "@yarnpkg/libzip": "2.3.0",
"chalk": "^4.1.0",
- "cli-table3": "^0.6.1",
"commander": "^6.2.1",
- "compression": "^1.7.4",
- "core-js": "^3.8.2",
- "cpy": "^8.1.2",
- "detect-port": "^1.3.0",
- "express": "^4.17.1",
- "fs-extra": "^9.0.1",
- "global": "^4.4.0",
+ "cross-spawn": "^7.0.3",
+ "detect-indent": "^6.1.0",
+ "envinfo": "^7.7.3",
+ "execa": "^5.0.0",
+ "express": "^4.17.3",
+ "find-up": "^5.0.0",
+ "fs-extra": "^11.1.0",
+ "get-npm-tarball-url": "^2.0.3",
+ "get-port": "^5.1.1",
+ "giget": "^1.0.0",
"globby": "^11.0.2",
- "ip": "^2.0.0",
- "lodash": "^4.17.21",
- "node-fetch": "^2.6.7",
- "open": "^8.4.0",
- "pretty-hrtime": "^1.0.3",
+ "jscodeshift": "^0.15.1",
+ "leven": "^3.1.0",
+ "ora": "^5.4.1",
+ "prettier": "^2.8.0",
"prompts": "^2.4.0",
- "regenerator-runtime": "^0.13.7",
- "serve-favicon": "^2.5.0",
- "slash": "^3.0.0",
- "telejson": "^6.0.8",
+ "puppeteer-core": "^2.1.1",
+ "read-pkg-up": "^7.0.1",
+ "semver": "^7.3.7",
+ "simple-update-notifier": "^2.0.0",
+ "strip-json-comments": "^3.0.1",
+ "tempy": "^1.0.1",
"ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "watchpack": "^2.2.0",
- "webpack": "4",
- "ws": "^8.2.3",
- "x-default-browser": "^0.4.0"
+ "util-deprecate": "^1.0.2"
+ },
+ "bin": {
+ "getstorybook": "bin/index.js",
+ "sb": "bin/index.js"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "@storybook/builder-webpack5": {
- "optional": true
- },
- "@storybook/manager-webpack5": {
- "optional": true
- },
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@storybook/core-server/node_modules/@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "node_modules/@storybook/core-server/node_modules/@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "node_modules/@storybook/core-server/node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "node_modules/@storybook/core-server/node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "node_modules/@storybook/core-server/node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "node_modules/@storybook/core-server/node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
- "dev": true,
- "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/@storybook/core-server/node_modules/@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
- "dev": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/@storybook/core-server/node_modules/@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
- "dev": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@storybook/core-server/node_modules/@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
- "dev": true
- },
- "node_modules/@storybook/core-server/node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "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/@storybook/core-server/node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "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/@storybook/core-server/node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "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/@storybook/core-server/node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
- "dev": true,
- "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/@storybook/core-server/node_modules/@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@storybook/core-server/node_modules/acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/@storybook/core-server/node_modules/ansi-styles": {
+ "node_modules/@storybook/cli/node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
@@ -5657,63 +4538,7 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@storybook/core-server/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "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/@storybook/core-server/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-server/node_modules/cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "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/@storybook/core-server/node_modules/chalk": {
+ "node_modules/@storybook/cli/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
@@ -5729,13 +4554,7 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@storybook/core-server/node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "node_modules/@storybook/core-server/node_modules/color-convert": {
+ "node_modules/@storybook/cli/node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
@@ -5747,89 +4566,22 @@
"node": ">=7.0.0"
}
},
- "node_modules/@storybook/core-server/node_modules/color-name": {
+ "node_modules/@storybook/cli/node_modules/color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "node_modules/@storybook/core-server/node_modules/enhanced-resolve": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
- "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@storybook/core-server/node_modules/enhanced-resolve/node_modules/memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "dependencies": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- },
- "engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
- }
- },
- "node_modules/@storybook/core-server/node_modules/eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/core-server/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/@storybook/core-server/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+ "node_modules/@storybook/cli/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,
- "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/@storybook/core-server/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 6"
}
},
- "node_modules/@storybook/core-server/node_modules/has-flag": {
+ "node_modules/@storybook/cli/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==",
@@ -5838,200 +4590,34 @@
"node": ">=8"
}
},
- "node_modules/@storybook/core-server/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/@storybook/core-server/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-server/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-server/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-server/node_modules/is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@storybook/core-server/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/@storybook/core-server/node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/@storybook/core-server/node_modules/loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
- "dev": true,
- "engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
- }
- },
- "node_modules/@storybook/core-server/node_modules/loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/core-server/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "node_modules/@storybook/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": {
- "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"
+ "yallist": "^4.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-server/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": ">=10"
}
},
- "node_modules/@storybook/core-server/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "node_modules/@storybook/cli/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"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/@storybook/core-server/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
+ "lru-cache": "^6.0.0"
},
"bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/@storybook/core-server/node_modules/schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
+ "semver": "bin/semver.js"
},
"engines": {
- "node": ">= 4"
- }
- },
- "node_modules/@storybook/core-server/node_modules/serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/@storybook/core-server/node_modules/ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "dependencies": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "node_modules/@storybook/core-server/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
+ "node": ">=10"
}
},
- "node_modules/@storybook/core-server/node_modules/supports-color": {
+ "node_modules/@storybook/cli/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==",
@@ -6043,241 +4629,67 @@
"node": ">=8"
}
},
- "node_modules/@storybook/core-server/node_modules/terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "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/@storybook/core-server/node_modules/terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
- "dev": true,
- "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/@storybook/core-server/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==",
+ "node_modules/@storybook/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/@storybook/core-server/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/core-server/node_modules/webpack": {
- "version": "4.46.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
- "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
- "dev": true,
- "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/@storybook/core-server/node_modules/webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "dependencies": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
- },
- "node_modules/@storybook/core-server/node_modules/webpack/node_modules/watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
- },
- "optionalDependencies": {
- "chokidar": "^3.4.1",
- "watchpack-chokidar2": "^2.0.1"
- }
- },
- "node_modules/@storybook/csf": {
- "version": "0.0.2--canary.4566f4d.1",
- "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz",
- "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==",
+ "node_modules/@storybook/client-logger": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz",
+ "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==",
"dev": true,
"dependencies": {
- "lodash": "^4.17.15"
- }
- },
- "node_modules/@storybook/csf-tools": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.5.15.tgz",
- "integrity": "sha512-2LwSD7yE/ccXBc58K4vdKw/oJJg6IpC4WD51rBt2mAl5JUCkxhOq7wG/Z8Wy1lZw2LVuKNTmjVou5blGRI/bTg==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.12.10",
- "@babel/generator": "^7.12.11",
- "@babel/parser": "^7.12.11",
- "@babel/plugin-transform-react-jsx": "^7.12.12",
- "@babel/preset-env": "^7.12.11",
- "@babel/traverse": "^7.12.11",
- "@babel/types": "^7.12.11",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/mdx1-csf": "^0.0.1",
- "core-js": "^3.8.2",
- "fs-extra": "^9.0.1",
- "global": "^4.4.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
+ "@storybook/global": "^5.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "@storybook/mdx2-csf": "^0.0.3"
- },
- "peerDependenciesMeta": {
- "@storybook/mdx2-csf": {
- "optional": true
- }
}
},
- "node_modules/@storybook/docs-tools": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-6.5.15.tgz",
- "integrity": "sha512-8w78NFOtlJGuIa9vPPsr87J9iQUGmLFh7CrMS2+t9LxW+0oH5MZ8QqPQUHNuTuKsYN3r+QAmmi2pj0auZmCoKA==",
+ "node_modules/@storybook/codemod": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.4.tgz",
+ "integrity": "sha512-q4rZVOfozxzbDRH/LzuFDoIGBdXs+orAm18fi6iAx8PeMHe8J/MOXKccNV1zdkm/h7mTQowuRo45KwJHw8vX+g==",
"dev": true,
"dependencies": {
- "@babel/core": "^7.12.10",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/store": "6.5.15",
- "core-js": "^3.8.2",
- "doctrine": "^3.0.0",
+ "@babel/core": "^7.23.2",
+ "@babel/preset-env": "^7.23.2",
+ "@babel/types": "^7.23.0",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/csf-tools": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/cross-spawn": "^6.0.2",
+ "cross-spawn": "^7.0.3",
+ "globby": "^11.0.2",
+ "jscodeshift": "^0.15.1",
"lodash": "^4.17.21",
- "regenerator-runtime": "^0.13.7"
+ "prettier": "^2.8.0",
+ "recast": "^0.23.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.15.tgz",
- "integrity": "sha512-zRvBTMoaFO6MvHDsDLnt3tsFENhpY3k+e/UIPdqbIDMbUPGGQzxJucAM9aS/kbVSO5IVs8IflVxbeeB/uTIIfA==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-transform-template-literals": "^7.12.1",
- "@babel/preset-react": "^7.12.10",
- "@storybook/addons": "6.5.15",
- "@storybook/core-client": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "@storybook/theming": "6.5.15",
- "@storybook/ui": "6.5.15",
- "@types/node": "^14.0.10 || ^16.0.0",
- "@types/webpack": "^4.41.26",
- "babel-loader": "^8.0.0",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
- "chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "css-loader": "^3.6.0",
- "express": "^4.17.1",
- "file-loader": "^6.2.0",
- "find-up": "^5.0.0",
- "fs-extra": "^9.0.1",
- "html-webpack-plugin": "^4.0.0",
- "node-fetch": "^2.6.7",
- "pnp-webpack-plugin": "1.6.4",
- "read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7",
- "resolve-from": "^5.0.0",
- "style-loader": "^1.3.0",
- "telejson": "^6.0.8",
- "terser-webpack-plugin": "^4.2.3",
- "ts-dedent": "^2.0.0",
- "url-loader": "^4.1.1",
- "util-deprecate": "^1.0.2",
- "webpack": "4",
- "webpack-dev-middleware": "^3.7.3",
- "webpack-virtual-modules": "^0.2.2"
+ "node_modules/@storybook/components": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.4.tgz",
+ "integrity": "sha512-K5RvEObJAnX+SbGJbkM1qrZEk+VR2cUhRCSrFnlfMwsn8/60T3qoH7U8bCXf8krDgbquhMwqev5WzDB+T1VV8g==",
+ "dev": true,
+ "dependencies": {
+ "@radix-ui/react-select": "^1.2.2",
+ "@radix-ui/react-toolbar": "^1.0.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/global": "^5.0.0",
+ "@storybook/theming": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "memoizerific": "^1.11.3",
+ "use-resize-observer": "^9.1.0",
+ "util-deprecate": "^1.0.2"
},
"funding": {
"type": "opencollective",
@@ -6286,178 +4698,44 @@
"peerDependencies": {
"react": "^16.8.0 || ^17.0.0 || ^18.0.0",
"react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/@types/html-minifier-terser": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz",
- "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==",
- "dev": true
- },
- "node_modules/@storybook/manager-webpack4/node_modules/@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "node_modules/@storybook/manager-webpack4/node_modules/@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "node_modules/@storybook/manager-webpack4/node_modules/@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "node_modules/@storybook/manager-webpack4/node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "node_modules/@storybook/manager-webpack4/node_modules/@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
- "dev": true,
- "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/@storybook/manager-webpack4/node_modules/@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
- "dev": true,
- "dependencies": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
- "dev": true,
- "dependencies": {
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
- "dev": true
- },
- "node_modules/@storybook/manager-webpack4/node_modules/@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "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/@storybook/manager-webpack4/node_modules/@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "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/@storybook/manager-webpack4/node_modules/@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "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/@storybook/manager-webpack4/node_modules/@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
- "dev": true,
- "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/@storybook/manager-webpack4/node_modules/@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+ "node_modules/@storybook/core-common": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.4.tgz",
+ "integrity": "sha512-qes4+mXqINu0kCgSMFjk++GZokmYjb71esId0zyJsk0pcIPkAiEjnhbSEQkMhbUfcvO1lztoaQTBW2P7Rd1tag==",
"dev": true,
"dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true,
- "bin": {
- "acorn": "bin/acorn"
+ "@storybook/core-events": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/find-cache-dir": "^3.2.1",
+ "@types/node": "^18.0.0",
+ "@types/node-fetch": "^2.6.4",
+ "@types/pretty-hrtime": "^1.0.0",
+ "chalk": "^4.1.0",
+ "esbuild": "^0.18.0",
+ "esbuild-register": "^3.5.0",
+ "file-system-cache": "2.3.0",
+ "find-cache-dir": "^3.0.0",
+ "find-up": "^5.0.0",
+ "fs-extra": "^11.1.0",
+ "glob": "^10.0.0",
+ "handlebars": "^4.7.7",
+ "lazy-universal-dotenv": "^4.0.0",
+ "node-fetch": "^2.0.0",
+ "picomatch": "^2.3.0",
+ "pkg-dir": "^5.0.0",
+ "pretty-hrtime": "^1.0.3",
+ "resolve-from": "^5.0.0",
+ "ts-dedent": "^2.0.0"
},
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/ansi-styles": {
+ "node_modules/@storybook/core-common/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==",
@@ -6472,40 +4750,7 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "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/@storybook/manager-webpack4/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/chalk": {
+ "node_modules/@storybook/core-common/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
@@ -6521,25 +4766,7 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "node_modules/@storybook/manager-webpack4/node_modules/clean-css": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz",
- "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==",
- "dev": true,
- "dependencies": {
- "source-map": "~0.6.0"
- },
- "engines": {
- "node": ">= 4.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/color-convert": {
+ "node_modules/@storybook/core-common/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==",
@@ -6551,169 +4778,149 @@
"node": ">=7.0.0"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/color-name": {
+ "node_modules/@storybook/core-common/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/@storybook/manager-webpack4/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "node_modules/@storybook/core-common/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": ">= 6"
+ "node": ">=8"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/css-loader": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
- "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
+ "node_modules/@storybook/core-common/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": {
- "camelcase": "^5.3.1",
- "cssesc": "^3.0.0",
- "icss-utils": "^4.1.1",
- "loader-utils": "^1.2.3",
- "normalize-path": "^3.0.0",
- "postcss": "^7.0.32",
- "postcss-modules-extract-imports": "^2.0.0",
- "postcss-modules-local-by-default": "^3.0.2",
- "postcss-modules-scope": "^2.2.0",
- "postcss-modules-values": "^3.0.0",
- "postcss-value-parser": "^4.1.0",
- "schema-utils": "^2.7.0",
- "semver": "^6.3.0"
+ "has-flag": "^4.0.0"
},
"engines": {
- "node": ">= 8.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
+ "node": ">=8"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/css-loader/node_modules/loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
+ "node_modules/@storybook/core-events": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz",
+ "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==",
"dev": true,
"dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
+ "ts-dedent": "^2.0.0"
},
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/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"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/enhanced-resolve": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
- "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
+ "node_modules/@storybook/core-server": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.4.tgz",
+ "integrity": "sha512-mXxZMpCwOhjEPPRjqrTHdiCpFdkc47f46vlgTj02SX+9xKHxslmZ2D3JG/8O4Ab9tG+bBl6lBm3RIrIzaiCu9Q==",
"dev": true,
"dependencies": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
+ "@aw-web-design/x-default-browser": "1.4.126",
+ "@discoveryjs/json-ext": "^0.5.3",
+ "@storybook/builder-manager": "7.6.4",
+ "@storybook/channels": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/csf-tools": "7.6.4",
+ "@storybook/docs-mdx": "^0.1.0",
+ "@storybook/global": "^5.0.0",
+ "@storybook/manager": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@storybook/telemetry": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/detect-port": "^1.3.0",
+ "@types/node": "^18.0.0",
+ "@types/pretty-hrtime": "^1.0.0",
+ "@types/semver": "^7.3.4",
+ "better-opn": "^3.0.2",
+ "chalk": "^4.1.0",
+ "cli-table3": "^0.6.1",
+ "compression": "^1.7.4",
+ "detect-port": "^1.3.0",
+ "express": "^4.17.3",
+ "fs-extra": "^11.1.0",
+ "globby": "^11.0.2",
+ "ip": "^2.0.0",
+ "lodash": "^4.17.21",
+ "open": "^8.4.0",
+ "pretty-hrtime": "^1.0.3",
+ "prompts": "^2.4.0",
+ "read-pkg-up": "^7.0.1",
+ "semver": "^7.3.7",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util": "^0.12.4",
+ "util-deprecate": "^1.0.2",
+ "watchpack": "^2.2.0",
+ "ws": "^8.2.3"
},
- "engines": {
- "node": ">=6.9.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/enhanced-resolve/node_modules/memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
+ "node_modules/@storybook/core-server/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": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
+ "color-convert": "^2.0.1"
},
"engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "dependencies": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
+ "node": ">=8"
},
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/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"
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+ "node_modules/@storybook/core-server/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": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/fill-range/node_modules/extend-shallow": {
+ "node_modules/@storybook/core-server/node_modules/color-convert": {
"version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": {
- "is-extendable": "^0.1.0"
+ "color-name": "~1.1.4"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=7.0.0"
}
},
- "node_modules/@storybook/manager-webpack4/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/@storybook/core-server/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/@storybook/manager-webpack4/node_modules/has-flag": {
+ "node_modules/@storybook/core-server/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==",
@@ -6722,844 +4929,350 @@
"node": ">=8"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/html-minifier-terser": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
- "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
+ "node_modules/@storybook/core-server/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": {
- "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"
+ "yallist": "^4.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=10"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/html-minifier-terser/node_modules/terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
+ "node_modules/@storybook/core-server/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"dependencies": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
+ "lru-cache": "^6.0.0"
},
"bin": {
- "terser": "bin/terser"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/html-minifier-terser/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/@storybook/manager-webpack4/node_modules/html-webpack-plugin": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz",
- "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==",
- "dev": true,
- "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/@storybook/manager-webpack4/node_modules/html-webpack-plugin/node_modules/loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/@storybook/manager-webpack4/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
+ "semver": "bin/semver.js"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
+ "node_modules/@storybook/core-server/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": {
- "is-buffer": "^1.1.5"
+ "has-flag": "^4.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
- "dev": true,
- "engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "node_modules/@storybook/core-server/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/@storybook/manager-webpack4/node_modules/json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
+ "node_modules/@storybook/core-webpack": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.4.tgz",
+ "integrity": "sha512-+C2YddhOhO0Lp9KngzX9XYJZKzCzo4vjXA3IMXxSA7Vo7gFhaa8uQTAXnUx7xCrvFXM/iiHUY1SN+VppB0eBdA==",
"dev": true,
"dependencies": {
- "minimist": "^1.2.0"
+ "@storybook/core-common": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/node": "^18.0.0",
+ "ts-dedent": "^2.0.0"
},
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
- "dev": true,
- "engines": {
- "node": ">=4.3.0 <5.0.0 || >=5.10"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/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==",
+ "node_modules/@storybook/csf": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.2.tgz",
+ "integrity": "sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==",
"dev": true,
"dependencies": {
- "p-locate": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
+ "type-fest": "^2.19.0"
}
},
- "node_modules/@storybook/manager-webpack4/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==",
+ "node_modules/@storybook/csf-plugin": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.4.tgz",
+ "integrity": "sha512-7g9p8s2ITX+Z9iThK5CehPhJOcusVN7JcUEEW+gVF5PlYT+uk/x+66gmQno+scQuNkV9+8UJD6RLFjP+zg2uCA==",
"dev": true,
"dependencies": {
- "semver": "^6.0.0"
- },
- "engines": {
- "node": ">=8"
+ "@storybook/csf-tools": "7.6.4",
+ "unplugin": "^1.3.1"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "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"
+ "node_modules/@storybook/csf-tools": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.4.tgz",
+ "integrity": "sha512-6sLayuhgReIK3/QauNj5BW4o4ZfEMJmKf+EWANPEM/xEOXXqrog6Un8sjtBuJS9N1DwyhHY6xfkEiPAwdttwqw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/generator": "^7.23.0",
+ "@babel/parser": "^7.23.0",
+ "@babel/traverse": "^7.23.2",
+ "@babel/types": "^7.23.0",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/types": "7.6.4",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.1",
+ "ts-dedent": "^2.0.0"
},
- "engines": {
- "node": ">=0.10.0"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/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/@storybook/docs-mdx": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz",
+ "integrity": "sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==",
+ "dev": true
},
- "node_modules/@storybook/manager-webpack4/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==",
+ "node_modules/@storybook/docs-tools": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.4.tgz",
+ "integrity": "sha512-2eGam43aD7O3cocA72Z63kRi7t/ziMSpst0qB218QwBWAeZjT4EYDh8V6j/Xhv6zVQL3msW7AglrQP5kCKPvPA==",
"dev": true,
"dependencies": {
- "minimist": "^1.2.6"
+ "@storybook/core-common": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/doctrine": "^0.0.3",
+ "assert": "^2.1.0",
+ "doctrine": "^3.0.0",
+ "lodash": "^4.17.21"
},
- "bin": {
- "mkdirp": "bin/cmd.js"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/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/@storybook/global": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz",
+ "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==",
+ "dev": true
},
- "node_modules/@storybook/manager-webpack4/node_modules/p-locate/node_modules/p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "node_modules/@storybook/manager": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.4.tgz",
+ "integrity": "sha512-Ug2ejfKgKre8h/RJbkumukwAA44TbvTPEjDcJmyFdAI+kHYhOYdKPEC2UNmVYz8/4HjwMTJQ3M7t/esK8HHY4A==",
"dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- },
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/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==",
+ "node_modules/@storybook/manager-api": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.4.tgz",
+ "integrity": "sha512-RFb/iaBJfXygSgXkINPRq8dXu7AxBicTGX7MxqKXbz5FU7ANwV7abH6ONBYURkSDOH9//TQhRlVkF5u8zWg3bw==",
"dev": true,
"dependencies": {
- "find-up": "^4.0.0"
+ "@storybook/channels": "7.6.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/global": "^5.0.0",
+ "@storybook/router": "7.6.4",
+ "@storybook/theming": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "dequal": "^2.0.2",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "semver": "^7.3.7",
+ "store2": "^2.14.2",
+ "telejson": "^7.2.0",
+ "ts-dedent": "^2.0.0"
},
- "engines": {
- "node": ">=8"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/pkg-dir/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==",
+ "node_modules/@storybook/manager-api/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": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
+ "yallist": "^4.0.0"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/pretty-error": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
- "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.20",
- "renderkid": "^2.0.4"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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/@storybook/manager-webpack4/node_modules/renderkid": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz",
- "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==",
- "dev": true,
- "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": ">=10"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "node_modules/@storybook/manager-api/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"dependencies": {
- "glob": "^7.1.3"
+ "lru-cache": "^6.0.0"
},
"bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/serialize-javascript": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
- "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "dependencies": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "node_modules/@storybook/manager-webpack4/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/@storybook/manager-webpack4/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
+ "semver": "bin/semver.js"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/style-loader": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz",
- "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==",
+ "node_modules/@storybook/manager-api/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/@storybook/mdx2-csf": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz",
+ "integrity": "sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==",
+ "dev": true
+ },
+ "node_modules/@storybook/node-logger": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.4.tgz",
+ "integrity": "sha512-GDkEnnDj4Op+PExs8ZY/P6ox3wg453CdEIaR8PR9TxF/H/T2fBL6puzma3hN2CMam6yzfAL8U+VeIIDLQ5BZdQ==",
"dev": true,
- "dependencies": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^2.7.0"
- },
- "engines": {
- "node": ">= 8.9.0"
- },
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/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==",
+ "node_modules/@storybook/postinstall": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.4.tgz",
+ "integrity": "sha512-7uoB82hSzlFSdDMS3hKQD+AaeSvPit/fAMvXCBxn0/D0UGJUZcq4M9JcKBwEHkZJcbuDROgOTJ6TUeXi/FWO0w==",
"dev": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/terser-webpack-plugin": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz",
- "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==",
+ "node_modules/@storybook/preset-web-components-webpack": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/preset-web-components-webpack/-/preset-web-components-webpack-7.6.4.tgz",
+ "integrity": "sha512-dCp5fzgTwvN9DjlS770WMAwlTaUXv9HC3H1KwR9u5SXCyvLxwqxg/o8GfG970cyDqg3DNftlVQ3BCNrf8KT0cQ==",
"dev": true,
"dependencies": {
- "cacache": "^15.0.5",
- "find-cache-dir": "^3.3.1",
- "jest-worker": "^26.5.0",
- "p-limit": "^3.0.2",
- "schema-utils": "^3.0.0",
- "serialize-javascript": "^5.0.1",
- "source-map": "^0.6.1",
- "terser": "^5.3.4",
- "webpack-sources": "^1.4.3"
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/preset-env": "^7.23.2",
+ "@storybook/core-webpack": "7.6.4",
+ "@types/node": "^18.0.0",
+ "babel-loader": "^7.0.0 || ^8.0.0 || ^9.0.0",
+ "babel-plugin-bundled-import-meta": "^0.3.1"
},
"engines": {
- "node": ">= 10.13.0"
+ "node": ">=16.0.0"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/webpack"
+ "url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
+ "lit": "^2.0.0 || ^3.0.0"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/terser-webpack-plugin/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
+ "node_modules/@storybook/preview": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.4.tgz",
+ "integrity": "sha512-p9xIvNkgXgTpSRphOMV9KpIiNdkymH61jBg3B0XyoF6IfM1S2/mQGvC89lCVz1dMGk2SrH4g87/WcOapkU5ArA==",
"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/@storybook/manager-webpack4/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
- },
- "optionalDependencies": {
- "chokidar": "^3.4.1",
- "watchpack-chokidar2": "^2.0.1"
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/webpack": {
- "version": "4.46.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
- "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
+ "node_modules/@storybook/preview-api": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.4.tgz",
+ "integrity": "sha512-KhisNdQX5NdfAln+spLU4B82d804GJQp/CnI5M1mm/taTnjvMgs/wTH9AmR89OPoq+tFZVW0vhy2zgPS3ar71A==",
"dev": true,
"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"
+ "@storybook/channels": "7.6.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/global": "^5.0.0",
+ "@storybook/types": "7.6.4",
+ "@types/qs": "^6.9.5",
+ "dequal": "^2.0.2",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0",
+ "synchronous-promise": "^2.0.15",
+ "ts-dedent": "^2.0.0",
+ "util-deprecate": "^1.0.2"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependenciesMeta": {
- "webpack-cli": {
- "optional": true
- },
- "webpack-command": {
- "optional": true
- }
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/webpack-dev-middleware": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
- "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==",
+ "node_modules/@storybook/react-dom-shim": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.4.tgz",
+ "integrity": "sha512-wGJfomlDEBnowNmhmumWDu/AcUInxSoPqUUJPgk2f5oL0EW17fR9fDP/juG3XOEdieMDM0jDX48GML7lyvL2fg==",
"dev": true,
- "dependencies": {
- "memory-fs": "^0.4.1",
- "mime": "^2.4.4",
- "mkdirp": "^0.5.1",
- "range-parser": "^1.2.1",
- "webpack-log": "^2.0.0"
- },
- "engines": {
- "node": ">= 6"
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
},
"peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "dependencies": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack-virtual-modules": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz",
- "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==",
- "dev": true,
- "dependencies": {
- "debug": "^3.0.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "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/@storybook/manager-webpack4/node_modules/webpack/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/@storybook/manager-webpack4/node_modules/webpack/node_modules/find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "dependencies": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "dependencies": {
- "locate-path": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "dependencies": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/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,
- "dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/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==",
+ "node_modules/@storybook/router": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.4.tgz",
+ "integrity": "sha512-5MQ7Z4D7XNPN2yhFgjey7hXOYd6s8CggUqeAwhzGTex90SMCkKHSz1hfkcXn1ZqBPaall2b53uK553OvPLp9KQ==",
"dev": true,
"dependencies": {
- "p-try": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
+ "@storybook/client-logger": "7.6.4",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "dependencies": {
- "p-limit": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "dependencies": {
- "find-up": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "dependencies": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "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"
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/manager-webpack4/node_modules/webpack/node_modules/terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
+ "node_modules/@storybook/telemetry": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.4.tgz",
+ "integrity": "sha512-Q4QpvcgloHUEqC9PGo7tgqkUH91/PjX+74/0Hi9orLo8QmLMgdYS5fweFwgSKoTwDGNg2PaHp/jqvhhw7UmnJA==",
"dev": true,
"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/@storybook/manager-webpack5": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/manager-webpack5/-/manager-webpack5-6.5.15.tgz",
- "integrity": "sha512-yrHVFUHGdVRWq/oGJwQu+UOZzxELH5SS+Lpn5oIQ/Dblam9piQC0KmBZtFuA9X8acaw4BBVnXgF/aiqs9fOp/Q==",
- "dev": true,
- "dependencies": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-transform-template-literals": "^7.12.1",
- "@babel/preset-react": "^7.12.10",
- "@storybook/addons": "6.5.15",
- "@storybook/core-client": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "@storybook/theming": "6.5.15",
- "@storybook/ui": "6.5.15",
- "@types/node": "^14.0.10 || ^16.0.0",
- "babel-loader": "^8.0.0",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/csf-tools": "7.6.4",
"chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "css-loader": "^5.0.1",
- "express": "^4.17.1",
- "find-up": "^5.0.0",
- "fs-extra": "^9.0.1",
- "html-webpack-plugin": "^5.0.0",
- "node-fetch": "^2.6.7",
- "process": "^0.11.10",
- "read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7",
- "resolve-from": "^5.0.0",
- "style-loader": "^2.0.0",
- "telejson": "^6.0.8",
- "terser-webpack-plugin": "^5.0.3",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "webpack": "^5.9.0",
- "webpack-dev-middleware": "^4.1.0",
- "webpack-virtual-modules": "^0.4.1"
+ "detect-package-manager": "^2.0.1",
+ "fetch-retry": "^5.0.2",
+ "fs-extra": "^11.1.0",
+ "read-pkg-up": "^7.0.1"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
}
},
- "node_modules/@storybook/manager-webpack5/node_modules/@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "node_modules/@storybook/manager-webpack5/node_modules/ansi-styles": {
+ "node_modules/@storybook/telemetry/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==",
@@ -7574,7 +5287,7 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/@storybook/manager-webpack5/node_modules/chalk": {
+ "node_modules/@storybook/telemetry/node_modules/chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
"integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
@@ -7590,7 +5303,7 @@
"url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@storybook/manager-webpack5/node_modules/color-convert": {
+ "node_modules/@storybook/telemetry/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==",
@@ -7602,13 +5315,13 @@
"node": ">=7.0.0"
}
},
- "node_modules/@storybook/manager-webpack5/node_modules/color-name": {
+ "node_modules/@storybook/telemetry/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/@storybook/manager-webpack5/node_modules/has-flag": {
+ "node_modules/@storybook/telemetry/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==",
@@ -7617,7 +5330,7 @@
"node": ">=8"
}
},
- "node_modules/@storybook/manager-webpack5/node_modules/supports-color": {
+ "node_modules/@storybook/telemetry/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==",
@@ -7629,537 +5342,393 @@
"node": ">=8"
}
},
- "node_modules/@storybook/mdx1-csf": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/@storybook/mdx1-csf/-/mdx1-csf-0.0.1.tgz",
- "integrity": "sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg==",
- "dev": true,
- "dependencies": {
- "@babel/generator": "^7.12.11",
- "@babel/parser": "^7.12.11",
- "@babel/preset-env": "^7.12.11",
- "@babel/types": "^7.12.11",
- "@mdx-js/mdx": "^1.6.22",
- "@types/lodash": "^4.14.167",
- "js-string-escape": "^1.0.1",
- "loader-utils": "^2.0.0",
- "lodash": "^4.17.21",
- "prettier": ">=2.2.1 <=2.3.0",
- "ts-dedent": "^2.0.0"
- }
- },
- "node_modules/@storybook/node-logger": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.5.15.tgz",
- "integrity": "sha512-LQjjbfMuUXm7wZTBKb+iGeCNnej4r1Jb2NxG3Svu2bVhaoB6u33jHAcbmhXpXW1jghzW3kQwOU7BoLuJiRRFIw==",
+ "node_modules/@storybook/theming": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.4.tgz",
+ "integrity": "sha512-Z/dcC5EpkIXelYCkt9ojnX6D7qGOng8YHxV/OWlVE9TrEGYVGPOEfwQryR0RhmGpDha1TYESLYrsDb4A8nJ1EA==",
"dev": true,
"dependencies": {
- "@types/npmlog": "^4.1.2",
- "chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "npmlog": "^5.0.1",
- "pretty-hrtime": "^1.0.3"
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "memoizerific": "^1.11.3"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/node-logger/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==",
+ "node_modules/@storybook/types": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.4.tgz",
+ "integrity": "sha512-qyiiXPCvol5uVgfubcIMzJBA0awAyFPU+TyUP1mkPYyiTHnsHYel/mKlSdPjc8a97N3SlJXHOCx41Hde4IyJgg==",
"dev": true,
"dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
+ "@storybook/channels": "7.6.4",
+ "@types/babel__core": "^7.0.0",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
},
"funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
- "node_modules/@storybook/node-logger/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"
+ "node_modules/@storybook/web-components": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-7.6.4.tgz",
+ "integrity": "sha512-SUvNDzSUkvQdDhPhZU04UNIpuyrpMylodXwe8UX6V/q8dbv1n5RP7mpBh9tGNb9pJKIIznybJAC/oGnUy9jkzw==",
+ "dev": true,
+ "dependencies": {
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-client": "7.6.4",
+ "@storybook/docs-tools": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "@storybook/manager-api": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=16.0.0"
},
"funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/@storybook/node-logger/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"
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
},
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/@storybook/node-logger/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/@storybook/node-logger/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"
+ "peerDependencies": {
+ "lit": "^2.0.0 || ^3.0.0"
}
},
- "node_modules/@storybook/node-logger/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==",
+ "node_modules/@storybook/web-components-webpack5": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/web-components-webpack5/-/web-components-webpack5-7.6.4.tgz",
+ "integrity": "sha512-/D2SkLCPP1ob6kVTJOhTp2nuzNRB+teN+sM1UHwUca3HbEEzwpp471K+PLYjj1WNPYDw/v21O8mG10fpxLlI0A==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "@babel/preset-env": "^7.23.2",
+ "@storybook/builder-webpack5": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/preset-web-components-webpack": "7.6.4",
+ "@storybook/web-components": "7.6.4",
+ "@types/node": "^18.0.0"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/postinstall": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.5.15.tgz",
- "integrity": "sha512-l7pApTgLD10OedNOyuf4vUdVCHLOSaIUIL9gdJl1WaSFHiUpJvvzBIh5M4aRICYPbnuExQc8y2GAjERKO4Ep+g==",
- "dev": true,
- "dependencies": {
- "core-js": "^3.8.2"
+ "node": ">=16.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
+ },
+ "peerDependencies": {
+ "lit": "^2.0.0 || ^3.0.0"
}
},
- "node_modules/@storybook/preview-web": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.15.tgz",
- "integrity": "sha512-gIHABSAD0JS0iRaG67BnSDq/q8Zf4fFwEWBQOSYgcEx2TzhAUeSkhGZUQHdlOTCwuA2PpXT0/cWDH8u2Ev+msg==",
+ "node_modules/@storybook/web-components/node_modules/@storybook/core-client": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.4.tgz",
+ "integrity": "sha512-0msqdGd+VYD1dRgAJ2StTu4d543Wveb7LVVujX3PwD/QCxmCaVUHuAoZrekM/H7jZLw546ZIbLZo0xWrADAUMw==",
"dev": true,
"dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/channel-postmessage": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/store": "6.5.15",
- "ansi-to-html": "^0.6.11",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "synchronous-promise": "^2.0.15",
- "ts-dedent": "^2.0.0",
- "unfetch": "^4.2.0",
- "util-deprecate": "^1.0.2"
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/preview-api": "7.6.4"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
- "node_modules/@storybook/router": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.15.tgz",
- "integrity": "sha512-9t8rI8t7/Krolau29gsdjdbRQ66orONIyP0efp0EukVgv6reNFzb/U14ARrl0uHys6Tl5Xyece9FoakQUdn8Kg==",
+ "node_modules/@swc/core": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.100.tgz",
+ "integrity": "sha512-7dKgTyxJjlrMwFZYb1auj3Xq0D8ZBe+5oeIgfMlRU05doXZypYJe0LAk0yjj3WdbwYzpF+T1PLxwTWizI0pckw==",
"dev": true,
+ "hasInstallScript": true,
"dependencies": {
- "@storybook/client-logger": "6.5.15",
- "core-js": "^3.8.2",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7"
+ "@swc/counter": "^0.1.1",
+ "@swc/types": "^0.1.5"
+ },
+ "engines": {
+ "node": ">=10"
},
"funding": {
"type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "url": "https://opencollective.com/swc"
+ },
+ "optionalDependencies": {
+ "@swc/core-darwin-arm64": "1.3.100",
+ "@swc/core-darwin-x64": "1.3.100",
+ "@swc/core-linux-arm64-gnu": "1.3.100",
+ "@swc/core-linux-arm64-musl": "1.3.100",
+ "@swc/core-linux-x64-gnu": "1.3.100",
+ "@swc/core-linux-x64-musl": "1.3.100",
+ "@swc/core-win32-arm64-msvc": "1.3.100",
+ "@swc/core-win32-ia32-msvc": "1.3.100",
+ "@swc/core-win32-x64-msvc": "1.3.100"
},
"peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@swc/helpers": "^0.5.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/helpers": {
+ "optional": true
+ }
}
},
- "node_modules/@storybook/semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==",
+ "node_modules/@swc/core-darwin-arm64": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.100.tgz",
+ "integrity": "sha512-XVWFsKe6ei+SsDbwmsuRkYck1SXRpO60Hioa4hoLwR8fxbA9eVp6enZtMxzVVMBi8ej5seZ4HZQeAWepbukiBw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "core-js": "^3.6.5",
- "find-up": "^4.1.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
"node": ">=10"
}
},
- "node_modules/@storybook/semver/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==",
+ "node_modules/@swc/core-darwin-x64": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.100.tgz",
+ "integrity": "sha512-KF/MXrnH1nakm1wbt4XV8FS7kvqD9TGmVxeJ0U4bbvxXMvzeYUurzg3AJUTXYmXDhH/VXOYJE5N5RkwZZPs5iA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- },
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
- "node_modules/@storybook/semver/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==",
+ "node_modules/@swc/core-linux-arm64-gnu": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.100.tgz",
+ "integrity": "sha512-p8hikNnAEJrw5vHCtKiFT4hdlQxk1V7vqPmvUDgL/qe2menQDK/i12tbz7/3BEQ4UqUPnvwpmVn2d19RdEMNxw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "p-locate": "^4.1.0"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=8"
+ "node": ">=10"
}
},
- "node_modules/@storybook/semver/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==",
+ "node_modules/@swc/core-linux-arm64-musl": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.100.tgz",
+ "integrity": "sha512-BWx/0EeY89WC4q3AaIaBSGfQxkYxIlS3mX19dwy2FWJs/O+fMvF9oLk/CyJPOZzbp+1DjGeeoGFuDYpiNO91JA==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "p-try": "^2.0.0"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=10"
}
},
- "node_modules/@storybook/semver/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==",
+ "node_modules/@swc/core-linux-x64-gnu": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.100.tgz",
+ "integrity": "sha512-XUdGu3dxAkjsahLYnm8WijPfKebo+jHgHphDxaW0ovI6sTdmEGFDew7QzKZRlbYL2jRkUuuKuDGvD6lO5frmhA==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "p-limit": "^2.2.0"
- },
+ "optional": true,
+ "os": [
+ "linux"
+ ],
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/@storybook/source-loader": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.5.15.tgz",
- "integrity": "sha512-MaWzki40g0/7NWmJgUBhOp+e7y8Ohw6G/bRr/rcDP7eXSnud6ThYylXv0QqBScLPPTy8txjmBClCoqdLGyvLWQ==",
- "dev": true,
- "dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "core-js": "^3.8.2",
- "estraverse": "^5.2.0",
- "global": "^4.4.0",
- "loader-utils": "^2.0.4",
- "lodash": "^4.17.21",
- "prettier": ">=2.2.1 <=2.3.0",
- "regenerator-runtime": "^0.13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
- }
- },
- "node_modules/@storybook/store": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.5.15.tgz",
- "integrity": "sha512-r6cYTf6GtbqgdI4ZG3xuWdJAAu5fJ3xAWMiDkHyoK2u+R2TeYXIsJvgn0BPrW87sZhELIkg4ckdFECmATs3kpQ==",
- "dev": true,
- "dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "regenerator-runtime": "^0.13.7",
- "slash": "^3.0.0",
- "stable": "^0.1.8",
- "synchronous-promise": "^2.0.15",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "node": ">=10"
}
},
- "node_modules/@storybook/telemetry": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-6.5.15.tgz",
- "integrity": "sha512-WHMRG6xMkEGscn1q4SotwzV8hxM1g3zHyXPN77iosY5zpOIn/qAzvkmW28V1DPH9jPWMZMizBgG1TIQvUpduXg==",
+ "node_modules/@swc/core-linux-x64-musl": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.100.tgz",
+ "integrity": "sha512-PhoXKf+f0OaNW/GCuXjJ0/KfK9EJX7z2gko+7nVnEA0p3aaPtbP6cq1Ubbl6CMoPL+Ci3gZ7nYumDqXNc3CtLQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "detect-package-manager": "^2.0.1",
- "fetch-retry": "^5.0.2",
- "fs-extra": "^9.0.1",
- "global": "^4.4.0",
- "isomorphic-unfetch": "^3.1.0",
- "nanoid": "^3.3.1",
- "read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=10"
}
},
- "node_modules/@storybook/telemetry/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==",
+ "node_modules/@swc/core-win32-arm64-msvc": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.100.tgz",
+ "integrity": "sha512-PwLADZN6F9cXn4Jw52FeP/MCLVHm8vwouZZSOoOScDtihjY495SSjdPnlosMaRSR4wJQssGwiD/4MbpgQPqbAw==",
+ "cpu": [
+ "arm64"
+ ],
"dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ "node": ">=10"
}
},
- "node_modules/@storybook/telemetry/node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "node_modules/@swc/core-win32-ia32-msvc": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.100.tgz",
+ "integrity": "sha512-0f6nicKSLlDKlyPRl2JEmkpBV4aeDfRQg6n8mPqgL7bliZIcDahG0ej+HxgNjZfS3e0yjDxsNRa6sAqWU2Z60A==",
+ "cpu": [
+ "ia32"
+ ],
"dev": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
"node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/@storybook/telemetry/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==",
+ "node_modules/@swc/core-win32-x64-msvc": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.100.tgz",
+ "integrity": "sha512-b7J0rPoMkRTa3XyUGt8PwCaIBuYWsL2DqbirrQKRESzgCvif5iNpqaM6kjIjI/5y5q1Ycv564CB51YDpiS8EtQ==",
+ "cpu": [
+ "x64"
+ ],
"dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
+ "optional": true,
+ "os": [
+ "win32"
+ ],
"engines": {
- "node": ">=7.0.0"
+ "node": ">=10"
}
},
- "node_modules/@storybook/telemetry/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==",
+ "node_modules/@swc/counter": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz",
+ "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==",
"dev": true
},
- "node_modules/@storybook/telemetry/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/@swc/types": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz",
+ "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==",
+ "dev": true
},
- "node_modules/@storybook/telemetry/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==",
+ "node_modules/@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
}
},
- "node_modules/@storybook/theming": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.15.tgz",
- "integrity": "sha512-pgdW0lVZKKXQ4VhIfLHycMmwFSVOY7vLTKnytag4Y8Yz+aXm0bwDN/QxPntFzDH47F1Rcy2ywNnvty8ooDTvuA==",
+ "node_modules/@types/babel__generator": {
+ "version": "7.6.7",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz",
+ "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==",
"dev": true,
"dependencies": {
- "@storybook/client-logger": "6.5.15",
- "core-js": "^3.8.2",
- "memoizerific": "^1.11.3",
- "regenerator-runtime": "^0.13.7"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@babel/types": "^7.0.0"
}
},
- "node_modules/@storybook/ui": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.15.tgz",
- "integrity": "sha512-OO+TWZmI8ebWA1C3JBKNvbUbsgvt4GppqsGlkf5CTBZrT/MzmMlYiooLAtlY1ZPcMtTd5ynLxvroHWBEnMOk2A==",
+ "node_modules/@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
"dev": true,
"dependencies": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/router": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "resolve-from": "^5.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
}
},
- "node_modules/@storybook/web-components": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-6.5.15.tgz",
- "integrity": "sha512-nG76nKRVtavsFEdgqAJeNtuNoNVaHUPgWh0OaofSGqqAIScdWZ+3+aSfqBJy2wnt+hpU/SyCyWfEQujsjGjaTQ==",
+ "node_modules/@types/babel__traverse": {
+ "version": "7.20.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz",
+ "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==",
"dev": true,
"dependencies": {
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/preset-env": "^7.12.11",
- "@storybook/addons": "6.5.15",
- "@storybook/client-api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/docs-tools": "6.5.15",
- "@storybook/preview-web": "6.5.15",
- "@storybook/store": "6.5.15",
- "@types/node": "^14.14.20 || ^16.0.0",
- "@types/webpack-env": "^1.16.0",
- "babel-plugin-bundled-import-meta": "^0.3.1",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "react": "16.14.0",
- "react-dom": "16.14.0",
- "read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
- },
- "bin": {
- "build-storybook": "bin/build.js",
- "start-storybook": "bin/index.js",
- "storybook-server": "bin/index.js"
- },
- "engines": {
- "node": ">=10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/storybook"
- },
- "peerDependencies": {
- "lit-html": "^1.4.1 || ^2.0.0"
+ "@babel/types": "^7.20.7"
}
},
- "node_modules/@storybook/web-components/node_modules/@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "node_modules/@storybook/web-components/node_modules/react": {
- "version": "16.14.0",
- "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
- "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
+ "node_modules/@types/body-parser": {
+ "version": "1.19.5",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
+ "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
"dev": true,
"dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2"
- },
- "engines": {
- "node": ">=0.10.0"
+ "@types/connect": "*",
+ "@types/node": "*"
}
},
- "node_modules/@storybook/web-components/node_modules/react-dom": {
- "version": "16.14.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz",
- "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==",
+ "node_modules/@types/connect": {
+ "version": "3.4.38",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
+ "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
"dev": true,
"dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.19.1"
- },
- "peerDependencies": {
- "react": "^16.14.0"
+ "@types/node": "*"
}
},
- "node_modules/@storybook/web-components/node_modules/scheduler": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
- "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
+ "node_modules/@types/cross-spawn": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz",
+ "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==",
"dev": true,
"dependencies": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
+ "@types/node": "*"
}
},
+ "node_modules/@types/detect-port": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.5.tgz",
+ "integrity": "sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==",
+ "dev": true
+ },
+ "node_modules/@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==",
+ "dev": true
+ },
+ "node_modules/@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==",
+ "dev": true
+ },
+ "node_modules/@types/emscripten": {
+ "version": "1.39.10",
+ "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.10.tgz",
+ "integrity": "sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==",
+ "dev": true
+ },
"node_modules/@types/eslint": {
"version": "8.4.10",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz",
@@ -8186,32 +5755,43 @@
"integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
"dev": true
},
- "node_modules/@types/glob": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz",
- "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==",
+ "node_modules/@types/express": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
+ "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
"dev": true,
"dependencies": {
- "@types/minimatch": "*",
- "@types/node": "*"
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^4.17.33",
+ "@types/qs": "*",
+ "@types/serve-static": "*"
}
},
- "node_modules/@types/graceful-fs": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
- "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
+ "node_modules/@types/express-serve-static-core": {
+ "version": "4.17.41",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz",
+ "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==",
"dev": true,
"dependencies": {
- "@types/node": "*"
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
}
},
- "node_modules/@types/hast": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
- "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
+ "node_modules/@types/find-cache-dir": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz",
+ "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==",
+ "dev": true
+ },
+ "node_modules/@types/graceful-fs": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+ "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
"dev": true,
"dependencies": {
- "@types/unist": "*"
+ "@types/node": "*"
}
},
"node_modules/@types/html-minifier-terser": {
@@ -8220,31 +5800,31 @@
"integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==",
"dev": true
},
- "node_modules/@types/is-function": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz",
- "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==",
+ "node_modules/@types/http-errors": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
+ "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
"dev": true
},
"node_modules/@types/istanbul-lib-coverage": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
- "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"dev": true
},
"node_modules/@types/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+ "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-coverage": "*"
}
},
"node_modules/@types/istanbul-reports": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
- "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
"dependencies": {
"@types/istanbul-lib-report": "*"
@@ -8257,24 +5837,27 @@
"dev": true
},
"node_modules/@types/lodash": {
- "version": "4.14.191",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz",
- "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==",
+ "version": "4.14.202",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz",
+ "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==",
"dev": true
},
- "node_modules/@types/mdast": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
- "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
- "dev": true,
- "dependencies": {
- "@types/unist": "*"
- }
+ "node_modules/@types/mdx": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.10.tgz",
+ "integrity": "sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==",
+ "dev": true
},
- "node_modules/@types/minimatch": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
- "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
+ "node_modules/@types/mime": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
+ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
+ "dev": true
+ },
+ "node_modules/@types/mime-types": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz",
+ "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==",
"dev": true
},
"node_modules/@types/node": {
@@ -8284,138 +5867,127 @@
"dev": true
},
"node_modules/@types/node-fetch": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz",
- "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz",
+ "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==",
"dev": true,
"dependencies": {
"@types/node": "*",
- "form-data": "^3.0.0"
+ "form-data": "^4.0.0"
}
},
"node_modules/@types/normalize-package-data": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
- "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
- "dev": true
- },
- "node_modules/@types/npmlog": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz",
- "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==",
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
"dev": true
},
"node_modules/@types/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
- "dev": true
- },
- "node_modules/@types/parse5": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz",
- "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
"dev": true
},
"node_modules/@types/pretty-hrtime": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz",
- "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==",
"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==",
+ "node_modules/@types/prop-types": {
+ "version": "15.7.11",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
+ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
"dev": true
},
- "node_modules/@types/source-list-map": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
- "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
+ "node_modules/@types/qs": {
+ "version": "6.9.10",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz",
+ "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==",
"dev": true
},
- "node_modules/@types/tapable": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz",
- "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==",
+ "node_modules/@types/range-parser": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
+ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
"dev": true
},
- "node_modules/@types/trusted-types": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz",
- "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==",
- "dev": true,
- "peer": true
- },
- "node_modules/@types/uglify-js": {
- "version": "3.17.1",
- "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz",
- "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==",
+ "node_modules/@types/react": {
+ "version": "18.2.45",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.45.tgz",
+ "integrity": "sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==",
"dev": true,
"dependencies": {
- "source-map": "^0.6.1"
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
}
},
- "node_modules/@types/unist": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
- "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==",
+ "node_modules/@types/scheduler": {
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
+ "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
"dev": true
},
- "node_modules/@types/webpack": {
- "version": "4.41.33",
- "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz",
- "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==",
+ "node_modules/@types/semver": {
+ "version": "7.5.6",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
+ "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
+ "dev": true
+ },
+ "node_modules/@types/send": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
+ "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
"dev": true,
"dependencies": {
- "@types/node": "*",
- "@types/tapable": "^1",
- "@types/uglify-js": "*",
- "@types/webpack-sources": "*",
- "anymatch": "^3.0.0",
- "source-map": "^0.6.0"
+ "@types/mime": "^1",
+ "@types/node": "*"
}
},
- "node_modules/@types/webpack-env": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz",
- "integrity": "sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==",
- "dev": true
- },
- "node_modules/@types/webpack-sources": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz",
- "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==",
+ "node_modules/@types/serve-static": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
+ "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
"dev": true,
"dependencies": {
- "@types/node": "*",
- "@types/source-list-map": "*",
- "source-map": "^0.7.3"
+ "@types/http-errors": "*",
+ "@types/mime": "*",
+ "@types/node": "*"
}
},
- "node_modules/@types/webpack-sources/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
+ "node_modules/@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
"dev": true,
- "engines": {
- "node": ">= 8"
- }
+ "peer": true
+ },
+ "node_modules/@types/unist": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
+ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==",
+ "dev": true
+ },
+ "node_modules/@types/uuid": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz",
+ "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==",
+ "dev": true
},
"node_modules/@types/yargs": {
- "version": "15.0.15",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz",
- "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"dependencies": {
"@types/yargs-parser": "*"
}
},
"node_modules/@types/yargs-parser": {
- "version": "21.0.0",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
- "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
+ "version": "21.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
"dev": true
},
"node_modules/@web/config-loader": {
@@ -8491,75 +6063,6 @@
"integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
"dev": true
},
- "node_modules/@webassemblyjs/helper-code-frame": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
- "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-code-frame/node_modules/@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "node_modules/@webassemblyjs/helper-fsm": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
- "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
- "dev": true
- },
- "node_modules/@webassemblyjs/helper-module-context": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
- "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/ast": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/helper-module-context/node_modules/@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/helper-module-context/node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
"node_modules/@webassemblyjs/helper-numbers": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
@@ -8668,49 +6171,6 @@
"@webassemblyjs/utf8": "1.11.1"
}
},
- "node_modules/@webassemblyjs/wast-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
- "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
- "dev": true,
- "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-parser/node_modules/@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "dependencies": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/floating-point-hex-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
- "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
- "dev": true
- },
- "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "node_modules/@webassemblyjs/wast-parser/node_modules/@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
"node_modules/@webassemblyjs/wast-printer": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
@@ -8733,6 +6193,59 @@
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true
},
+ "node_modules/@yarnpkg/esbuild-plugin-pnp": {
+ "version": "3.0.0-rc.15",
+ "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz",
+ "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==",
+ "dev": true,
+ "dependencies": {
+ "tslib": "^2.4.0"
+ },
+ "engines": {
+ "node": ">=14.15.0"
+ },
+ "peerDependencies": {
+ "esbuild": ">=0.10.0"
+ }
+ },
+ "node_modules/@yarnpkg/fslib": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz",
+ "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==",
+ "dev": true,
+ "dependencies": {
+ "@yarnpkg/libzip": "^2.3.0",
+ "tslib": "^1.13.0"
+ },
+ "engines": {
+ "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0"
+ }
+ },
+ "node_modules/@yarnpkg/fslib/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/@yarnpkg/libzip": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz",
+ "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==",
+ "dev": true,
+ "dependencies": {
+ "@types/emscripten": "^1.39.6",
+ "tslib": "^1.13.0"
+ },
+ "engines": {
+ "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0"
+ }
+ },
+ "node_modules/@yarnpkg/libzip/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/accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -8747,9 +6260,9 @@
}
},
"node_modules/acorn": {
- "version": "8.8.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
- "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
"dev": true,
"bin": {
"acorn": "bin/acorn"
@@ -8776,6 +6289,18 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/agent-base": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
+ "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
+ },
"node_modules/aggregate-error": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
@@ -8789,31 +6314,6 @@
"node": ">=8"
}
},
- "node_modules/airbnb-js-shims": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz",
- "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==",
- "dev": true,
- "dependencies": {
- "array-includes": "^3.0.3",
- "array.prototype.flat": "^1.2.1",
- "array.prototype.flatmap": "^1.2.1",
- "es5-shim": "^4.5.13",
- "es6-shim": "^0.35.5",
- "function.prototype.name": "^1.1.0",
- "globalthis": "^1.0.0",
- "object.entries": "^1.1.0",
- "object.fromentries": "^2.0.0 || ^1.0.0",
- "object.getownpropertydescriptors": "^2.0.3",
- "object.values": "^1.1.0",
- "promise.allsettled": "^1.0.0",
- "promise.prototype.finally": "^3.1.0",
- "string.prototype.matchall": "^4.0.0 || ^3.0.1",
- "string.prototype.padend": "^3.0.0",
- "string.prototype.padstart": "^3.0.0",
- "symbol.prototype.description": "^1.0.0"
- }
- },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -8830,15 +6330,45 @@
"url": "https://github.com/sponsors/epoberezkin"
}
},
- "node_modules/ajv-errors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
- "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+ "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": ">=5.0.0"
+ "ajv": "^8.0.0"
+ },
+ "peerDependenciesMeta": {
+ "ajv": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/ajv-formats/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/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/ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
@@ -8848,24 +6378,6 @@
"ajv": "^6.9.1"
}
},
- "node_modules/ansi-align": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
- "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.1.0"
- }
- },
- "node_modules/ansi-colors": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
- "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/ansi-html-community": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
@@ -8899,21 +6411,6 @@
"node": ">=4"
}
},
- "node_modules/ansi-to-html": {
- "version": "0.6.15",
- "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz",
- "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==",
- "dev": true,
- "dependencies": {
- "entities": "^2.0.0"
- },
- "bin": {
- "ansi-to-html": "bin/ansi-to-html"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
"node_modules/anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -8933,25 +6430,6 @@
"integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==",
"dev": true
},
- "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": "2.0.0",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
- "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
- "dev": true,
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/argparse": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
@@ -8961,31 +6439,16 @@
"sprintf-js": "~1.0.2"
}
},
- "node_modules/arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
+ "node_modules/aria-hidden": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz",
+ "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==",
"dev": true,
+ "dependencies": {
+ "tslib": "^2.0.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
}
},
"node_modules/array-back": {
@@ -8997,41 +6460,12 @@
"node": ">=12.17"
}
},
- "node_modules/array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"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/array-includes": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
- "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "is-string": "^1.0.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
@@ -9041,215 +6475,49 @@
"node": ">=8"
}
},
- "node_modules/array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
- "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
- "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.map": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.5.tgz",
- "integrity": "sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==",
+ "node_modules/assert": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
+ "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
"dev": true,
"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"
+ "is-nan": "^1.3.2",
+ "object-is": "^1.1.5",
+ "object.assign": "^4.1.4",
+ "util": "^0.12.5"
}
},
- "node_modules/array.prototype.reduce": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz",
- "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==",
+ "node_modules/ast-types": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
+ "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
"dev": true,
"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"
+ "tslib": "^2.0.1"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
+ "node": ">=4"
}
},
- "node_modules/asn1.js/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "node_modules/async": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
+ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
"dev": true
},
- "node_modules/assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
- "dev": true,
- "dependencies": {
- "object-assign": "^4.1.1",
- "util": "0.10.3"
- }
- },
- "node_modules/assert/node_modules/inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==",
+ "node_modules/async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"dev": true
},
- "node_modules/assert/node_modules/util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==",
- "dev": true,
- "dependencies": {
- "inherits": "2.0.1"
- }
- },
- "node_modules/assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/async-each": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
- "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
- "dev": true,
- "optional": 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/atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true,
- "bin": {
- "atob": "bin/atob.js"
- },
- "engines": {
- "node": ">= 4.5.0"
- }
- },
- "node_modules/autoprefixer": {
- "version": "9.8.8",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz",
- "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.12.0",
- "caniuse-lite": "^1.0.30001109",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "picocolors": "^0.2.1",
- "postcss": "^7.0.32",
- "postcss-value-parser": "^4.1.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "funding": {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- }
- },
"node_modules/available-typed-arrays": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
@@ -9271,6 +6539,15 @@
"node": ">=4"
}
},
+ "node_modules/babel-core": {
+ "version": "7.0.0-bridge.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
+ "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
+ "dev": true,
+ "peerDependencies": {
+ "@babel/core": "^7.0.0-0"
+ }
+ },
"node_modules/babel-loader": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz",
@@ -9290,125 +6567,6 @@
"webpack": ">=2"
}
},
- "node_modules/babel-loader/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/babel-loader/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/babel-loader/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/babel-loader/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/babel-loader/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/babel-loader/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/babel-loader/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/babel-plugin-apply-mdx-type-prop": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz",
- "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "7.10.4",
- "@mdx-js/util": "1.6.22"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- },
- "peerDependencies": {
- "@babel/core": "^7.11.6"
- }
- },
- "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- },
"node_modules/babel-plugin-bundled-import-meta": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/babel-plugin-bundled-import-meta/-/babel-plugin-bundled-import-meta-0.3.2.tgz",
@@ -9425,25 +6583,6 @@
"@babel/core": "^7.7.0"
}
},
- "node_modules/babel-plugin-extract-import-names": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz",
- "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "7.10.4"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- },
"node_modules/babel-plugin-istanbul": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
@@ -9460,74 +6599,39 @@
"node": ">=8"
}
},
- "node_modules/babel-plugin-macros": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
- "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "cosmiconfig": "^7.0.0",
- "resolve": "^1.19.0"
- },
- "engines": {
- "node": ">=10",
- "npm": ">=6"
- }
- },
- "node_modules/babel-plugin-named-exports-order": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz",
- "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==",
- "dev": true
- },
"node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
- "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz",
+ "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.17.7",
- "@babel/helper-define-polyfill-provider": "^0.3.3",
- "semver": "^6.1.1"
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-define-polyfill-provider": "^0.4.4",
+ "semver": "^6.3.1"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
- "node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz",
- "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==",
+ "node_modules/babel-plugin-polyfill-corejs2/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,
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.3.3",
- "core-js-compat": "^3.25.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
+ "bin": {
+ "semver": "bin/semver.js"
}
},
"node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz",
- "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz",
+ "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==",
"dev": true,
"dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.3.3"
+ "@babel/helper-define-polyfill-provider": "^0.4.4"
},
"peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/bail": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
- "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
}
},
"node_modules/balanced-match": {
@@ -9536,36 +6640,6 @@
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
"dev": true
},
- "node_modules/base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
@@ -9586,46 +6660,23 @@
}
]
},
- "node_modules/batch-processor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz",
- "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==",
- "dev": true
- },
"node_modules/better-opn": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz",
- "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==",
- "dev": true,
- "dependencies": {
- "open": "^7.0.3"
- },
- "engines": {
- "node": ">8.0.0"
- }
- },
- "node_modules/better-opn/node_modules/open": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
- "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz",
+ "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==",
"dev": true,
"dependencies": {
- "is-docker": "^2.0.0",
- "is-wsl": "^2.1.1"
+ "open": "^8.0.4"
},
"engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "node": ">=12.0.0"
}
},
"node_modules/big-integer": {
- "version": "1.6.51",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
- "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
+ "version": "1.6.52",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
+ "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
"dev": true,
- "optional": true,
"engines": {
"node": ">=0.6"
}
@@ -9648,28 +6699,17 @@
"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==",
+ "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,
- "optional": true,
"dependencies": {
- "file-uri-to-path": "1.0.0"
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
}
},
- "node_modules/bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
- },
- "node_modules/bn.js": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
- "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
- "dev": true
- },
"node_modules/body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
@@ -9724,118 +6764,16 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"dev": true
},
- "node_modules/boxen": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
- "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
- "dev": true,
- "dependencies": {
- "ansi-align": "^3.0.0",
- "camelcase": "^6.2.0",
- "chalk": "^4.1.0",
- "cli-boxes": "^2.2.1",
- "string-width": "^4.2.2",
- "type-fest": "^0.20.2",
- "widest-line": "^3.1.0",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/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/boxen/node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/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/boxen/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/boxen/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/boxen/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/boxen/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==",
+ "node_modules/bplist-parser": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
+ "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
"dev": true,
"dependencies": {
- "has-flag": "^4.0.0"
+ "big-integer": "^1.6.44"
},
"engines": {
- "node": ">=8"
- }
- },
- "node_modules/bplist-parser": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
- "integrity": "sha512-2AEM0FXy8ZxVLBuqX0hqt1gDwcnz2zygEkQ6zaD5Wko/sB9paUNwlpawrFtKeHUAQUOzjVy9AO4oeonqIHKA9Q==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "big-integer": "^1.6.7"
+ "node": ">= 5.10.0"
}
},
"node_modules/brace-expansion": {
@@ -9860,115 +6798,25 @@
"node": ">=8"
}
},
- "node_modules/brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
- "dev": true
- },
"node_modules/browser-assert": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz",
"integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==",
"dev": true
},
- "node_modules/browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "dev": true,
- "dependencies": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "node_modules/browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
- "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
- "dev": true,
- "dependencies": {
- "bn.js": "^5.0.0",
- "randombytes": "^2.0.1"
- }
- },
- "node_modules/browserify-sign": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
- "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
- "dev": true,
- "dependencies": {
- "bn.js": "^5.1.1",
- "browserify-rsa": "^4.0.1",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.3",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.5",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- }
- },
- "node_modules/browserify-sign/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/browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==",
"dev": true,
"dependencies": {
- "pako": "~1.0.5"
+ "pako": "~0.2.0"
}
},
"node_modules/browserslist": {
- "version": "4.21.4",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
- "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
+ "version": "4.22.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
+ "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
"dev": true,
"funding": [
{
@@ -9978,13 +6826,17 @@
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001400",
- "electron-to-chromium": "^1.4.251",
- "node-releases": "^2.0.6",
- "update-browserslist-db": "^1.0.9"
+ "caniuse-lite": "^1.0.30001565",
+ "electron-to-chromium": "^1.4.601",
+ "node-releases": "^2.0.14",
+ "update-browserslist-db": "^1.0.13"
},
"bin": {
"browserslist": "cli.js"
@@ -10003,14 +6855,36 @@
}
},
"node_modules/buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "version": "5.7.1",
+ "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.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
+ "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": {
@@ -10019,24 +6893,6 @@
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
- "node_modules/buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
- "dev": true
- },
- "node_modules/buffer/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/builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
- "dev": true
- },
"node_modules/bytes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
@@ -10046,88 +6902,6 @@
"node": ">= 0.8"
}
},
- "node_modules/cacache": {
- "version": "15.3.0",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
- "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
- "dev": true,
- "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/cacache/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/cacache/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/cacache/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/cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "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/cached-iterable": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/cached-iterable/-/cached-iterable-0.3.0.tgz",
@@ -10138,24 +6912,19 @@
}
},
"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==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
+ "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
"dev": true,
"dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.1",
+ "set-function-length": "^1.1.1"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/call-me-maybe": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
- "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==",
- "dev": true
- },
"node_modules/callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -10184,43 +6953,10 @@
"node": ">=6"
}
},
- "node_modules/camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/camelcase-keys/node_modules/camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/caniuse-lite": {
- "version": "1.0.30001442",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz",
- "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==",
+ "version": "1.0.30001570",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz",
+ "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==",
"dev": true,
"funding": [
{
@@ -10230,21 +6966,13 @@
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
]
},
- "node_modules/capture-exit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
- "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
- "dev": true,
- "dependencies": {
- "rsvp": "^4.8.4"
- },
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
"node_modules/case-sensitive-paths-webpack-plugin": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
@@ -10254,16 +6982,6 @@
"node": ">=4"
}
},
- "node_modules/ccount": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
- "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -10278,36 +6996,6 @@
"node": ">=4"
}
},
- "node_modules/character-entities": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
- "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-entities-legacy": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
- "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/character-reference-invalid": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
- "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@@ -10354,123 +7042,18 @@
}
},
"node_modules/ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true
- },
- "node_modules/cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/class-utils/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/class-utils/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/sibiraj-s"
+ }
+ ],
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
"node_modules/clean-css": {
@@ -10494,10 +7077,22 @@
"node": ">=6"
}
},
- "node_modules/cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
+ "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.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
"dev": true,
"engines": {
"node": ">=6"
@@ -10521,41 +7116,47 @@
"@colors/colors": "1.5.0"
}
},
- "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==",
+ "node_modules/cli-table3/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/cli-table3/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": {
- "is-plain-object": "^2.0.4",
- "kind-of": "^6.0.2",
- "shallow-clone": "^3.0.0"
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.1"
},
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
- "node_modules/collapse-white-space": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
- "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==",
+ "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,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "engines": {
+ "node": ">=0.8"
}
},
- "node_modules/collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
+ "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": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=6"
}
},
"node_modules/color-convert": {
@@ -10573,19 +7174,10 @@
"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": "1.4.0",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
- "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
+ "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": {
@@ -10600,16 +7192,6 @@
"node": ">= 0.8"
}
},
- "node_modules/comma-separated-tokens": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
- "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/command-line-args": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.2.tgz",
@@ -10626,13 +7208,10 @@
}
},
"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"
- }
+ "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/comment-parser": {
"version": "1.2.4",
@@ -10643,18 +7222,18 @@
"node": ">= 12.0.0"
}
},
+ "node_modules/common-path-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
+ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
+ "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/component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
"node_modules/compressible": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -10700,6 +7279,12 @@
"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",
@@ -10721,16 +7306,10 @@
"typedarray": "^0.0.6"
}
},
- "node_modules/concat-stream/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/concat-stream/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "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",
@@ -10742,6 +7321,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "node_modules/concat-stream/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"node_modules/concat-stream/node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -10751,18 +7336,6 @@
"safe-buffer": "~5.1.0"
}
},
- "node_modules/console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
- "dev": true
- },
- "node_modules/console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
- "dev": true
- },
"node_modules/constants-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
@@ -10781,26 +7354,6 @@
"node": ">= 0.6"
}
},
- "node_modules/content-disposition/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/content-type": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
@@ -10811,9 +7364,9 @@
}
},
"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==",
+ "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/cookie": {
@@ -10831,77 +7384,13 @@
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
"dev": true
},
- "node_modules/copy-concurrently": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
- "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
- "dev": true,
- "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-concurrently/node_modules/aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true
- },
- "node_modules/copy-concurrently/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/copy-concurrently/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
- }
- },
- "node_modules/copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/core-js": {
- "version": "3.27.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.1.tgz",
- "integrity": "sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==",
- "dev": true,
- "hasInstallScript": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
"node_modules/core-js-compat": {
- "version": "3.27.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz",
- "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==",
+ "version": "3.34.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz",
+ "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==",
"dev": true,
"dependencies": {
- "browserslist": "^4.21.4"
+ "browserslist": "^4.22.2"
},
"funding": {
"type": "opencollective",
@@ -10930,378 +7419,6 @@
"node": ">=10"
}
},
- "node_modules/cp-file": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz",
- "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "nested-error-stacks": "^2.0.0",
- "p-event": "^4.1.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/cp-file/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/cpy": {
- "version": "8.1.2",
- "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz",
- "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==",
- "dev": true,
- "dependencies": {
- "arrify": "^2.0.1",
- "cp-file": "^7.0.0",
- "globby": "^9.2.0",
- "has-glob": "^1.0.0",
- "junk": "^3.1.0",
- "nested-error-stacks": "^2.1.0",
- "p-all": "^2.1.0",
- "p-filter": "^2.1.0",
- "p-map": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cpy/node_modules/@nodelib/fs.stat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
- "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/cpy/node_modules/@types/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
- "dev": true,
- "dependencies": {
- "@types/minimatch": "*",
- "@types/node": "*"
- }
- },
- "node_modules/cpy/node_modules/array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
- "dev": true,
- "dependencies": {
- "array-uniq": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "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/cpy/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/dir-glob": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
- "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
- "dev": true,
- "dependencies": {
- "path-type": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cpy/node_modules/fast-glob": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
- "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
- "dev": true,
- "dependencies": {
- "@mrmlnc/readdir-enhanced": "^2.2.1",
- "@nodelib/fs.stat": "^1.1.2",
- "glob-parent": "^3.1.0",
- "is-glob": "^4.0.0",
- "merge2": "^1.2.3",
- "micromatch": "^3.1.10"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/cpy/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "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/cpy/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
- "dev": true,
- "dependencies": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- }
- },
- "node_modules/cpy/node_modules/glob-parent/node_modules/is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/globby": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
- "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
- "dev": true,
- "dependencies": {
- "@types/glob": "^7.1.1",
- "array-union": "^1.0.2",
- "dir-glob": "^2.2.2",
- "fast-glob": "^2.2.6",
- "glob": "^7.1.3",
- "ignore": "^4.0.3",
- "pify": "^4.0.1",
- "slash": "^2.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cpy/node_modules/ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/cpy/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/cpy/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/cpy/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "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/cpy/node_modules/path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "dependencies": {
- "pify": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cpy/node_modules/path-type/node_modules/pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cpy/node_modules/slash": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cpy/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/create-ecdh": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
- "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
- "dev": true,
- "dependencies": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.5.3"
- }
- },
- "node_modules/create-ecdh/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
- "node_modules/create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "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.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -11316,208 +7433,15 @@
"node": ">= 8"
}
},
- "node_modules/crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dev": true,
- "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-loader": {
- "version": "5.2.7",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz",
- "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==",
- "dev": true,
- "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/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/css-loader/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/css-loader/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/css-loader/node_modules/postcss": {
- "version": "8.4.21",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
- "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.4",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/css-loader/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/css-loader/node_modules/postcss-modules-local-by-default": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz",
- "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==",
- "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/css-loader/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/css-loader/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/css-loader/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "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/css-loader/node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "node_modules/crypto-random-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
+ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
"engines": {
- "node": ">=10"
+ "node": ">=8"
}
},
- "node_modules/css-loader/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/css-select": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
@@ -11558,18 +7482,11 @@
"node": ">=4"
}
},
- "node_modules/currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "array-find-index": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
+ "node_modules/csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "dev": true
},
"node_modules/custom-elements-manifest": {
"version": "1.0.0",
@@ -11577,12 +7494,6 @@
"integrity": "sha512-j59k0ExGCKA8T6Mzaq+7axc+KVHwpEphEERU7VZ99260npu/p/9kd+Db+I3cGKxHkM5y6q5gnlXn00mzRQkX2A==",
"dev": true
},
- "node_modules/cyclist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
- "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==",
- "dev": true
- },
"node_modules/debounce": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
@@ -11606,50 +7517,55 @@
}
}
},
- "node_modules/decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
+ "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,
- "optional": true,
"engines": {
"node": ">=0.10.0"
}
},
- "node_modules/decode-uri-component": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
- "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
+ "node_modules/default-browser-id": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz",
+ "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
"dev": true,
+ "dependencies": {
+ "bplist-parser": "^0.2.0",
+ "untildify": "^4.0.0"
+ },
"engines": {
- "node": ">=0.10"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "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,
- "engines": {
- "node": ">=0.10.0"
+ "dependencies": {
+ "clone": "^1.0.2"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/default-browser-id": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-1.0.4.tgz",
- "integrity": "sha512-qPy925qewwul9Hifs+3sx1ZYn14obHxpkX+mPD369w4Rzg+YkJBgi3SOvwUq81nWSjqGUegIgEPwD8u+HUnxlw==",
+ "node_modules/define-data-property": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
+ "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
"dev": true,
- "optional": true,
"dependencies": {
- "bplist-parser": "^0.1.0",
- "meow": "^3.1.0",
- "untildify": "^2.0.0"
- },
- "bin": {
- "default-browser-id": "cli.js"
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/define-lazy-prop": {
@@ -11662,11 +7578,12 @@
}
},
"node_modules/define-properties": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
- "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
"dev": true,
"dependencies": {
+ "define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
},
@@ -11677,17 +7594,67 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "node_modules/defu": {
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.3.tgz",
+ "integrity": "sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==",
+ "dev": true
+ },
+ "node_modules/del": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
+ "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
"dev": true,
"dependencies": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
+ "globby": "^11.0.1",
+ "graceful-fs": "^4.2.4",
+ "is-glob": "^4.0.1",
+ "is-path-cwd": "^2.2.0",
+ "is-path-inside": "^3.0.2",
+ "p-map": "^4.0.0",
+ "rimraf": "^3.0.2",
+ "slash": "^3.0.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/del/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/del/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/delayed-stream": {
@@ -11699,12 +7666,6 @@
"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",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -11714,14 +7675,13 @@
"node": ">= 0.8"
}
},
- "node_modules/des.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
- "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
+ "node_modules/dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
"dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/destroy": {
@@ -11734,19 +7694,21 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
- "node_modules/detab": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz",
- "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==",
+ "node_modules/detect-indent": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
+ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
"dev": true,
- "dependencies": {
- "repeat-string": "^1.5.4"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "engines": {
+ "node": ">=8"
}
},
+ "node_modules/detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
+ "dev": true
+ },
"node_modules/detect-package-manager": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/detect-package-manager/-/detect-package-manager-2.0.1.tgz",
@@ -11773,23 +7735,6 @@
"detect-port": "bin/detect-port.js"
}
},
- "node_modules/diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
"node_modules/dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -11837,22 +7782,6 @@
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
}
},
- "node_modules/dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
- "dev": true
- },
- "node_modules/domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true,
- "engines": {
- "node": ">=0.4",
- "npm": ">=1.2"
- }
- },
"node_modules/domelementtype": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
@@ -11905,19 +7834,25 @@
}
},
"node_modules/dotenv": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
- "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
+ "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/motdotla/dotenv?sponsor=1"
}
},
"node_modules/dotenv-expand": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
- "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
- "dev": true
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz",
+ "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/duplexify": {
"version": "3.7.1",
@@ -11931,16 +7866,10 @@
"stream-shift": "^1.0.0"
}
},
- "node_modules/duplexify/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/duplexify/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "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",
@@ -11952,6 +7881,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "node_modules/duplexify/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"node_modules/duplexify/node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -11961,52 +7896,43 @@
"safe-buffer": "~5.1.0"
}
},
+ "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.284",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
- "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
- "dev": true
- },
- "node_modules/element-resize-detector": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz",
- "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==",
- "dev": true,
- "dependencies": {
- "batch-processor": "1.0.0"
- }
- },
- "node_modules/elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
+ "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": {
- "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"
+ "jake": "^10.8.5"
+ },
+ "bin": {
+ "ejs": "bin/cli.js"
+ },
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "node_modules/elliptic/node_modules/bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.613",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz",
+ "integrity": "sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==",
"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==",
+ "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/emojis-list": {
@@ -12049,15 +7975,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/enhanced-resolve/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/entities": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
@@ -12067,16 +7984,16 @@
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
- "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==",
+ "node_modules/envinfo": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz",
+ "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==",
"dev": true,
- "dependencies": {
- "prr": "~1.0.1"
- },
"bin": {
- "errno": "cli.js"
+ "envinfo": "dist/cli.js"
+ },
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/error-ex": {
@@ -12088,138 +8005,67 @@
"is-arrayish": "^0.2.1"
}
},
- "node_modules/es-abstract": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.0.tgz",
- "integrity": "sha512-GUGtW7eXQay0c+PRq0sGIKSdaBorfVqsCMhGHo4elP7YVqZu9nCZS4UkK4gv71gOWNMra/PaSKD3ao1oWExO0g==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "es-set-tostringtag": "^2.0.0",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.1.3",
- "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.4",
- "is-array-buffer": "^3.0.0",
- "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.2",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.4.3",
- "safe-regex-test": "^1.0.0",
- "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",
- "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
- "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
- "dev": true
- },
- "node_modules/es-get-iterator": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz",
- "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.0",
- "has-symbols": "^1.0.1",
- "is-arguments": "^1.1.0",
- "is-map": "^2.0.2",
- "is-set": "^2.0.2",
- "is-string": "^1.0.5",
- "isarray": "^2.0.5"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/es-module-lexer": {
"version": "0.9.3",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
"integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
"dev": true
},
- "node_modules/es-set-tostringtag": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
- "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
+ "node_modules/esbuild": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
+ "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
"dev": true,
- "dependencies": {
- "get-intrinsic": "^1.1.3",
- "has": "^1.0.3",
- "has-tostringtag": "^1.0.0"
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
},
"engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
- "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
- "dev": true,
- "dependencies": {
- "has": "^1.0.3"
- }
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.18.20",
+ "@esbuild/android-arm64": "0.18.20",
+ "@esbuild/android-x64": "0.18.20",
+ "@esbuild/darwin-arm64": "0.18.20",
+ "@esbuild/darwin-x64": "0.18.20",
+ "@esbuild/freebsd-arm64": "0.18.20",
+ "@esbuild/freebsd-x64": "0.18.20",
+ "@esbuild/linux-arm": "0.18.20",
+ "@esbuild/linux-arm64": "0.18.20",
+ "@esbuild/linux-ia32": "0.18.20",
+ "@esbuild/linux-loong64": "0.18.20",
+ "@esbuild/linux-mips64el": "0.18.20",
+ "@esbuild/linux-ppc64": "0.18.20",
+ "@esbuild/linux-riscv64": "0.18.20",
+ "@esbuild/linux-s390x": "0.18.20",
+ "@esbuild/linux-x64": "0.18.20",
+ "@esbuild/netbsd-x64": "0.18.20",
+ "@esbuild/openbsd-x64": "0.18.20",
+ "@esbuild/sunos-x64": "0.18.20",
+ "@esbuild/win32-arm64": "0.18.20",
+ "@esbuild/win32-ia32": "0.18.20",
+ "@esbuild/win32-x64": "0.18.20"
+ }
+ },
+ "node_modules/esbuild-plugin-alias": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz",
+ "integrity": "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==",
+ "dev": true
},
- "node_modules/es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "node_modules/esbuild-register": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz",
+ "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==",
"dev": true,
"dependencies": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
+ "debug": "^4.3.4"
},
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es5-shim": {
- "version": "4.6.7",
- "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.7.tgz",
- "integrity": "sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4.0"
+ "peerDependencies": {
+ "esbuild": ">=0.12 <1"
}
},
- "node_modules/es6-shim": {
- "version": "0.35.7",
- "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.7.tgz",
- "integrity": "sha512-baZkUfTDSx7X69+NA8imbvGrsPfqH0MX7ADdIDjqwsI8lkTgLIiD2QWrUCSGsUQ0YMnSCA/4pNgSyXdnLHWf3A==",
- "dev": true
- },
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -12327,22 +8173,6 @@
"node": ">=0.8.x"
}
},
- "node_modules/evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "dependencies": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/exec-sh": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz",
- "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==",
- "dev": true
- },
"node_modules/execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -12366,147 +8196,10 @@
"url": "https://github.com/sindresorhus/execa?sponsor=1"
}
},
- "node_modules/expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
- "dev": true,
- "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/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/expand-brackets/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/expand-brackets/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/expand-brackets/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "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/express": {
@@ -12566,96 +8259,41 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
- "node_modules/express/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/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/extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
- "dev": true,
- "dependencies": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
+ "node_modules/extract-zip": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
+ "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
"dev": true,
"dependencies": {
- "is-descriptor": "^1.0.0"
+ "concat-stream": "^1.6.2",
+ "debug": "^2.6.9",
+ "mkdirp": "^0.5.4",
+ "yauzl": "^2.10.0"
},
- "engines": {
- "node": ">=0.10.0"
+ "bin": {
+ "extract-zip": "cli.js"
}
},
- "node_modules/extglob/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "node_modules/extract-zip/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": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "ms": "2.0.0"
}
},
- "node_modules/extglob/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
+ "node_modules/extract-zip/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/fast-deep-equal": {
"version": "3.1.3",
@@ -12703,87 +8341,75 @@
"bser": "2.1.1"
}
},
+ "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/fetch-retry": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.3.tgz",
- "integrity": "sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw==",
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz",
+ "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==",
"dev": true
},
- "node_modules/figgy-pudding": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
- "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
- "dev": true
+ "node_modules/file-system-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz",
+ "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==",
+ "dev": true,
+ "dependencies": {
+ "fs-extra": "11.1.1",
+ "ramda": "0.29.0"
+ }
},
- "node_modules/file-loader": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
- "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
+ "node_modules/file-system-cache/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": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0"
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
},
"engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
+ "node": ">=14.14"
}
},
- "node_modules/file-loader/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
+ "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": {
- "@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"
+ "minimatch": "^5.0.1"
}
},
- "node_modules/file-system-cache": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.1.0.tgz",
- "integrity": "sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw==",
+ "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": {
- "fs-extra": "^10.1.0",
- "ramda": "^0.28.0"
+ "balanced-match": "^1.0.0"
}
},
- "node_modules/file-system-cache/node_modules/fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "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": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "brace-expansion": "^2.0.1"
},
"engines": {
- "node": ">=12"
+ "node": ">=10"
}
},
- "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==",
- "dev": true,
- "optional": true
- },
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -12830,42 +8456,45 @@
"dev": true
},
"node_modules/find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "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": "^2.0.0",
- "pkg-dir": "^3.0.0"
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/avajs/find-cache-dir?sponsor=1"
}
},
"node_modules/find-cache-dir/node_modules/find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "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": "^3.0.0"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
"node_modules/find-cache-dir/node_modules/locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"dependencies": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
+ "p-locate": "^4.1.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
"node_modules/find-cache-dir/node_modules/p-limit": {
@@ -12884,36 +8513,27 @@
}
},
"node_modules/find-cache-dir/node_modules/p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "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.0.0"
+ "p-limit": "^2.2.0"
},
"engines": {
- "node": ">=6"
- }
- },
- "node_modules/find-cache-dir/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
+ "node": ">=8"
}
},
"node_modules/find-cache-dir/node_modules/pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "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": "^3.0.0"
+ "find-up": "^4.0.0"
},
"engines": {
- "node": ">=6"
+ "node": ">=8"
}
},
"node_modules/find-replace": {
@@ -12953,44 +8573,13 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/flush-write-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
- "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.3.6"
- }
- },
- "node_modules/flush-write-stream/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/flush-write-stream/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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/flush-write-stream/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "node_modules/flow-parser": {
+ "version": "0.224.0",
+ "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.224.0.tgz",
+ "integrity": "sha512-S1P78o0VLB1FZvkoGSIpaRiiTUQ3xDhm9I4Z1qc3lglmkjehfR2sjM0vhwKS7UC1G12VT4Leb/GGV/KlactqjA==",
"dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
+ "engines": {
+ "node": ">=0.4.0"
}
},
"node_modules/for-each": {
@@ -13002,52 +8591,48 @@
"is-callable": "^1.1.3"
}
},
- "node_modules/for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
+ "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": ">=0.10.0"
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/fork-ts-checker-webpack-plugin": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz",
- "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz",
+ "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.8.3",
- "@types/json-schema": "^7.0.5",
- "chalk": "^4.1.0",
- "chokidar": "^3.4.2",
- "cosmiconfig": "^6.0.0",
+ "@babel/code-frame": "^7.16.7",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.5.3",
+ "cosmiconfig": "^7.0.1",
"deepmerge": "^4.2.2",
- "fs-extra": "^9.0.0",
- "glob": "^7.1.6",
- "memfs": "^3.1.2",
+ "fs-extra": "^10.0.0",
+ "memfs": "^3.4.1",
"minimatch": "^3.0.4",
- "schema-utils": "2.7.0",
- "semver": "^7.3.2",
- "tapable": "^1.0.0"
+ "node-abort-controller": "^3.0.1",
+ "schema-utils": "^3.1.1",
+ "semver": "^7.3.5",
+ "tapable": "^2.2.1"
},
"engines": {
- "node": ">=10",
+ "node": ">=12.13.0",
"yarn": ">=1.0.0"
},
"peerDependencies": {
- "eslint": ">= 6",
- "typescript": ">= 2.7",
- "vue-template-compiler": "*",
- "webpack": ">= 4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- },
- "vue-template-compiler": {
- "optional": true
- }
+ "typescript": ">3.6.0",
+ "webpack": "^5.11.0"
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/ansi-styles": {
@@ -13099,20 +8684,18 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+ "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dev": true,
"dependencies": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=12"
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/has-flag": {
@@ -13137,17 +8720,17 @@
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
- "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+ "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.4",
- "ajv": "^6.12.2",
- "ajv-keywords": "^3.4.1"
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
},
"engines": {
- "node": ">= 8.9.0"
+ "node": ">= 10.13.0"
},
"funding": {
"type": "opencollective",
@@ -13155,9 +8738,9 @@
}
},
"node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"dependencies": {
"lru-cache": "^6.0.0"
@@ -13188,9 +8771,9 @@
"dev": true
},
"node_modules/form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+ "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",
@@ -13210,18 +8793,6 @@
"node": ">= 0.6"
}
},
- "node_modules/fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
- "dev": true,
- "dependencies": {
- "map-cache": "^0.2.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -13231,59 +8802,24 @@
"node": ">= 0.6"
}
},
- "node_modules/from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- }
- },
- "node_modules/from2/node_modules/isarray": {
+ "node_modules/fs-constants": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "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/from2/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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/from2/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
"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==",
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
"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": ">=14.14"
}
},
"node_modules/fs-minipass": {
@@ -13298,53 +8834,29 @@
"node": ">= 8"
}
},
- "node_modules/fs-monkey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
- "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
- "dev": true
- },
- "node_modules/fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==",
+ "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": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/fs-write-stream-atomic/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "node_modules/fs-minipass/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/fs-write-stream-atomic/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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/fs-write-stream-atomic/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
+ "node_modules/fs-monkey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
+ "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
+ "dev": true
},
"node_modules/fs.realpath": {
"version": "1.0.0",
@@ -13367,58 +8879,14 @@
}
},
"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/function.prototype.name": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
- "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz",
- "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/gauge": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
- "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
- "dev": true,
- "dependencies": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.2",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.1",
- "object-assign": "^4.1.1",
- "signal-exit": "^3.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -13429,19 +8897,38 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
- "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+ "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
"dev": true,
"dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.3"
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/get-npm-tarball-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz",
+ "integrity": "sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==",
+ "dev": true,
+ "engines": {
+ "node": ">=12.17"
+ }
+ },
"node_modules/get-package-type": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -13451,14 +8938,16 @@
"node": ">=8.0.0"
}
},
- "node_modules/get-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==",
+ "node_modules/get-port": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz",
+ "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==",
"dev": true,
- "optional": true,
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/get-stream": {
@@ -13473,29 +8962,22 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "node_modules/giget": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.3.tgz",
+ "integrity": "sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
+ "colorette": "^2.0.20",
+ "defu": "^6.1.2",
+ "https-proxy-agent": "^7.0.2",
+ "mri": "^1.2.0",
+ "node-fetch-native": "^1.4.0",
+ "pathe": "^1.1.1",
+ "tar": "^6.2.0"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "bin": {
+ "giget": "dist/cli.mjs"
}
},
"node_modules/github-slugger": {
@@ -13505,20 +8987,22 @@
"dev": true
},
"node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "version": "10.3.10",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
"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"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.5",
+ "minimatch": "^9.0.1",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+ "path-scurry": "^1.10.1"
+ },
+ "bin": {
+ "glob": "dist/esm/bin.mjs"
},
"engines": {
- "node": "*"
+ "node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
@@ -13536,35 +9020,34 @@
"node": ">= 6"
}
},
- "node_modules/glob-promise": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz",
- "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==",
- "dev": true,
- "dependencies": {
- "@types/glob": "*"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "glob": "*"
- }
- },
"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/global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
+ "node_modules/glob/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": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/glob/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/globals": {
@@ -13576,21 +9059,6 @@
"node": ">=4"
}
},
- "node_modules/globalthis": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
- "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
- "dev": true,
- "dependencies": {
- "define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/globby": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
@@ -13629,14 +9097,31 @@
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
"dev": true
},
+ "node_modules/gunzip-maybe": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz",
+ "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==",
+ "dev": true,
+ "dependencies": {
+ "browserify-zlib": "^0.1.4",
+ "is-deflate": "^1.0.0",
+ "is-gzip": "^1.0.0",
+ "peek-stream": "^1.1.0",
+ "pumpify": "^1.3.3",
+ "through2": "^2.0.3"
+ },
+ "bin": {
+ "gunzip-maybe": "bin.js"
+ }
+ },
"node_modules/handlebars": {
- "version": "4.7.7",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
- "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "version": "4.7.8",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
"dev": true,
"dependencies": {
"minimist": "^1.2.5",
- "neo-async": "^2.6.0",
+ "neo-async": "^2.6.2",
"source-map": "^0.6.1",
"wordwrap": "^1.0.0"
},
@@ -13662,15 +9147,6 @@
"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",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -13680,37 +9156,13 @@
"node": ">=4"
}
},
- "node_modules/has-glob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz",
- "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==",
- "dev": true,
- "dependencies": {
- "is-glob": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-glob/node_modules/is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"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==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+ "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
"dev": true,
"dependencies": {
- "get-intrinsic": "^1.1.1"
+ "get-intrinsic": "^1.2.2"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -13755,226 +9207,16 @@
"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/has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/has-values/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-values/node_modules/kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
+ "node_modules/hasown": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
"dev": true,
"dependencies": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
+ "function-bind": "^1.1.2"
},
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/hash-base/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/hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "node_modules/hast-to-hyperscript": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz",
- "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.3",
- "comma-separated-tokens": "^1.0.0",
- "property-information": "^5.3.0",
- "space-separated-tokens": "^1.0.0",
- "style-to-object": "^0.3.0",
- "unist-util-is": "^4.0.0",
- "web-namespaces": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-from-parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz",
- "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==",
- "dev": true,
- "dependencies": {
- "@types/parse5": "^5.0.0",
- "hastscript": "^6.0.0",
- "property-information": "^5.0.0",
- "vfile": "^4.0.0",
- "vfile-location": "^3.2.0",
- "web-namespaces": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-parse-selector": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
- "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-raw": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz",
- "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==",
- "dev": true,
- "dependencies": {
- "@types/hast": "^2.0.0",
- "hast-util-from-parse5": "^6.0.0",
- "hast-util-to-parse5": "^6.0.0",
- "html-void-elements": "^1.0.0",
- "parse5": "^6.0.0",
- "unist-util-position": "^3.0.0",
- "vfile": "^4.0.0",
- "web-namespaces": "^1.0.0",
- "xtend": "^4.0.0",
- "zwitch": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hast-util-to-parse5": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz",
- "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==",
- "dev": true,
- "dependencies": {
- "hast-to-hyperscript": "^9.0.0",
- "property-information": "^5.0.0",
- "web-namespaces": "^1.0.0",
- "xtend": "^4.0.0",
- "zwitch": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/hastscript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
- "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
- "dev": true,
- "dependencies": {
- "@types/hast": "^2.0.0",
- "comma-separated-tokens": "^1.0.0",
- "hast-util-parse-selector": "^2.0.0",
- "property-information": "^5.0.0",
- "space-separated-tokens": "^1.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "node": ">= 0.4"
}
},
"node_modules/he": {
@@ -13986,17 +9228,6 @@
"he": "bin/he"
}
},
- "node_modules/hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
- "dev": true,
- "dependencies": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
"node_modules/hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
@@ -14039,16 +9270,6 @@
"node": ">= 12"
}
},
- "node_modules/html-void-elements": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz",
- "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/html-webpack-plugin": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz",
@@ -14072,15 +9293,6 @@
"webpack": "^5.20.0"
}
},
- "node_modules/html-webpack-plugin/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/htmlparser2": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz",
@@ -14116,11 +9328,18 @@
"node": ">= 0.8"
}
},
- "node_modules/https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
- "dev": true
+ "node_modules/https-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "^7.0.2",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 14"
+ }
},
"node_modules/human-signals": {
"version": "2.1.0",
@@ -14144,15 +9363,15 @@
}
},
"node_modules/icss-utils": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
- "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
+ "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
"dev": true,
- "dependencies": {
- "postcss": "^7.0.14"
- },
"engines": {
- "node": ">= 6"
+ "node": "^10 || ^12 || >= 14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
}
},
"node_modules/ieee754": {
@@ -14175,12 +9394,6 @@
}
]
},
- "node_modules/iferr": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
- "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==",
- "dev": true
- },
"node_modules/ignore": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -14233,12 +9446,6 @@
"node": ">=8"
}
},
- "node_modules/infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "dev": true
- },
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -14255,35 +9462,6 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
- "node_modules/inline-style-parser": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
- "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==",
- "dev": true
- },
- "node_modules/internal-slot": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
- "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
- "dev": true,
- "dependencies": {
- "get-intrinsic": "^1.1.3",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/interpret": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
- "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
- "dev": true,
- "engines": {
- "node": ">= 0.10"
- }
- },
"node_modules/invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -14317,42 +9495,6 @@
"node": ">=8"
}
},
- "node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-alphabetical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
- "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-alphanumerical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
- "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
- "dev": true,
- "dependencies": {
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/is-arguments": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
@@ -14369,38 +9511,12 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-array-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz",
- "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
- "is-typed-array": "^1.1.10"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
"dev": true
},
- "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",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -14413,45 +9529,6 @@
"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-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "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"
- }
- ],
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/is-callable": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz",
@@ -14464,18 +9541,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-ci": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dev": true,
- "dependencies": {
- "ci-info": "^2.0.0"
- },
- "bin": {
- "is-ci": "bin.js"
- }
- },
"node_modules/is-core-module": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
@@ -14488,56 +9553,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-data-descriptor": {
+ "node_modules/is-deflate": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/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-decimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
- "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
+ "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz",
+ "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==",
+ "dev": true
},
"node_modules/is-docker": {
"version": "2.2.1",
@@ -14554,28 +9574,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/is-dom": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz",
- "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==",
- "dev": true,
- "dependencies": {
- "is-object": "^1.0.1",
- "is-window": "^1.0.2"
- }
- },
- "node_modules/is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "dependencies": {
- "is-plain-object": "^2.0.4"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/is-extglob": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
@@ -14585,19 +9583,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-finite": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
- "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"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",
@@ -14607,11 +9592,20 @@
"node": ">=8"
}
},
- "node_modules/is-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
- "dev": true
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dev": true,
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/is-glob": {
"version": "4.0.3",
@@ -14625,30 +9619,33 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-hexadecimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
- "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
+ "node_modules/is-gzip": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
+ "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==",
"dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "engines": {
+ "node": ">=0.10.0"
}
},
- "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==",
+ "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,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": ">=8"
}
},
- "node_modules/is-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
+ "node_modules/is-nan": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
+ "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
"dev": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -14665,34 +9662,19 @@
"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==",
+ "node_modules/is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
"dev": true,
- "dependencies": {
- "has-tostringtag": "^1.0.0"
- },
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-object": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz",
- "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "node": ">=6"
}
},
- "node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "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"
@@ -14710,43 +9692,6 @@
"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",
@@ -14759,47 +9704,13 @@
"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==",
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
+ "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
"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"
+ "which-typed-array": "^1.1.11"
},
"engines": {
"node": ">= 0.4"
@@ -14808,64 +9719,16 @@
"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-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
- "dev": true,
- "optional": true
- },
- "node_modules/is-weakref": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
- "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-whitespace-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz",
- "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/is-window": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz",
- "integrity": "sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg==",
- "dev": true
- },
- "node_modules/is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "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": ">=0.10.0"
- }
- },
- "node_modules/is-word-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz",
- "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==",
- "dev": true,
+ "node": ">=10"
+ },
"funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-wsl": {
@@ -14881,9 +9744,9 @@
}
},
"node_modules/isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "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": {
@@ -14901,20 +9764,10 @@
"node": ">=0.10.0"
}
},
- "node_modules/isomorphic-unfetch": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz",
- "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==",
- "dev": true,
- "dependencies": {
- "node-fetch": "^2.6.1",
- "unfetch": "^4.2.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==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true,
"engines": {
"node": ">=8"
@@ -14936,92 +9789,161 @@
"node": ">=8"
}
},
- "node_modules/iterate-iterator": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz",
- "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==",
+ "node_modules/jackspeak": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
+ "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
"dev": true,
+ "dependencies": {
+ "@isaacs/cliui": "^8.0.2"
+ },
+ "engines": {
+ "node": ">=14"
+ },
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/sponsors/isaacs"
+ },
+ "optionalDependencies": {
+ "@pkgjs/parseargs": "^0.11.0"
}
},
- "node_modules/iterate-value": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz",
- "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==",
+ "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": {
- "es-get-iterator": "^1.0.2",
- "iterate-iterator": "^1.0.1"
+ "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/sponsors/ljharb"
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/jest-haste-map": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz",
- "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==",
+ "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": {
- "@jest/types": "^26.6.2",
- "@types/graceful-fs": "^4.1.2",
- "@types/node": "*",
- "anymatch": "^3.0.3",
- "fb-watchman": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-regex-util": "^26.0.0",
- "jest-serializer": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "micromatch": "^4.0.2",
- "sane": "^4.0.3",
- "walker": "^1.0.7"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">= 10.14.2"
+ "node": ">=10"
},
- "optionalDependencies": {
- "fsevents": "^2.1.2"
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/jest-regex-util": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
- "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
+ "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": ">= 10.14.2"
+ "node": ">=8"
}
},
- "node_modules/jest-serializer": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz",
- "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==",
+ "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/jest-haste-map": {
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/types": "^29.6.3",
+ "@types/graceful-fs": "^4.1.3",
"@types/node": "*",
- "graceful-fs": "^4.2.4"
+ "anymatch": "^3.0.3",
+ "fb-watchman": "^2.0.0",
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
},
"engines": {
- "node": ">= 10.14.2"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "^2.3.2"
+ }
+ },
+ "node_modules/jest-regex-util": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
+ "dev": true,
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-util": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
- "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"dependencies": {
- "@jest/types": "^26.6.2",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^2.0.0",
- "micromatch": "^4.0.2"
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
},
"engines": {
- "node": ">= 10.14.2"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-util/node_modules/ansi-styles": {
@@ -15095,17 +10017,18 @@
}
},
"node_modules/jest-worker": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
- "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"dependencies": {
"@types/node": "*",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
+ "supports-color": "^8.0.0"
},
"engines": {
- "node": ">= 10.13.0"
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-worker/node_modules/has-flag": {
@@ -15118,24 +10041,18 @@
}
},
"node_modules/jest-worker/node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "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": ">=8"
- }
- },
- "node_modules/js-string-escape": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
- "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/js-tokens": {
@@ -15157,6 +10074,132 @@
"js-yaml": "bin/js-yaml.js"
}
},
+ "node_modules/jscodeshift": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.1.tgz",
+ "integrity": "sha512-hIJfxUy8Rt4HkJn/zZPU9ChKfKZM1342waJ1QC2e2YsPcWhM+3BJ4dcfQCzArTrk1jJeNLB341H+qOcEHRxJZg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/core": "^7.23.0",
+ "@babel/parser": "^7.23.0",
+ "@babel/plugin-transform-class-properties": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.23.0",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11",
+ "@babel/plugin-transform-optional-chaining": "^7.23.0",
+ "@babel/plugin-transform-private-methods": "^7.22.5",
+ "@babel/preset-flow": "^7.22.15",
+ "@babel/preset-typescript": "^7.23.0",
+ "@babel/register": "^7.22.15",
+ "babel-core": "^7.0.0-bridge.0",
+ "chalk": "^4.1.2",
+ "flow-parser": "0.*",
+ "graceful-fs": "^4.2.4",
+ "micromatch": "^4.0.4",
+ "neo-async": "^2.5.0",
+ "node-dir": "^0.1.17",
+ "recast": "^0.23.3",
+ "temp": "^0.8.4",
+ "write-file-atomic": "^2.3.0"
+ },
+ "bin": {
+ "jscodeshift": "bin/jscodeshift.js"
+ },
+ "peerDependencies": {
+ "@babel/preset-env": "^7.1.6"
+ },
+ "peerDependenciesMeta": {
+ "@babel/preset-env": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/jscodeshift/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/jscodeshift/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/jscodeshift/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/jscodeshift/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/jscodeshift/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/jscodeshift/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/jscodeshift/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/jscodeshift/node_modules/write-file-atomic": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
+ "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
"node_modules/jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
@@ -15169,12 +10212,6 @@
"node": ">=4"
}
},
- "node_modules/json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
"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",
@@ -15211,15 +10248,6 @@
"graceful-fs": "^4.1.6"
}
},
- "node_modules/junk": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
- "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -15238,31 +10266,27 @@
"node": ">=6"
}
},
- "node_modules/klona": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz",
- "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
"node_modules/lazy-universal-dotenv": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz",
- "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz",
+ "integrity": "sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==",
"dev": true,
"dependencies": {
- "@babel/runtime": "^7.5.0",
"app-root-dir": "^1.0.2",
- "core-js": "^3.0.4",
- "dotenv": "^8.0.0",
- "dotenv-expand": "^5.1.0"
+ "dotenv": "^16.0.0",
+ "dotenv-expand": "^10.0.0"
},
"engines": {
- "node": ">=6.0.0",
- "npm": ">=6.0.0",
- "yarn": ">=1.0.0"
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
}
},
"node_modules/lines-and-columns": {
@@ -15271,54 +10295,38 @@
"integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
"dev": true
},
- "node_modules/lit-html": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.6.0.tgz",
- "integrity": "sha512-slNAAYfvC7LxeryDOnPFl5uTpxGYGJ6UR9SFmfY+gQ+sf30z1atDPXlgjcSTtwymNdlwDhfGjq+EemQRXp9z1g==",
+ "node_modules/lit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.0.tgz",
+ "integrity": "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==",
"dev": true,
"peer": true,
"dependencies": {
- "@types/trusted-types": "^2.0.2"
+ "@lit/reactive-element": "^2.0.0",
+ "lit-element": "^4.0.0",
+ "lit-html": "^3.1.0"
}
},
- "node_modules/load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
+ "node_modules/lit-element": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.2.tgz",
+ "integrity": "sha512-/W6WQZUa5VEXwC7H9tbtDMdSs9aWil3Ou8hU6z2cOKWbsm/tXPAcsoaHVEtrDo0zcOIE5GF6QgU55tlGL2Nihg==",
"dev": true,
- "optional": true,
+ "peer": true,
"dependencies": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "@lit-labs/ssr-dom-shim": "^1.1.2",
+ "@lit/reactive-element": "^2.0.0",
+ "lit-html": "^3.1.0"
}
},
- "node_modules/load-json-file/node_modules/parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
+ "node_modules/lit-html": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.0.tgz",
+ "integrity": "sha512-FwAjq3iNsaO6SOZXEIpeROlJLUlrbyMkn4iuv4f4u1H40Jw8wkeR/OUXZUHUoiYabGk8Y4Y0F/rgq+R4MrOLmA==",
"dev": true,
- "optional": true,
+ "peer": true,
"dependencies": {
- "error-ex": "^1.2.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/load-json-file/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,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
+ "@types/trusted-types": "^2.0.2"
}
},
"node_modules/loader-runner": {
@@ -15377,12 +10385,92 @@
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"dev": true
},
- "node_modules/lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
+ "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/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
@@ -15395,20 +10483,6 @@
"loose-envify": "cli.js"
}
},
- "node_modules/loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/lower-case": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
@@ -15427,26 +10501,31 @@
"yallist": "^3.0.2"
}
},
- "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==",
+ "node_modules/magic-string": {
+ "version": "0.30.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
+ "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
"dev": true,
"dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
+ "@jridgewell/sourcemap-codec": "^1.4.15"
},
"engines": {
- "node": ">=6"
+ "node": ">=12"
}
},
- "node_modules/make-dir/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "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,
- "bin": {
- "semver": "bin/semver"
+ "dependencies": {
+ "semver": "^6.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/makeerror": {
@@ -15458,87 +10537,22 @@
"tmpl": "1.0.5"
}
},
- "node_modules/map-age-cleaner": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
- "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
- "dev": true,
- "dependencies": {
- "p-defer": "^1.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/map-or-similar": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz",
"integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==",
"dev": true
},
- "node_modules/map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
+ "node_modules/markdown-to-jsx": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz",
+ "integrity": "sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==",
"dev": true,
- "dependencies": {
- "object-visit": "^1.0.0"
- },
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/markdown-escapes": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz",
- "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
- "dependencies": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "node_modules/mdast-squeeze-paragraphs": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz",
- "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==",
- "dev": true,
- "dependencies": {
- "unist-util-remove": "^2.0.0"
+ "node": ">= 10"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "peerDependencies": {
+ "react": ">= 0.14.0"
}
},
"node_modules/mdast-util-definitions": {
@@ -15554,26 +10568,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdast-util-to-hast": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz",
- "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==",
- "dev": true,
- "dependencies": {
- "@types/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
- "mdast-util-definitions": "^4.0.0",
- "mdurl": "^1.0.0",
- "unist-builder": "^2.0.0",
- "unist-util-generated": "^1.0.0",
- "unist-util-position": "^3.0.0",
- "unist-util-visit": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/mdast-util-to-string": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz",
@@ -15584,12 +10578,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
- "dev": true
- },
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -15599,31 +10587,6 @@
"node": ">= 0.6"
}
},
- "node_modules/mem": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
- "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==",
- "dev": true,
- "dependencies": {
- "map-age-cleaner": "^0.1.3",
- "mimic-fn": "^3.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/mem?sponsor=1"
- }
- },
- "node_modules/mem/node_modules/mimic-fn": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz",
- "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/memfs": {
"version": "3.4.13",
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz",
@@ -15645,149 +10608,6 @@
"map-or-similar": "^1.5.0"
}
},
- "node_modules/memory-fs": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
- "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==",
- "dev": true,
- "dependencies": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- },
- "node_modules/memory-fs/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/memory-fs/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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/memory-fs/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "camelcase-keys": "^2.0.0",
- "decamelize": "^1.1.2",
- "loud-rejection": "^1.0.0",
- "map-obj": "^1.0.1",
- "minimist": "^1.1.3",
- "normalize-package-data": "^2.3.4",
- "object-assign": "^4.0.1",
- "read-pkg-up": "^1.0.1",
- "redent": "^1.0.0",
- "trim-newlines": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/meow/node_modules/find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/meow/node_modules/path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "pinkie-promise": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/meow/node_modules/path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/meow/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,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/meow/node_modules/read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/meow/node_modules/read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -15818,12 +10638,6 @@
"node": ">= 0.6"
}
},
- "node_modules/microevent.ts": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz",
- "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==",
- "dev": true
- },
"node_modules/micromatch": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -15837,25 +10651,6 @@
"node": ">=8.6"
}
},
- "node_modules/miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- },
"node_modules/mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
@@ -15898,27 +10693,6 @@
"node": ">=6"
}
},
- "node_modules/min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
- "dev": true,
- "dependencies": {
- "dom-walk": "^0.1.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/minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
- "dev": true
- },
"node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -15932,68 +10706,23 @@
}
},
"node_modules/minimist": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
- "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+ "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": "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": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
- "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
"dev": true,
- "dependencies": {
- "minipass": "^3.0.0"
- },
"engines": {
- "node": ">= 8"
+ "node": ">=16 || 14 >=14.17"
}
},
- "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-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/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",
@@ -16007,79 +10736,25 @@
"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/mississippi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
- "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "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": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "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"
+ "yallist": "^4.0.0"
},
"engines": {
- "node": ">=10"
- }
- },
- "node_modules/move-concurrently": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
- "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==",
- "dev": true,
- "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": ">=8"
}
},
- "node_modules/move-concurrently/node_modules/aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
+ "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/move-concurrently/node_modules/mkdirp": {
+ "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==",
@@ -16091,16 +10766,19 @@
"mkdirp": "bin/cmd.js"
}
},
- "node_modules/move-concurrently/node_modules/rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
+ "node_modules/mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
+ "dev": true
+ },
+ "node_modules/mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
"dev": true,
- "dependencies": {
- "glob": "^7.1.3"
- },
- "bin": {
- "rimraf": "bin.js"
+ "engines": {
+ "node": ">=4"
}
},
"node_modules/ms": {
@@ -16109,18 +10787,17 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "node_modules/nan": {
- "version": "2.17.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
- "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
- "dev": true,
- "optional": true
- },
"node_modules/nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"bin": {
"nanoid": "bin/nanoid.cjs"
},
@@ -16128,28 +10805,6 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}
},
- "node_modules/nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "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/negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -16165,18 +10820,6 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
- "node_modules/nested-error-stacks": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz",
- "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==",
- "dev": true
- },
- "node_modules/nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
"node_modules/no-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
@@ -16187,6 +10830,24 @@
"tslib": "^2.0.3"
}
},
+ "node_modules/node-abort-controller": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
+ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
+ "dev": true
+ },
+ "node_modules/node-dir": {
+ "version": "0.1.17",
+ "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
+ "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==",
+ "dev": true,
+ "dependencies": {
+ "minimatch": "^3.0.2"
+ },
+ "engines": {
+ "node": ">= 0.10.5"
+ }
+ },
"node_modules/node-fetch": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
@@ -16207,89 +10868,22 @@
}
}
},
+ "node_modules/node-fetch-native": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.4.1.tgz",
+ "integrity": "sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==",
+ "dev": true
+ },
"node_modules/node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
"integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
"dev": true
},
- "node_modules/node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "dev": true,
- "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/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/node-libs-browser/node_modules/path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
- "dev": true
- },
- "node_modules/node-libs-browser/node_modules/punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
- "dev": true
- },
- "node_modules/node-libs-browser/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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/node-libs-browser/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
"node_modules/node-releases": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz",
- "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
"dev": true
},
"node_modules/normalize-package-data": {
@@ -16305,9 +10899,9 @@
}
},
"node_modules/normalize-package-data/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
"bin": {
"semver": "bin/semver"
@@ -16322,15 +10916,6 @@
"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-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -16343,18 +10928,6 @@
"node": ">=8"
}
},
- "node_modules/npmlog": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
- "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
- "dev": true,
- "dependencies": {
- "are-we-there-yet": "^2.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^3.0.0",
- "set-blocking": "^2.0.0"
- }
- },
"node_modules/nth-check": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -16367,117 +10940,27 @@
"url": "https://github.com/fb55/nth-check?sponsor=1"
}
},
- "node_modules/num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==",
- "dev": true
- },
- "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-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/object-copy/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+ "node_modules/object-inspect": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
"dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/object-copy/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "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": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-copy/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
+ "node": ">= 0.4"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
- "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
- "dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -16491,26 +10974,14 @@
"node": ">= 0.4"
}
},
- "node_modules/object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"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==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
"has-symbols": "^1.0.3",
"object-keys": "^1.1.1"
},
@@ -16521,84 +10992,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/object.entries": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
- "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.fromentries": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
- "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
- "dev": true,
- "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/object.getownpropertydescriptors": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz",
- "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
- "dev": true,
- "dependencies": {
- "isobject": "^3.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object.values": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
- "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
- "dev": true,
- "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/on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -16645,9 +11038,9 @@
}
},
"node_modules/open": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
- "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
+ "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",
@@ -16661,95 +11054,97 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
- "dev": true
- },
- "node_modules/os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/p-all": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz",
- "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==",
+ "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": {
- "p-map": "^2.0.0"
+ "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": ">=6"
- }
- },
- "node_modules/p-all/node_modules/p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
- "dev": true,
- "engines": {
- "node": ">=6"
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/p-defer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
- "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==",
+ "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": ">=4"
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/p-event": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
- "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
+ "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": {
- "p-timeout": "^3.1.0"
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
},
"engines": {
- "node": ">=8"
+ "node": ">=10"
},
"funding": {
- "url": "https://github.com/sponsors/sindresorhus"
+ "url": "https://github.com/chalk/chalk?sponsor=1"
}
},
- "node_modules/p-filter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz",
- "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==",
+ "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": {
- "p-map": "^2.0.0"
+ "color-name": "~1.1.4"
},
"engines": {
- "node": ">=8"
+ "node": ">=7.0.0"
}
},
- "node_modules/p-filter/node_modules/p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "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": ">=6"
+ "node": ">=8"
}
},
- "node_modules/p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
+ "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": ">=4"
+ "node": ">=8"
}
},
"node_modules/p-limit": {
@@ -16783,27 +11178,18 @@
}
},
"node_modules/p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "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": ">=8"
- }
- },
- "node_modules/p-timeout": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
- "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
- "dev": true,
- "dependencies": {
- "p-finally": "^1.0.0"
+ "node": ">=10"
},
- "engines": {
- "node": ">=8"
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/p-try": {
@@ -16816,52 +11202,11 @@
}
},
"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/parallel-transform": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
- "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
- "dev": true,
- "dependencies": {
- "cyclist": "^1.0.1",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- }
- },
- "node_modules/parallel-transform/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
"dev": true
},
- "node_modules/parallel-transform/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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/parallel-transform/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
"node_modules/param-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
@@ -16884,37 +11229,6 @@
"node": ">=6"
}
},
- "node_modules/parse-asn1": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
- "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
- "dev": true,
- "dependencies": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "node_modules/parse-entities": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
- "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
- "dev": true,
- "dependencies": {
- "character-entities": "^1.0.0",
- "character-entities-legacy": "^1.0.0",
- "character-reference-invalid": "^1.0.0",
- "is-alphanumerical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-hexadecimal": "^1.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -16933,12 +11247,6 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -16958,27 +11266,12 @@
"tslib": "^2.0.3"
}
},
- "node_modules/pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
"dev": true
},
- "node_modules/path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
- "dev": true
- },
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -17012,6 +11305,31 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "node_modules/path-scurry": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
+ "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^9.1.1 || ^10.0.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/path-scurry/node_modules/lru-cache": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
+ "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+ "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",
@@ -17027,26 +11345,33 @@
"node": ">=8"
}
},
- "node_modules/pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+ "node_modules/pathe": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz",
+ "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==",
+ "dev": true
+ },
+ "node_modules/peek-stream": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
+ "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==",
"dev": true,
"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"
+ "buffer-from": "^1.0.0",
+ "duplexify": "^3.5.0",
+ "through2": "^2.0.3"
}
},
+ "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/picocolors": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
- "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
+ "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": {
@@ -17070,33 +11395,10 @@
"node": ">=6"
}
},
- "node_modules/pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "pinkie": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/pirates": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
- "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
"dev": true,
"engines": {
"node": ">= 6"
@@ -17114,18 +11416,6 @@
"node": ">=10"
}
},
- "node_modules/pnp-webpack-plugin": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz",
- "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==",
- "dev": true,
- "dependencies": {
- "ts-pnp": "^1.1.6"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/polished": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz",
@@ -17138,164 +11428,91 @@
"node": ">=10"
}
},
- "node_modules/posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/postcss": {
- "version": "7.0.39",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
- "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
+ "version": "8.4.32",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
+ "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
"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": {
- "picocolors": "^0.2.1",
- "source-map": "^0.6.1"
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
},
"engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-flexbugs-fixes": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz",
- "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==",
- "dev": true,
- "dependencies": {
- "postcss": "^7.0.26"
+ "node": "^10 || ^12 || >=14"
}
},
- "node_modules/postcss-loader": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz",
- "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==",
+ "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,
- "dependencies": {
- "cosmiconfig": "^7.0.0",
- "klona": "^2.0.4",
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0",
- "semver": "^7.3.4"
- },
"engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
+ "node": "^10 || ^12 || >= 14"
},
"peerDependencies": {
- "postcss": "^7.0.0 || ^8.0.1",
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/postcss-loader/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/postcss-loader/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "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/postcss-loader/node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
- "dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/postcss-loader/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/postcss-modules-extract-imports": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
- "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
- "dev": true,
- "dependencies": {
- "postcss": "^7.0.5"
- },
- "engines": {
- "node": ">= 6"
+ "postcss": "^8.1.0"
}
},
"node_modules/postcss-modules-local-by-default": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz",
- "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==",
+ "version": "4.0.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": "^4.1.1",
- "postcss": "^7.0.32",
+ "icss-utils": "^5.0.0",
"postcss-selector-parser": "^6.0.2",
"postcss-value-parser": "^4.1.0"
},
"engines": {
- "node": ">= 6"
+ "node": "^10 || ^12 || >= 14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
}
},
"node_modules/postcss-modules-scope": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
- "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz",
+ "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==",
"dev": true,
"dependencies": {
- "postcss": "^7.0.6",
- "postcss-selector-parser": "^6.0.0"
+ "postcss-selector-parser": "^6.0.4"
},
"engines": {
- "node": ">= 6"
+ "node": "^10 || ^12 || >= 14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
}
},
"node_modules/postcss-modules-values": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
- "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
+ "version": "4.0.0",
+ "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": "^4.0.0",
- "postcss": "^7.0.6"
+ "icss-utils": "^5.0.0"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >= 14"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
}
},
"node_modules/postcss-selector-parser": {
@@ -17318,15 +11535,18 @@
"dev": true
},
"node_modules/prettier": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz",
- "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==",
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
},
"engines": {
"node": ">=10.13.0"
+ },
+ "funding": {
+ "url": "https://github.com/prettier/prettier?sponsor=1"
}
},
"node_modules/pretty-error": {
@@ -17363,47 +11583,13 @@
"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.allsettled": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.6.tgz",
- "integrity": "sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg==",
- "dev": true,
- "dependencies": {
- "array.prototype.map": "^1.0.5",
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "iterate-value": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/promise.prototype.finally": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.4.tgz",
- "integrity": "sha512-nNc3YbgMfLzqtqvO/q5DP6RR0SiHI9pUPGzyDf1q+usTwCN2kjvAnJkBb7bHe3o+fFSBPpsGMoYtaSi+LTNqng==",
+ "node_modules/progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true,
- "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": ">=0.4.0"
}
},
"node_modules/prompts": {
@@ -17419,30 +11605,6 @@
"node": ">= 6"
}
},
- "node_modules/prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "node_modules/property-information": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
- "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
- "dev": true,
- "dependencies": {
- "xtend": "^4.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -17456,30 +11618,10 @@
"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
- },
- "node_modules/public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
+ "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/pump": {
@@ -17522,6 +11664,70 @@
"node": ">=6"
}
},
+ "node_modules/puppeteer-core": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz",
+ "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==",
+ "dev": true,
+ "dependencies": {
+ "@types/mime-types": "^2.1.0",
+ "debug": "^4.1.0",
+ "extract-zip": "^1.6.6",
+ "https-proxy-agent": "^4.0.0",
+ "mime": "^2.0.3",
+ "mime-types": "^2.1.25",
+ "progress": "^2.0.1",
+ "proxy-from-env": "^1.0.0",
+ "rimraf": "^2.6.1",
+ "ws": "^6.1.0"
+ },
+ "engines": {
+ "node": ">=8.16.0"
+ }
+ },
+ "node_modules/puppeteer-core/node_modules/agent-base": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
+ "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==",
+ "dev": true,
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/puppeteer-core/node_modules/https-proxy-agent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
+ "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
+ "dev": true,
+ "dependencies": {
+ "agent-base": "5",
+ "debug": "4"
+ },
+ "engines": {
+ "node": ">= 6.0.0"
+ }
+ },
+ "node_modules/puppeteer-core/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/puppeteer-core/node_modules/ws": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+ "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+ "dev": true,
+ "dependencies": {
+ "async-limiter": "~1.0.0"
+ }
+ },
"node_modules/qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
@@ -17547,15 +11753,6 @@
"node": ">=0.4.x"
}
},
- "node_modules/querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
- "dev": true,
- "engines": {
- "node": ">=0.4.x"
- }
- },
"node_modules/queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -17577,9 +11774,9 @@
]
},
"node_modules/ramda": {
- "version": "0.28.0",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz",
- "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==",
+ "version": "0.29.0",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz",
+ "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==",
"dev": true,
"funding": {
"type": "opencollective",
@@ -17595,16 +11792,6 @@
"safe-buffer": "^5.1.0"
}
},
- "node_modules/randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "dev": true,
- "dependencies": {
- "randombytes": "^2.0.5",
- "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",
@@ -17638,50 +11825,11 @@
"node": ">= 0.8"
}
},
- "node_modules/raw-loader": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz",
- "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==",
- "dev": true,
- "dependencies": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/raw-loader/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "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/react": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
"integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
"dev": true,
- "peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
@@ -17689,12 +11837,21 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-colorful": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz",
+ "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==",
+ "dev": true,
+ "peerDependencies": {
+ "react": ">=16.8.0",
+ "react-dom": ">=16.8.0"
+ }
+ },
"node_modules/react-dom": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
"integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
"dev": true,
- "peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.0"
@@ -17703,22 +11860,74 @@
"react": "^18.2.0"
}
},
- "node_modules/react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
+ "node_modules/react-remove-scroll": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz",
+ "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==",
+ "dev": true,
+ "dependencies": {
+ "react-remove-scroll-bar": "^2.3.3",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.0",
+ "use-sidecar": "^1.1.2"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
},
- "node_modules/react-sizeme": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz",
- "integrity": "sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==",
+ "node_modules/react-remove-scroll-bar": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz",
+ "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==",
+ "dev": true,
+ "dependencies": {
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/react-style-singleton": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
+ "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
"dev": true,
"dependencies": {
- "element-resize-detector": "^1.2.2",
+ "get-nonce": "^1.0.0",
"invariant": "^2.2.4",
- "shallowequal": "^1.1.0",
- "throttle-debounce": "^3.0.1"
+ "tslib": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
"node_modules/read-pkg": {
@@ -17824,9 +12033,9 @@
}
},
"node_modules/readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "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",
@@ -17849,31 +12058,20 @@
"node": ">=8.10.0"
}
},
- "node_modules/redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==",
+ "node_modules/recast": {
+ "version": "0.23.4",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.4.tgz",
+ "integrity": "sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==",
"dev": true,
- "optional": true,
"dependencies": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/redent/node_modules/indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "repeating": "^2.0.0"
+ "assert": "^2.0.0",
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tslib": "^2.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 4"
}
},
"node_modules/regenerate": {
@@ -17883,9 +12081,9 @@
"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==",
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
+ "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
"dev": true,
"dependencies": {
"regenerate": "^1.4.2"
@@ -17901,53 +12099,23 @@
"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==",
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
+ "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
"dev": true,
"dependencies": {
"@babel/runtime": "^7.8.4"
}
},
- "node_modules/regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
- "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
- "dev": true,
- "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.2.2",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
- "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
+ "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",
- "regjsgen": "^0.7.1",
"regjsparser": "^0.9.1",
"unicode-match-property-ecmascript": "^2.0.0",
"unicode-match-property-value-ecmascript": "^2.1.0"
@@ -17956,12 +12124,6 @@
"node": ">=4"
}
},
- "node_modules/regjsgen": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
- "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
- "dev": true
- },
"node_modules/regjsparser": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
@@ -18009,145 +12171,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-footnotes": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz",
- "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-mdx": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz",
- "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==",
- "dev": true,
- "dependencies": {
- "@babel/core": "7.12.9",
- "@babel/helper-plugin-utils": "7.10.4",
- "@babel/plugin-proposal-object-rest-spread": "7.12.1",
- "@babel/plugin-syntax-jsx": "7.12.1",
- "@mdx-js/util": "1.6.22",
- "is-alphabetical": "1.0.4",
- "remark-parse": "8.0.3",
- "unified": "9.2.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remark-mdx/node_modules/@babel/core": {
- "version": "7.12.9",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz",
- "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.5",
- "@babel/parser": "^7.12.7",
- "@babel/template": "^7.12.7",
- "@babel/traverse": "^7.12.9",
- "@babel/types": "^7.12.7",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- },
- "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz",
- "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
- "@babel/plugin-transform-parameters": "^7.12.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
- "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/remark-mdx/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/remark-mdx/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/remark-parse": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz",
- "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==",
- "dev": true,
- "dependencies": {
- "ccount": "^1.0.0",
- "collapse-white-space": "^1.0.2",
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-whitespace-character": "^1.0.0",
- "is-word-character": "^1.0.0",
- "markdown-escapes": "^1.0.0",
- "parse-entities": "^2.0.0",
- "repeat-string": "^1.5.4",
- "state-toggle": "^1.0.0",
- "trim": "0.0.1",
- "trim-trailing-lines": "^1.0.0",
- "unherit": "^1.0.4",
- "unist-util-remove-position": "^2.0.0",
- "vfile-location": "^3.0.0",
- "xtend": "^4.0.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/remark-slug": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz",
@@ -18163,25 +12186,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/remark-squeeze-paragraphs": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz",
- "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==",
- "dev": true,
- "dependencies": {
- "mdast-squeeze-paragraphs": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
- "dev": true
- },
"node_modules/renderkid": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz",
@@ -18195,33 +12199,11 @@
"strip-ansi": "^6.0.1"
}
},
- "node_modules/repeat-element": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
- "dev": true,
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==",
+ "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,
- "optional": true,
- "dependencies": {
- "is-finite": "^1.0.0"
- },
"engines": {
"node": ">=0.10.0"
}
@@ -18252,22 +12234,25 @@
"node": ">=8"
}
},
- "node_modules/resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
- "deprecated": "https://github.com/lydell/resolve-url#deprecated",
- "dev": true
- },
- "node_modules/ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "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": ">=0.12"
+ "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/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -18279,37 +12264,35 @@
}
},
"node_modules/rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+ "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": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "node_modules/rsvp": {
- "version": "4.8.5",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
- "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
- "dev": true,
+ "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": "6.* || >= 7.*"
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/run-parallel": {
@@ -18335,49 +12318,25 @@
"queue-microtask": "^1.2.2"
}
},
- "node_modules/run-queue": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
- "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==",
- "dev": true,
- "dependencies": {
- "aproba": "^1.1.1"
- }
- },
- "node_modules/run-queue/node_modules/aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true
- },
"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/safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
- "dev": true,
- "dependencies": {
- "ret": "~0.1.10"
- }
- },
- "node_modules/safe-regex-test": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
- "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
+ "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,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
- "is-regex": "^1.1.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "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",
@@ -18385,312 +12344,11 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
- "node_modules/sane": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
- "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
- "deprecated": "some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added",
- "dev": true,
- "dependencies": {
- "@cnakazawa/watch": "^1.0.3",
- "anymatch": "^2.0.0",
- "capture-exit": "^2.0.0",
- "exec-sh": "^0.3.2",
- "execa": "^1.0.0",
- "fb-watchman": "^2.0.0",
- "micromatch": "^3.1.4",
- "minimist": "^1.1.1",
- "walker": "~1.0.5"
- },
- "bin": {
- "sane": "src/cli.js"
- },
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/sane/node_modules/anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "dependencies": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- }
- },
- "node_modules/sane/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "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/sane/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "dependencies": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "engines": {
- "node": ">=4.8"
- }
- },
- "node_modules/sane/node_modules/execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "dependencies": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/sane/node_modules/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "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/sane/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "dependencies": {
- "pump": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/sane/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/sane/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "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/sane/node_modules/normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
- "dev": true,
- "dependencies": {
- "remove-trailing-separator": "^1.0.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
- "dev": true,
- "dependencies": {
- "path-key": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/sane/node_modules/path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/sane/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/sane/node_modules/shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "dev": true,
- "dependencies": {
- "shebang-regex": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/sane/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/scheduler": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
"integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
"dev": true,
- "peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
}
@@ -18776,34 +12434,6 @@
"randombytes": "^2.1.0"
}
},
- "node_modules/serve-favicon": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz",
- "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==",
- "dev": true,
- "dependencies": {
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "ms": "2.1.1",
- "parseurl": "~1.3.2",
- "safe-buffer": "5.1.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/serve-favicon/node_modules/ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- },
- "node_modules/serve-favicon/node_modules/safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
- "dev": true
- },
"node_modules/serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
@@ -18819,73 +12449,27 @@
"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/set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "node_modules/set-function-length": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
+ "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
"dev": true,
"dependencies": {
- "is-extendable": "^0.1.0"
+ "define-data-property": "^1.1.1",
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/set-value/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
- "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/sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- },
- "bin": {
- "sha.js": "bin.js"
- }
- },
"node_modules/shallow-clone": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
@@ -18898,12 +12482,6 @@
"node": ">=8"
}
},
- "node_modules/shallowequal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
- "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==",
- "dev": true
- },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -18940,241 +12518,77 @@
}
},
"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/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "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/snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true,
- "dependencies": {
- "kind-of": "^3.2.0"
- },
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-util/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/snapdragon-util/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
+ "node": ">=14"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "dependencies": {
- "ms": "2.0.0"
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
- "node_modules/snapdragon/node_modules/define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
+ "node_modules/simple-update-notifier": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
+ "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
"dev": true,
"dependencies": {
- "is-descriptor": "^0.1.0"
+ "semver": "^7.5.3"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
}
},
- "node_modules/snapdragon/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "node_modules/simple-update-notifier/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": {
- "is-extendable": "^0.1.0"
+ "yallist": "^4.0.0"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
}
},
- "node_modules/snapdragon/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+ "node_modules/simple-update-notifier/node_modules/semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"dependencies": {
- "kind-of": "^3.0.2"
+ "lru-cache": "^6.0.0"
},
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
+ "bin": {
+ "semver": "bin/semver.js"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
}
},
- "node_modules/snapdragon/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "node_modules/simple-update-notifier/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/snapdragon/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon/node_modules/ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "node_modules/sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
"dev": true
},
- "node_modules/snapdragon/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "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": ">=0.10.0"
+ "node": ">=8"
}
},
- "node_modules/source-list-map": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
- "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
- "dev": true
- },
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -19193,20 +12607,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
- "dev": true,
- "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",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
@@ -19217,13 +12617,6 @@
"source-map": "^0.6.0"
}
},
- "node_modules/source-map-url": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
- "deprecated": "See https://github.com/lydell/source-map-url#deprecated",
- "dev": true
- },
"node_modules/space-separated-tokens": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
@@ -19235,9 +12628,9 @@
}
},
"node_modules/spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "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",
@@ -19261,160 +12654,17 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.12",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
- "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
+ "version": "3.0.16",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz",
+ "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==",
"dev": true
},
- "node_modules/split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "dependencies": {
- "extend-shallow": "^3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"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": "8.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
- "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
- "dev": true,
- "dependencies": {
- "minipass": "^3.1.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/stable": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
- "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
- "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility",
- "dev": true
- },
- "node_modules/state-toggle": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz",
- "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "dependencies": {
- "is-descriptor": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/static-extend/node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/static-extend/node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -19430,97 +12680,21 @@
"integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==",
"dev": true
},
- "node_modules/stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
- "dev": true,
- "dependencies": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- }
- },
- "node_modules/stream-browserify/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/stream-browserify/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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/stream-browserify/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/stream-each": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
- "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "dev": true,
- "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-http/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/stream-http/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "node_modules/storybook": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.4.tgz",
+ "integrity": "sha512-nQhs9XkrroxjqMoBnnToyc6M8ndbmpkOb1qmULO4chtfMy4k0p9Un3K4TJvDaP8c3wPUFGd4ZaJ1hZNVmIl56Q==",
"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/stream-http/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
+ "@storybook/cli": "7.6.4"
+ },
+ "bin": {
+ "sb": "index.js",
+ "storybook": "index.js"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/storybook"
}
},
"node_modules/stream-shift": {
@@ -19538,27 +12712,25 @@
"safe-buffer": "~5.2.0"
}
},
- "node_modules/string_decoder/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==",
+ "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,
- "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": {
+ "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/string-width": {
+ "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==",
@@ -19572,85 +12744,37 @@
"node": ">=8"
}
},
- "node_modules/string.prototype.matchall": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
- "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.3",
- "regexp.prototype.flags": "^1.4.3",
- "side-channel": "^1.0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
+ "node_modules/string-width-cjs/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/string.prototype.padend": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz",
- "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==",
+ "node_modules/string-width/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,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- },
"engines": {
- "node": ">= 0.4"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/chalk/ansi-regex?sponsor=1"
}
},
- "node_modules/string.prototype.padstart": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.4.tgz",
- "integrity": "sha512-XqOHj8horGsF+zwxraBvMTkBFM28sS/jHBJajh17JtJKA92qazidiQbLosV4UA18azvLOVKYo/E3g3T9Y5826w==",
+ "node_modules/string-width/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": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
+ "ansi-regex": "^6.0.1"
},
"engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
- "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
- "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
+ "node": ">=12"
},
"funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "url": "https://github.com/chalk/strip-ansi?sponsor=1"
}
},
"node_modules/strip-ansi": {
@@ -19665,26 +12789,17 @@
"node": ">=8"
}
},
- "node_modules/strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
+ "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,
- "optional": true,
"dependencies": {
- "is-utf8": "^0.2.0"
+ "ansi-regex": "^5.0.1"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
}
},
"node_modules/strip-final-newline": {
@@ -19696,67 +12811,16 @@
"node": ">=6"
}
},
- "node_modules/strip-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "get-stdin": "^4.0.1"
- },
- "bin": {
- "strip-indent": "cli.js"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/style-loader": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz",
- "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==",
- "dev": true,
- "dependencies": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0"
- },
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/style-loader/node_modules/schema-utils": {
+ "node_modules/strip-json-comments": {
"version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
+ "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
- "dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- },
"engines": {
- "node": ">= 10.13.0"
+ "node": ">=8"
},
"funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/style-to-object": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
- "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==",
- "dev": true,
- "dependencies": {
- "inline-style-parser": "0.1.1"
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/supports-color": {
@@ -19783,48 +12847,40 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/symbol.prototype.description": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz",
- "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==",
+ "node_modules/swc-loader": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.3.tgz",
+ "integrity": "sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==",
"dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-symbol-description": "^1.0.0",
- "has-symbols": "^1.0.2",
- "object.getownpropertydescriptors": "^2.1.2"
- },
- "engines": {
- "node": ">= 0.11.15"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "peerDependencies": {
+ "@swc/core": "^1.2.147",
+ "webpack": ">=2"
}
},
"node_modules/synchronous-promise": {
- "version": "2.0.16",
- "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.16.tgz",
- "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==",
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz",
+ "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==",
"dev": true
},
"node_modules/tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+ "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.13",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz",
- "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
+ "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
"dev": true,
"dependencies": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
- "minipass": "^4.0.0",
+ "minipass": "^5.0.0",
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
@@ -19833,18 +12889,61 @@
"node": ">=10"
}
},
- "node_modules/tar/node_modules/minipass": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz",
- "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==",
+ "node_modules/tar-fs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
"dev": true,
"dependencies": {
- "yallist": "^4.0.0"
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ }
+ },
+ "node_modules/tar-fs/node_modules/chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "dev": true
+ },
+ "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/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/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",
@@ -19852,28 +12951,96 @@
"dev": true
},
"node_modules/telejson": {
- "version": "6.0.8",
- "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz",
- "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz",
+ "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==",
"dev": true,
"dependencies": {
- "@types/is-function": "^1.0.0",
- "global": "^4.4.0",
- "is-function": "^1.0.2",
- "is-regex": "^1.1.2",
- "is-symbol": "^1.0.3",
- "isobject": "^4.0.0",
- "lodash": "^4.17.21",
"memoizerific": "^1.11.3"
}
},
- "node_modules/telejson/node_modules/isobject": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
- "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==",
+ "node_modules/temp": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz",
+ "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==",
+ "dev": true,
+ "dependencies": {
+ "rimraf": "~2.6.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/temp-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
+ "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==",
"dev": true,
"engines": {
- "node": ">=0.10.0"
+ "node": ">=8"
+ }
+ },
+ "node_modules/temp/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/temp/node_modules/rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.3"
+ },
+ "bin": {
+ "rimraf": "bin.js"
+ }
+ },
+ "node_modules/tempy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz",
+ "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==",
+ "dev": true,
+ "dependencies": {
+ "del": "^6.0.0",
+ "is-stream": "^2.0.0",
+ "temp-dir": "^2.0.0",
+ "type-fest": "^0.16.0",
+ "unique-string": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/tempy/node_modules/type-fest": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz",
+ "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/terser": {
@@ -19984,12 +13151,6 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
- "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",
@@ -20004,13 +13165,24 @@
"node": ">=8"
}
},
- "node_modules/throttle-debounce": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz",
- "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==",
+ "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": ">=10"
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/through2": {
@@ -20023,16 +13195,10 @@
"xtend": "~4.0.1"
}
},
- "node_modules/through2/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/through2/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "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",
@@ -20044,6 +13210,12 @@
"util-deprecate": "~1.0.1"
}
},
+ "node_modules/through2/node_modules/safe-buffer": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
+ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
+ "dev": true
+ },
"node_modules/through2/node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
@@ -20053,17 +13225,11 @@
"safe-buffer": "~5.1.0"
}
},
- "node_modules/timers-browserify": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
- "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
- "dev": true,
- "dependencies": {
- "setimmediate": "^1.0.4"
- },
- "engines": {
- "node": ">=0.6.0"
- }
+ "node_modules/tiny-invariant": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz",
+ "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==",
+ "dev": true
},
"node_modules/tmpl": {
"version": "1.0.5",
@@ -20071,12 +13237,6 @@
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
"dev": true
},
- "node_modules/to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
- "dev": true
- },
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
@@ -20086,51 +13246,6 @@
"node": ">=4"
}
},
- "node_modules/to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
- "dev": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-object-path/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "node_modules/to-object-path/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "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": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -20143,6 +13258,12 @@
"node": ">=8.0"
}
},
+ "node_modules/tocbot": {
+ "version": "4.23.0",
+ "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.23.0.tgz",
+ "integrity": "sha512-5DWuSZXsqG894mkGb8ZsQt9myyQyVxE50AiGRZ0obV0BVUTVkaZmc9jbgpknaAAPUm4FIrzGkEseD6FuQJYJDQ==",
+ "dev": true
+ },
"node_modules/toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -20158,42 +13279,6 @@
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"dev": true
},
- "node_modules/trim": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
- "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==",
- "dev": true
- },
- "node_modules/trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/trim-trailing-lines": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz",
- "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
- "node_modules/trough": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
- "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"node_modules/ts-dedent": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
@@ -20203,39 +13288,19 @@
"node": ">=6.10"
}
},
- "node_modules/ts-pnp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz",
- "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
"node_modules/tslib": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
"dev": true
},
- "node_modules/tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==",
- "dev": true
- },
"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==",
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -20254,39 +13319,16 @@
"node": ">= 0.6"
}
},
- "node_modules/typed-array-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
- "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
- "dev": true,
- "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",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
"dev": true
},
- "node_modules/typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "dependencies": {
- "is-typedarray": "^1.0.0"
- }
- },
"node_modules/typescript": {
- "version": "4.9.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
- "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
"dev": true,
"peer": true,
"bin": {
@@ -20294,7 +13336,7 @@
"tsserver": "bin/tsserver"
},
"engines": {
- "node": ">=4.2.0"
+ "node": ">=14.17"
}
},
"node_modules/typical": {
@@ -20319,41 +13361,6 @@
"node": ">=0.8.0"
}
},
- "node_modules/unbox-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
- "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
- "dev": true,
- "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/unfetch": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz",
- "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==",
- "dev": true
- },
- "node_modules/unherit": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz",
- "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.0",
- "xtend": "^4.0.0"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
- },
"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",
@@ -20394,84 +13401,16 @@
"node": ">=4"
}
},
- "node_modules/unified": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz",
- "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==",
- "dev": true,
- "dependencies": {
- "bail": "^1.0.0",
- "extend": "^3.0.0",
- "is-buffer": "^2.0.0",
- "is-plain-obj": "^2.0.0",
- "trough": "^1.0.0",
- "vfile": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
+ "node_modules/unique-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
+ "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
"dev": true,
"dependencies": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
+ "crypto-random-string": "^2.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/union-value/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "dev": true,
- "dependencies": {
- "unique-slug": "^2.0.0"
- }
- },
- "node_modules/unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
- "dev": true,
- "dependencies": {
- "imurmurhash": "^0.1.4"
- }
- },
- "node_modules/unist-builder": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz",
- "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-generated": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz",
- "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
+ "node": ">=8"
}
},
"node_modules/unist-util-is": {
@@ -20484,55 +13423,6 @@
"url": "https://opencollective.com/unified"
}
},
- "node_modules/unist-util-position": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz",
- "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-remove": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz",
- "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==",
- "dev": true,
- "dependencies": {
- "unist-util-is": "^4.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-remove-position": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz",
- "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==",
- "dev": true,
- "dependencies": {
- "unist-util-visit": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/unist-util-stringify-position": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
- "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.2"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
"node_modules/unist-util-visit": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
@@ -20580,88 +13470,37 @@
"node": ">= 0.8"
}
},
- "node_modules/unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
+ "node_modules/unplugin": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.1.tgz",
+ "integrity": "sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew==",
"dev": true,
"dependencies": {
- "isarray": "1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "acorn": "^8.11.2",
+ "chokidar": "^3.5.3",
+ "webpack-sources": "^3.2.3",
+ "webpack-virtual-modules": "^0.6.0"
}
},
- "node_modules/unset-value/node_modules/has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unset-value/node_modules/isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "node_modules/unplugin/node_modules/webpack-virtual-modules": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz",
+ "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==",
"dev": true
},
"node_modules/untildify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz",
- "integrity": "sha512-sJjbDp2GodvkB0FZZcn7k6afVisqX5BZD7Yq3xp4nN2O15BBK0cLm3Vwn2vQaF7UDS0UUsrQMkkplmDI5fskig==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "os-homedir": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/upath": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
- "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
+ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
"dev": true,
- "optional": true,
"engines": {
- "node": ">=4",
- "yarn": "*"
+ "node": ">=8"
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
- "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
"dev": true,
"funding": [
{
@@ -20671,6 +13510,10 @@
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
}
],
"dependencies": {
@@ -20678,18 +13521,12 @@
"picocolors": "^1.0.0"
},
"bin": {
- "browserslist-lint": "cli.js"
+ "update-browserslist-db": "cli.js"
},
"peerDependencies": {
"browserslist": ">= 4.21.0"
}
},
- "node_modules/update-browserslist-db/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/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -20699,13 +13536,6 @@
"punycode": "^2.1.0"
}
},
- "node_modules/urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
- "deprecated": "Please see https://github.com/lydell/urix#deprecated",
- "dev": true
- },
"node_modules/url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
@@ -20716,73 +13546,79 @@
"querystring": "0.2.0"
}
},
- "node_modules/url-loader": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
- "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==",
+ "node_modules/url/node_modules/punycode": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+ "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==",
+ "dev": true
+ },
+ "node_modules/use-callback-ref": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz",
+ "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==",
"dev": true,
"dependencies": {
- "loader-utils": "^2.0.0",
- "mime-types": "^2.1.27",
- "schema-utils": "^3.0.0"
+ "tslib": "^2.0.0"
},
"engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
+ "node": ">=10"
},
"peerDependencies": {
- "file-loader": "*",
- "webpack": "^4.0.0 || ^5.0.0"
+ "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
},
"peerDependenciesMeta": {
- "file-loader": {
+ "@types/react": {
"optional": true
}
}
},
- "node_modules/url-loader/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
+ "node_modules/use-resize-observer": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz",
+ "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==",
"dev": true,
"dependencies": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
+ "@juggle/resize-observer": "^3.3.1"
},
- "engines": {
- "node": ">= 10.13.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
+ "peerDependencies": {
+ "react": "16.8.0 - 18",
+ "react-dom": "16.8.0 - 18"
}
},
- "node_modules/url/node_modules/punycode": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
- "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==",
- "dev": true
- },
- "node_modules/use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "node_modules/use-sidecar": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
+ "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
"dev": true,
+ "dependencies": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ },
"engines": {
- "node": ">=0.10.0"
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
}
},
"node_modules/util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
"dev": true,
"dependencies": {
- "inherits": "2.0.3"
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
}
},
"node_modules/util-deprecate": {
@@ -20791,22 +13627,6 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
- "node_modules/util.promisify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
- "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
- "dev": true,
- "dependencies": {
- "define-properties": "^1.1.2",
- "object.getownpropertydescriptors": "^2.0.3"
- }
- },
- "node_modules/util/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/utila": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
@@ -20823,21 +13643,18 @@
}
},
"node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
"dev": true,
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
"bin": {
- "uuid": "bin/uuid"
+ "uuid": "dist/bin/uuid"
}
},
- "node_modules/uuid-browser": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz",
- "integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==",
- "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",
@@ -20857,52 +13674,6 @@
"node": ">= 0.8"
}
},
- "node_modules/vfile": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
- "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0",
- "vfile-message": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-location": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz",
- "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==",
- "dev": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vfile-message": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
- "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
- "dev": true,
- "dependencies": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/unified"
- }
- },
- "node_modules/vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
- "dev": true
- },
"node_modules/walker": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
@@ -20925,332 +13696,13 @@
"node": ">=10.13.0"
}
},
- "node_modules/watchpack-chokidar2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
- "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "chokidar": "^2.1.8"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "optional": true,
- "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/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/chokidar": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
- "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
- "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
- "dev": true,
- "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/fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "optional": true,
- "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/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-extendable": "^0.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/fsevents": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
- "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
- "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "dependencies": {
- "bindings": "^1.5.0",
- "nan": "^2.12.1"
- },
- "engines": {
- "node": ">= 4.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
- "dev": true,
- "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",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-extglob": "^2.1.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/is-binary-path": {
+ "node_modules/wcwidth": {
"version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "binary-extensions": "^1.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true,
- "optional": true
- },
- "node_modules/watchpack-chokidar2/node_modules/is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "optional": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "kind-of": "^3.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/watchpack-chokidar2/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,
- "optional": true
- },
- "node_modules/watchpack-chokidar2/node_modules/micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "optional": true,
- "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/watchpack-chokidar2/node_modules/readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "optional": 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/watchpack-chokidar2/node_modules/readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "optional": true,
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/watchpack-chokidar2/node_modules/to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
"dev": true,
- "optional": true,
"dependencies": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/web-namespaces": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz",
- "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
+ "defaults": "^1.0.3"
}
},
"node_modules/webidl-conversions": {
@@ -21306,48 +13758,6 @@
}
}
},
- "node_modules/webpack-dev-middleware": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz",
- "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==",
- "dev": true,
- "dependencies": {
- "colorette": "^1.2.2",
- "mem": "^8.1.1",
- "memfs": "^3.2.2",
- "mime-types": "^2.1.30",
- "range-parser": "^1.2.1",
- "schema-utils": "^3.0.0"
- },
- "engines": {
- "node": ">= v10.23.3"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- },
- "peerDependencies": {
- "webpack": "^4.0.0 || ^5.0.0"
- }
- },
- "node_modules/webpack-dev-middleware/node_modules/schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "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/webpack-hot-middleware": {
"version": "2.25.3",
"resolved": "https://registry.npmjs.org/webpack-hot-middleware/-/webpack-hot-middleware-2.25.3.tgz",
@@ -21359,19 +13769,6 @@
"strip-ansi": "^6.0.0"
}
},
- "node_modules/webpack-log": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
- "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
- "dev": true,
- "dependencies": {
- "ansi-colors": "^3.0.0",
- "uuid": "^3.3.2"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/webpack-sources": {
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
@@ -21381,12 +13778,6 @@
"node": ">=10.13.0"
}
},
- "node_modules/webpack-virtual-modules": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz",
- "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==",
- "dev": true
- },
"node_modules/webpack/node_modules/schema-utils": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
@@ -21405,15 +13796,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/webpack/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/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
@@ -21439,34 +13821,17 @@
"node": ">= 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,
- "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",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
- "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
+ "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
"dev": true,
"dependencies": {
"available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.4",
"for-each": "^0.3.3",
"gopd": "^1.0.1",
- "has-tostringtag": "^1.0.0",
- "is-typed-array": "^1.1.10"
+ "has-tostringtag": "^1.0.0"
},
"engines": {
"node": ">= 0.4"
@@ -21475,52 +13840,31 @@
"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/widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/wordwrap": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
"dev": true
},
- "node_modules/worker-farm": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
- "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
- "dev": true,
- "dependencies": {
- "errno": "~0.1.7"
- }
- },
- "node_modules/worker-rpc": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz",
- "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==",
+ "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": {
- "microevent.ts": "~0.1.1"
+ "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/wrap-ansi": {
+ "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==",
@@ -21537,7 +13881,7 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/wrap-ansi/node_modules/ansi-styles": {
+ "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==",
@@ -21552,7 +13896,7 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
- "node_modules/wrap-ansi/node_modules/color-convert": {
+ "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==",
@@ -21564,12 +13908,71 @@
"node": ">=7.0.0"
}
},
- "node_modules/wrap-ansi/node_modules/color-name": {
+ "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-cjs/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/wrap-ansi-cjs/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/wrap-ansi/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/wrap-ansi/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/wrap-ansi/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/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -21577,21 +13980,28 @@
"dev": true
},
"node_modules/write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
"dev": true,
"dependencies": {
"imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
+ "signal-exit": "^3.0.7"
+ },
+ "engines": {
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
+ "node_modules/write-file-atomic/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/ws": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz",
- "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==",
+ "version": "8.15.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz",
+ "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==",
"dev": true,
"engines": {
"node": ">=10.0.0"
@@ -21609,18 +14019,6 @@
}
}
},
- "node_modules/x-default-browser": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/x-default-browser/-/x-default-browser-0.4.0.tgz",
- "integrity": "sha512-7LKo7RtWfoFN/rHx1UELv/2zHGMx8MkZKDq1xENmOCTkfIqZJ0zZ26NEJX8czhnPXVcqS0ARjjfJB+eJ0/5Cvw==",
- "dev": true,
- "bin": {
- "x-default-browser": "bin/x-default-browser.js"
- },
- "optionalDependencies": {
- "default-browser-id": "^1.0.4"
- }
- },
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@@ -21630,12 +14028,6 @@
"node": ">=0.4"
}
},
- "node_modules/y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
"node_modules/yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -21651,6 +14043,16 @@
"node": ">= 6"
}
},
+ "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",
@@ -21662,16 +14064,6 @@
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
- },
- "node_modules/zwitch": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
- "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
- "dev": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/wooorm"
- }
}
},
"dependencies": {
@@ -21685,59 +14077,78 @@
"@jridgewell/trace-mapping": "^0.3.9"
}
},
+ "@aw-web-design/x-default-browser": {
+ "version": "1.4.126",
+ "resolved": "https://registry.npmjs.org/@aw-web-design/x-default-browser/-/x-default-browser-1.4.126.tgz",
+ "integrity": "sha512-Xk1sIhyNC/esHGGVjL/niHLowM0csl/kFO5uawBy4IrWwy0o1G8LGt3jP6nmWGz+USxeeqbihAmp/oVZju6wug==",
+ "dev": true,
+ "requires": {
+ "default-browser-id": "3.0.0"
+ }
+ },
"@babel/code-frame": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
- "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.18.6"
+ "@babel/highlight": "^7.23.4",
+ "chalk": "^2.4.2"
}
},
"@babel/compat-data": {
- "version": "7.20.10",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz",
- "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz",
+ "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==",
"dev": true
},
"@babel/core": {
- "version": "7.20.12",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz",
- "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==",
- "dev": true,
- "requires": {
- "@ampproject/remapping": "^2.1.0",
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.20.7",
- "@babel/helper-compilation-targets": "^7.20.7",
- "@babel/helper-module-transforms": "^7.20.11",
- "@babel/helpers": "^7.20.7",
- "@babel/parser": "^7.20.7",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.20.12",
- "@babel/types": "^7.20.7",
- "convert-source-map": "^1.7.0",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.6.tgz",
+ "integrity": "sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==",
+ "dev": true,
+ "requires": {
+ "@ampproject/remapping": "^2.2.0",
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-compilation-targets": "^7.23.6",
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helpers": "^7.23.6",
+ "@babel/parser": "^7.23.6",
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "convert-source-map": "^2.0.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
- "json5": "^2.2.2",
- "semver": "^6.3.0"
+ "json5": "^2.2.3",
+ "semver": "^6.3.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
}
},
"@babel/generator": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz",
- "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz",
+ "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==",
"dev": true,
"requires": {
- "@babel/types": "^7.20.7",
+ "@babel/types": "^7.23.6",
"@jridgewell/gen-mapping": "^0.3.2",
+ "@jridgewell/trace-mapping": "^0.3.17",
"jsesc": "^2.5.1"
},
"dependencies": {
"@jridgewell/gen-mapping": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
- "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
+ "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",
@@ -21748,471 +14159,306 @@
}
},
"@babel/helper-annotate-as-pure": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz",
- "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==",
+ "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.18.6"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz",
- "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
+ "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
"dev": true,
"requires": {
- "@babel/helper-explode-assignable-expression": "^7.18.6",
- "@babel/types": "^7.18.9"
+ "@babel/types": "^7.22.15"
}
},
"@babel/helper-compilation-targets": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
- "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz",
+ "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.20.5",
- "@babel/helper-validator-option": "^7.18.6",
- "browserslist": "^4.21.3",
+ "@babel/compat-data": "^7.23.5",
+ "@babel/helper-validator-option": "^7.23.5",
+ "browserslist": "^4.22.2",
"lru-cache": "^5.1.1",
- "semver": "^6.3.0"
+ "semver": "^6.3.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
}
},
"@babel/helper-create-class-features-plugin": {
- "version": "7.20.12",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.12.tgz",
- "integrity": "sha512-9OunRkbT0JQcednL0UFvbfXpAsUXiGjUk0a7sN8fUXX7Mue79cUSMjHGDRRi/Vz9vYlpIhLV5fMD5dKoMhhsNQ==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.6.tgz",
+ "integrity": "sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.19.0",
- "@babel/helper-member-expression-to-functions": "^7.20.7",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/helper-replace-supers": "^7.20.7",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0",
- "@babel/helper-split-export-declaration": "^7.18.6"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-member-expression-to-functions": "^7.23.0",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.20",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "semver": "^6.3.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
}
},
"@babel/helper-create-regexp-features-plugin": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.20.5.tgz",
- "integrity": "sha512-m68B1lkg3XDGX5yCvGO0kPx3v9WIYLnzjKfPcQiwntEQa5ZeRkPmo2X/ISJc8qxWGfwUr+kvZAeEzAwLec2r2w==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
+ "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "regexpu-core": "^5.2.1"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "regexpu-core": "^5.3.1",
+ "semver": "^6.3.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
}
},
"@babel/helper-define-polyfill-provider": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz",
- "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==",
+ "version": "0.4.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.4.tgz",
+ "integrity": "sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==",
"dev": true,
"requires": {
- "@babel/helper-compilation-targets": "^7.17.7",
- "@babel/helper-plugin-utils": "^7.16.7",
+ "@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",
- "semver": "^6.1.2"
+ "resolve": "^1.14.2"
}
},
"@babel/helper-environment-visitor": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
- "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
+ "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
"dev": true
},
- "@babel/helper-explode-assignable-expression": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz",
- "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.18.6"
- }
- },
"@babel/helper-function-name": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
- "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
+ "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
"dev": true,
"requires": {
- "@babel/template": "^7.18.10",
- "@babel/types": "^7.19.0"
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.23.0"
}
},
"@babel/helper-hoist-variables": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
- "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
+ "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.18.6"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.20.7.tgz",
- "integrity": "sha512-9J0CxJLq315fEdi4s7xK5TQaNYjZw+nDVpVqr1axNGKzdrdwYBD5b4uKv3n75aABG0rCCTK8Im8Ww7eYfMrZgw==",
+ "version": "7.23.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
+ "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
"dev": true,
"requires": {
- "@babel/types": "^7.20.7"
+ "@babel/types": "^7.23.0"
}
},
"@babel/helper-module-imports": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
- "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
+ "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.15"
}
},
"@babel/helper-module-transforms": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz",
- "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==",
- "dev": true,
- "requires": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-simple-access": "^7.20.2",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/helper-validator-identifier": "^7.19.1",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.20.10",
- "@babel/types": "^7.20.7"
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz",
+ "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/helper-simple-access": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/helper-validator-identifier": "^7.22.20"
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz",
- "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==",
+ "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.18.6"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-plugin-utils": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz",
- "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==",
+ "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.18.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz",
- "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
+ "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
"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-annotate-as-pure": "^7.22.5",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-wrap-function": "^7.22.20"
}
},
"@babel/helper-replace-supers": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz",
- "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz",
+ "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==",
"dev": true,
"requires": {
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-member-expression-to-functions": "^7.20.7",
- "@babel/helper-optimise-call-expression": "^7.18.6",
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.20.7",
- "@babel/types": "^7.20.7"
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-member-expression-to-functions": "^7.22.15",
+ "@babel/helper-optimise-call-expression": "^7.22.5"
}
},
"@babel/helper-simple-access": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz",
- "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==",
+ "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.20.2"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz",
- "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==",
+ "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.20.0"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
- "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
+ "version": "7.22.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
+ "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
"dev": true,
"requires": {
- "@babel/types": "^7.18.6"
+ "@babel/types": "^7.22.5"
}
},
"@babel/helper-string-parser": {
- "version": "7.19.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
- "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"dev": true
},
"@babel/helper-validator-identifier": {
- "version": "7.19.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
- "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
+ "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
"dev": true
},
"@babel/helper-validator-option": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
- "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz",
+ "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==",
"dev": true
},
"@babel/helper-wrap-function": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz",
- "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==",
+ "version": "7.22.20",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
+ "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
"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/helper-function-name": "^7.22.5",
+ "@babel/template": "^7.22.15",
+ "@babel/types": "^7.22.19"
}
},
"@babel/helpers": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz",
- "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz",
+ "integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==",
"dev": true,
"requires": {
- "@babel/template": "^7.20.7",
- "@babel/traverse": "^7.20.7",
- "@babel/types": "^7.20.7"
+ "@babel/template": "^7.22.15",
+ "@babel/traverse": "^7.23.6",
+ "@babel/types": "^7.23.6"
}
},
"@babel/highlight": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
- "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
"requires": {
- "@babel/helper-validator-identifier": "^7.18.6",
- "chalk": "^2.0.0",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "chalk": "^2.4.2",
"js-tokens": "^4.0.0"
}
},
"@babel/parser": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz",
- "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"dev": true
},
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.18.6",
- "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.18.6.tgz",
- "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==",
+ "version": "7.23.3",
+ "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.23.3.tgz",
+ "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz",
- "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz",
+ "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==",
"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/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
+ "@babel/plugin-transform-optional-chaining": "^7.23.3"
}
},
- "@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==",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz",
+ "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==",
"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",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz",
- "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==",
- "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.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.20.7.tgz",
- "integrity": "sha512-AveGOoi9DAjUYYuUAG//Ig69GlazLnoyzMw68VCDux+c1tsnnH/OkYcpz/5xzMkEFC6UxjR5Gw1c+iY2wOGVeQ==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.20.7",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-class-static-block": "^7.14.5"
- }
- },
- "@babel/plugin-proposal-decorators": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.20.7.tgz",
- "integrity": "sha512-JB45hbUweYpwAGjkiM7uCyXMENH2lG+9r3G2E+ttc2PRXAoEkpfd/KW5jDg4j8RS6tLtTG1jZi9LbHZVSfs1/A==",
- "dev": true,
- "requires": {
- "@babel/helper-create-class-features-plugin": "^7.20.7",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-replace-supers": "^7.20.7",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/plugin-syntax-decorators": "^7.19.0"
- }
- },
- "@babel/plugin-proposal-dynamic-import": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz",
- "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3"
- }
- },
- "@babel/plugin-proposal-export-default-from": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.18.10.tgz",
- "integrity": "sha512-5H2N3R2aQFxkV4PIBUR/i7PUSwgTZjouJKzI8eKswfIjT0PhvzkPn0t0wIS5zn6maQuvtT0t1oHtMUz61LOuow==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.9",
- "@babel/plugin-syntax-export-default-from": "^7.18.6"
- }
- },
- "@babel/plugin-proposal-export-namespace-from": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz",
- "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==",
- "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",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz",
- "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==",
- "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",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz",
- "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==",
- "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",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz",
- "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==",
- "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",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz",
- "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==",
- "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",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz",
- "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==",
- "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",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz",
- "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==",
- "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.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.20.7.tgz",
- "integrity": "sha512-T+A7b1kfjtRM51ssoOfS1+wbyCVqorfyZhT99TvxxLMirPShD8CzKMRepMlCBGM5RpHMbn8s+5MMHnPstJH6mQ==",
- "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",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz",
- "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==",
- "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.20.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.20.5.tgz",
- "integrity": "sha512-Vq7b9dUA12ByzB4EjQTPo25sFhY+08pQDBSZRtUAkj7lb7jahaHR5igera16QZ+3my1nYR4dKsNdYj5IjPHilQ==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-create-class-features-plugin": "^7.20.5",
- "@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",
- "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/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-syntax-async-generators": {
@@ -22242,15 +14488,6 @@
"@babel/helper-plugin-utils": "^7.14.5"
}
},
- "@babel/plugin-syntax-decorators": {
- "version": "7.19.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.19.0.tgz",
- "integrity": "sha512-xaBZUEDntt4faL1yN8oIFlhfXeQAWJW7CLKYsHTUqriCUbj8xOra8bfxxKGi/UwExPFBuPdH4XfHc9rGQhrVkQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.19.0"
- }
- },
"@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",
@@ -22260,15 +14497,6 @@
"@babel/helper-plugin-utils": "^7.8.0"
}
},
- "@babel/plugin-syntax-export-default-from": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.18.6.tgz",
- "integrity": "sha512-Kr//z3ujSVNx6E9z9ih5xXXMqK07VVTuqPmqGe6Mss/zW5XPeLZeSDZoP9ab/hT4wPKqAgjl2PnhPrcpk8Seew==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.18.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",
@@ -22278,13 +14506,31 @@
"@babel/helper-plugin-utils": "^7.8.3"
}
},
+ "@babel/plugin-syntax-flow": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.23.3.tgz",
+ "integrity": "sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
"@babel/plugin-syntax-import-assertions": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz",
- "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz",
+ "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-syntax-import-attributes": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz",
+ "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.19.0"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-syntax-import-meta": {
@@ -22306,12 +14552,12 @@
}
},
"@babel/plugin-syntax-jsx": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz",
- "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz",
+ "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-syntax-logical-assignment-operators": {
@@ -22387,414 +14633,594 @@
}
},
"@babel/plugin-syntax-typescript": {
- "version": "7.20.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz",
- "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz",
+ "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.19.0"
+ "@babel/helper-plugin-utils": "^7.22.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.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz",
- "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz",
+ "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-async-generator-functions": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz",
+ "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.20",
+ "@babel/plugin-syntax-async-generators": "^7.8.4"
}
},
"@babel/plugin-transform-async-to-generator": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz",
- "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz",
+ "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==",
"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/helper-module-imports": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-remap-async-to-generator": "^7.22.20"
}
},
"@babel/plugin-transform-block-scoped-functions": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz",
- "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz",
+ "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.11.tgz",
- "integrity": "sha512-tA4N427a7fjf1P0/2I4ScsHGc5jcHPbb30xMbaTke2gxDuWpUfXDuX1FEymJwKk4tuGUvGcejAR6HdZVqmmPyw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz",
+ "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-class-properties": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz",
+ "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-class-static-block": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz",
+ "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@babel/helper-create-class-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-class-static-block": "^7.14.5"
}
},
"@babel/plugin-transform-classes": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.7.tgz",
- "integrity": "sha512-LWYbsiXTPKl+oBlXUGlwNlJZetXD5Am+CyBdqhPsDVjM9Jc8jwBJFrKhHf900Kfk2eZG1y9MAG3UNajol7A4VQ==",
- "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.19.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",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz",
+ "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-optimise-call-expression": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.20",
+ "@babel/helper-split-export-declaration": "^7.22.6",
"globals": "^11.1.0"
}
},
"@babel/plugin-transform-computed-properties": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz",
- "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz",
+ "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/template": "^7.20.7"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/template": "^7.22.15"
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz",
- "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz",
+ "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-dotall-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz",
- "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz",
+ "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-duplicate-keys": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz",
- "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz",
+ "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-dynamic-import": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz",
+ "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==",
+ "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.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz",
- "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz",
+ "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==",
"dev": true,
"requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-export-namespace-from": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz",
+ "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
+ }
+ },
+ "@babel/plugin-transform-flow-strip-types": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.23.3.tgz",
+ "integrity": "sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-flow": "^7.23.3"
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.18.8",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz",
- "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.6.tgz",
+ "integrity": "sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
}
},
"@babel/plugin-transform-function-name": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz",
- "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz",
+ "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-json-strings": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz",
+ "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==",
"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/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-json-strings": "^7.8.3"
}
},
"@babel/plugin-transform-literals": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz",
- "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz",
+ "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-logical-assignment-operators": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz",
+ "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
}
},
"@babel/plugin-transform-member-expression-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz",
- "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz",
+ "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-modules-amd": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz",
- "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz",
+ "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.20.11",
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz",
- "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz",
+ "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.20.11",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-simple-access": "^7.20.2"
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-simple-access": "^7.22.5"
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.20.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz",
- "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz",
+ "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==",
"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/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-identifier": "^7.22.20"
}
},
"@babel/plugin-transform-modules-umd": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz",
- "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz",
+ "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-module-transforms": "^7.23.3",
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz",
- "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==",
+ "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.20.5",
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@babel/helper-create-regexp-features-plugin": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-new-target": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz",
- "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz",
+ "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-nullish-coalescing-operator": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz",
+ "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==",
+ "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.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz",
+ "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==",
+ "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.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz",
+ "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.23.3",
+ "@babel/helper-compilation-targets": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
+ "@babel/plugin-transform-parameters": "^7.23.3"
}
},
"@babel/plugin-transform-object-super": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz",
- "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz",
+ "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-replace-supers": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-replace-supers": "^7.22.20"
+ }
+ },
+ "@babel/plugin-transform-optional-catch-binding": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz",
+ "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==",
+ "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.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz",
+ "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==",
+ "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.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz",
- "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz",
+ "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-private-methods": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz",
+ "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.20.2"
+ "@babel/helper-create-class-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-private-property-in-object": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz",
+ "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
}
},
"@babel/plugin-transform-property-literals": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz",
- "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz",
+ "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-react-display-name": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz",
- "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz",
+ "integrity": "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-react-jsx": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.20.7.tgz",
- "integrity": "sha512-Tfq7qqD+tRj3EoDhY00nn2uP2hsRxgYGi5mLQ5TimKav0a9Lrpd4deE+fcLXU8zFYRjlKPHZhpCvfEA6qnBxqQ==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz",
+ "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-module-imports": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-jsx": "^7.18.6",
- "@babel/types": "^7.20.7"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-module-imports": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-jsx": "^7.23.3",
+ "@babel/types": "^7.23.4"
}
},
"@babel/plugin-transform-react-jsx-development": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz",
- "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==",
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz",
+ "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==",
"dev": true,
"requires": {
- "@babel/plugin-transform-react-jsx": "^7.18.6"
+ "@babel/plugin-transform-react-jsx": "^7.22.5"
}
},
"@babel/plugin-transform-react-pure-annotations": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz",
- "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz",
+ "integrity": "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.20.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz",
- "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz",
+ "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.20.2",
- "regenerator-transform": "^0.15.1"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "regenerator-transform": "^0.15.2"
}
},
"@babel/plugin-transform-reserved-words": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz",
- "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz",
+ "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-shorthand-properties": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz",
- "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz",
+ "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-spread": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz",
- "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz",
+ "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
}
},
"@babel/plugin-transform-sticky-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz",
- "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz",
+ "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz",
- "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz",
+ "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-typeof-symbol": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz",
- "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz",
+ "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-typescript": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.7.tgz",
- "integrity": "sha512-m3wVKEvf6SoszD8pu4NZz3PvfKRCMgk6D6d0Qi9hNnlM5M6CFS92EgF4EiHVLKbU0r/r7ty1hg7NPZwE7WRbYw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz",
+ "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==",
"dev": true,
"requires": {
- "@babel/helper-create-class-features-plugin": "^7.20.7",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/plugin-syntax-typescript": "^7.20.0"
+ "@babel/helper-annotate-as-pure": "^7.22.5",
+ "@babel/helper-create-class-features-plugin": "^7.23.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/plugin-syntax-typescript": "^7.23.3"
}
},
"@babel/plugin-transform-unicode-escapes": {
- "version": "7.18.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz",
- "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz",
+ "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.9"
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-property-regex": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz",
+ "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/plugin-transform-unicode-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz",
- "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz",
+ "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
+ "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
+ }
+ },
+ "@babel/plugin-transform-unicode-sets-regex": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz",
+ "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.22.15",
+ "@babel/helper-plugin-utils": "^7.22.5"
}
},
"@babel/preset-env": {
- "version": "7.20.2",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz",
- "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.20.1",
- "@babel/helper-compilation-targets": "^7.20.0",
- "@babel/helper-plugin-utils": "^7.20.2",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9",
- "@babel/plugin-proposal-async-generator-functions": "^7.20.1",
- "@babel/plugin-proposal-class-properties": "^7.18.6",
- "@babel/plugin-proposal-class-static-block": "^7.18.6",
- "@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.18.9",
- "@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.2",
- "@babel/plugin-proposal-optional-catch-binding": "^7.18.6",
- "@babel/plugin-proposal-optional-chaining": "^7.18.9",
- "@babel/plugin-proposal-private-methods": "^7.18.6",
- "@babel/plugin-proposal-private-property-in-object": "^7.18.6",
- "@babel/plugin-proposal-unicode-property-regex": "^7.18.6",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.6.tgz",
+ "integrity": "sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.23.5",
+ "@babel/helper-compilation-targets": "^7.23.6",
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.23.5",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3",
+ "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3",
+ "@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.20.0",
+ "@babel/plugin-syntax-import-assertions": "^7.23.3",
+ "@babel/plugin-syntax-import-attributes": "^7.23.3",
+ "@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",
@@ -22804,89 +15230,141 @@
"@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.18.6",
- "@babel/plugin-transform-async-to-generator": "^7.18.6",
- "@babel/plugin-transform-block-scoped-functions": "^7.18.6",
- "@babel/plugin-transform-block-scoping": "^7.20.2",
- "@babel/plugin-transform-classes": "^7.20.2",
- "@babel/plugin-transform-computed-properties": "^7.18.9",
- "@babel/plugin-transform-destructuring": "^7.20.2",
- "@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.18.8",
- "@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.19.6",
- "@babel/plugin-transform-modules-commonjs": "^7.19.6",
- "@babel/plugin-transform-modules-systemjs": "^7.19.6",
- "@babel/plugin-transform-modules-umd": "^7.18.6",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1",
- "@babel/plugin-transform-new-target": "^7.18.6",
- "@babel/plugin-transform-object-super": "^7.18.6",
- "@babel/plugin-transform-parameters": "^7.20.1",
- "@babel/plugin-transform-property-literals": "^7.18.6",
- "@babel/plugin-transform-regenerator": "^7.18.6",
- "@babel/plugin-transform-reserved-words": "^7.18.6",
- "@babel/plugin-transform-shorthand-properties": "^7.18.6",
- "@babel/plugin-transform-spread": "^7.19.0",
- "@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.20.2",
- "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"
+ "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
+ "@babel/plugin-transform-arrow-functions": "^7.23.3",
+ "@babel/plugin-transform-async-generator-functions": "^7.23.4",
+ "@babel/plugin-transform-async-to-generator": "^7.23.3",
+ "@babel/plugin-transform-block-scoped-functions": "^7.23.3",
+ "@babel/plugin-transform-block-scoping": "^7.23.4",
+ "@babel/plugin-transform-class-properties": "^7.23.3",
+ "@babel/plugin-transform-class-static-block": "^7.23.4",
+ "@babel/plugin-transform-classes": "^7.23.5",
+ "@babel/plugin-transform-computed-properties": "^7.23.3",
+ "@babel/plugin-transform-destructuring": "^7.23.3",
+ "@babel/plugin-transform-dotall-regex": "^7.23.3",
+ "@babel/plugin-transform-duplicate-keys": "^7.23.3",
+ "@babel/plugin-transform-dynamic-import": "^7.23.4",
+ "@babel/plugin-transform-exponentiation-operator": "^7.23.3",
+ "@babel/plugin-transform-export-namespace-from": "^7.23.4",
+ "@babel/plugin-transform-for-of": "^7.23.6",
+ "@babel/plugin-transform-function-name": "^7.23.3",
+ "@babel/plugin-transform-json-strings": "^7.23.4",
+ "@babel/plugin-transform-literals": "^7.23.3",
+ "@babel/plugin-transform-logical-assignment-operators": "^7.23.4",
+ "@babel/plugin-transform-member-expression-literals": "^7.23.3",
+ "@babel/plugin-transform-modules-amd": "^7.23.3",
+ "@babel/plugin-transform-modules-commonjs": "^7.23.3",
+ "@babel/plugin-transform-modules-systemjs": "^7.23.3",
+ "@babel/plugin-transform-modules-umd": "^7.23.3",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
+ "@babel/plugin-transform-new-target": "^7.23.3",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4",
+ "@babel/plugin-transform-numeric-separator": "^7.23.4",
+ "@babel/plugin-transform-object-rest-spread": "^7.23.4",
+ "@babel/plugin-transform-object-super": "^7.23.3",
+ "@babel/plugin-transform-optional-catch-binding": "^7.23.4",
+ "@babel/plugin-transform-optional-chaining": "^7.23.4",
+ "@babel/plugin-transform-parameters": "^7.23.3",
+ "@babel/plugin-transform-private-methods": "^7.23.3",
+ "@babel/plugin-transform-private-property-in-object": "^7.23.4",
+ "@babel/plugin-transform-property-literals": "^7.23.3",
+ "@babel/plugin-transform-regenerator": "^7.23.3",
+ "@babel/plugin-transform-reserved-words": "^7.23.3",
+ "@babel/plugin-transform-shorthand-properties": "^7.23.3",
+ "@babel/plugin-transform-spread": "^7.23.3",
+ "@babel/plugin-transform-sticky-regex": "^7.23.3",
+ "@babel/plugin-transform-template-literals": "^7.23.3",
+ "@babel/plugin-transform-typeof-symbol": "^7.23.3",
+ "@babel/plugin-transform-unicode-escapes": "^7.23.3",
+ "@babel/plugin-transform-unicode-property-regex": "^7.23.3",
+ "@babel/plugin-transform-unicode-regex": "^7.23.3",
+ "@babel/plugin-transform-unicode-sets-regex": "^7.23.3",
+ "@babel/preset-modules": "0.1.6-no-external-plugins",
+ "babel-plugin-polyfill-corejs2": "^0.4.6",
+ "babel-plugin-polyfill-corejs3": "^0.8.5",
+ "babel-plugin-polyfill-regenerator": "^0.5.3",
+ "core-js-compat": "^3.31.0",
+ "semver": "^6.3.1"
+ },
+ "dependencies": {
+ "@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-polyfill-corejs3": {
+ "version": "0.8.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.7.tgz",
+ "integrity": "sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-define-polyfill-provider": "^0.4.4",
+ "core-js-compat": "^3.33.1"
+ }
+ },
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/preset-flow": {
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.23.3.tgz",
+ "integrity": "sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
+ "@babel/plugin-transform-flow-strip-types": "^7.23.3"
}
},
"@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==",
+ "version": "0.1.6-no-external-plugins",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
+ "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
"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/preset-react": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz",
- "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz",
+ "integrity": "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-transform-react-display-name": "^7.18.6",
- "@babel/plugin-transform-react-jsx": "^7.18.6",
- "@babel/plugin-transform-react-jsx-development": "^7.18.6",
- "@babel/plugin-transform-react-pure-annotations": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
+ "@babel/plugin-transform-react-display-name": "^7.23.3",
+ "@babel/plugin-transform-react-jsx": "^7.22.15",
+ "@babel/plugin-transform-react-jsx-development": "^7.22.5",
+ "@babel/plugin-transform-react-pure-annotations": "^7.23.3"
}
},
"@babel/preset-typescript": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz",
- "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==",
+ "version": "7.23.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz",
+ "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.18.6",
- "@babel/helper-validator-option": "^7.18.6",
- "@babel/plugin-transform-typescript": "^7.18.6"
+ "@babel/helper-plugin-utils": "^7.22.5",
+ "@babel/helper-validator-option": "^7.22.15",
+ "@babel/plugin-syntax-jsx": "^7.23.3",
+ "@babel/plugin-transform-modules-commonjs": "^7.23.3",
+ "@babel/plugin-transform-typescript": "^7.23.3"
}
},
"@babel/register": {
- "version": "7.18.9",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.18.9.tgz",
- "integrity": "sha512-ZlbnXDcNYHMR25ITwwNKT88JiaukkdVj/nG7r3wnuXkOTHc60Uy05PwMCPre0hSkY68E6zK3xz+vUJSP2jWmcw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.22.15.tgz",
+ "integrity": "sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==",
"dev": true,
"requires": {
"clone-deep": "^4.0.1",
@@ -22894,8 +15372,95 @@
"make-dir": "^2.1.0",
"pirates": "^4.0.5",
"source-map-support": "^0.5.16"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
+ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^2.0.0",
+ "pkg-dir": "^3.0.0"
+ }
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "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,
+ "requires": {
+ "pify": "^4.0.1",
+ "semver": "^5.6.0"
+ }
+ },
+ "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": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "semver": {
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
+ "dev": true
+ }
}
},
+ "@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.20.7",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz",
@@ -22906,55 +15471,45 @@
}
},
"@babel/template": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
- "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
+ "version": "7.22.15",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
+ "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7"
+ "@babel/code-frame": "^7.22.13",
+ "@babel/parser": "^7.22.15",
+ "@babel/types": "^7.22.15"
}
},
"@babel/traverse": {
- "version": "7.20.12",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz",
- "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.18.6",
- "@babel/generator": "^7.20.7",
- "@babel/helper-environment-visitor": "^7.18.9",
- "@babel/helper-function-name": "^7.19.0",
- "@babel/helper-hoist-variables": "^7.18.6",
- "@babel/helper-split-export-declaration": "^7.18.6",
- "@babel/parser": "^7.20.7",
- "@babel/types": "^7.20.7",
- "debug": "^4.1.0",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.6.tgz",
+ "integrity": "sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.23.5",
+ "@babel/generator": "^7.23.6",
+ "@babel/helper-environment-visitor": "^7.22.20",
+ "@babel/helper-function-name": "^7.23.0",
+ "@babel/helper-hoist-variables": "^7.22.5",
+ "@babel/helper-split-export-declaration": "^7.22.6",
+ "@babel/parser": "^7.23.6",
+ "@babel/types": "^7.23.6",
+ "debug": "^4.3.1",
"globals": "^11.1.0"
}
},
"@babel/types": {
- "version": "7.20.7",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
- "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"requires": {
- "@babel/helper-string-parser": "^7.19.4",
- "@babel/helper-validator-identifier": "^7.19.1",
+ "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
}
},
- "@cnakazawa/watch": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.4.tgz",
- "integrity": "sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ==",
- "dev": true,
- "requires": {
- "exec-sh": "^0.3.2",
- "minimist": "^1.2.0"
- }
- },
"@colors/colors": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz",
@@ -23033,6 +15588,207 @@
"integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==",
"dev": true
},
+ "@emotion/use-insertion-effect-with-fallbacks": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.0.1.tgz",
+ "integrity": "sha512-jT/qyKZ9rzLErtrjGgdkMBn2OP8wl0G3sQlBb3YPryvKHsjvINUhVaPFfP+fpBcOkmrVOVEEHQFJ7nbj2TH2gw==",
+ "dev": true,
+ "requires": {}
+ },
+ "@esbuild/android-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
+ "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz",
+ "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/android-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz",
+ "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz",
+ "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/darwin-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz",
+ "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz",
+ "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/freebsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz",
+ "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz",
+ "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz",
+ "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz",
+ "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-loong64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz",
+ "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-mips64el": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz",
+ "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-ppc64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz",
+ "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-riscv64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz",
+ "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-s390x": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz",
+ "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/linux-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz",
+ "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/netbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/openbsd-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz",
+ "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/sunos-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz",
+ "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-arm64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz",
+ "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-ia32": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz",
+ "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==",
+ "dev": true,
+ "optional": true
+ },
+ "@esbuild/win32-x64": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz",
+ "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@fal-works/esbuild-plugin-global-externals": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/@fal-works/esbuild-plugin-global-externals/-/esbuild-plugin-global-externals-2.1.2.tgz",
+ "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==",
+ "dev": true
+ },
+ "@floating-ui/core": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.5.2.tgz",
+ "integrity": "sha512-Ii3MrfY/GAIN3OhXNzpCKaLxHQfJF9qvwq/kEJYdqDxeIHa01K8sldugal6TmeeXl+WMvhv9cnVzUTaFFJF09A==",
+ "dev": true,
+ "requires": {
+ "@floating-ui/utils": "^0.1.3"
+ }
+ },
+ "@floating-ui/dom": {
+ "version": "1.5.3",
+ "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.5.3.tgz",
+ "integrity": "sha512-ClAbQnEqJAKCJOEbbLo5IUlZHkNszqhuxS4fHAVxRPXPya6Ysf2G8KypnYcOTpx6I8xcgF9bbHb6g/2KpbV8qA==",
+ "dev": true,
+ "requires": {
+ "@floating-ui/core": "^1.4.2",
+ "@floating-ui/utils": "^0.1.3"
+ }
+ },
+ "@floating-ui/react-dom": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.4.tgz",
+ "integrity": "sha512-CF8k2rgKeh/49UrnIBs4BdxPUV6vize/Db1d/YbCLyp9GiVZ0BEwf5AiDSxJRCr6yOkGqTFHtmrULxkEfYZ7dQ==",
+ "dev": true,
+ "requires": {
+ "@floating-ui/dom": "^1.5.1"
+ }
+ },
+ "@floating-ui/utils": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.1.6.tgz",
+ "integrity": "sha512-OfX7E2oUDYxtBvsuS4e/jSn4Q9Qb6DzgeYtsAdkPZ47znpoNsMgZw0+tVijiv3uGNR6dgNlty6r9rzIzHjtd/A==",
+ "dev": true
+ },
"@fluent/bundle": {
"version": "0.17.1",
"resolved": "https://registry.npmjs.org/@fluent/bundle/-/bundle-0.17.1.tgz",
@@ -23048,18 +15804,43 @@
"cached-iterable": "^0.3"
}
},
- "@gar/promisify": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
- "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
- "dev": true
- },
"@github/catalyst": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/@github/catalyst/-/catalyst-1.6.0.tgz",
"integrity": "sha512-u8A+DameixqpeyHzvnJWTGj+wfiskQOYHzSiJscCWVfMkIT3rxnbHMtGh3lMthaRY21nbUOK71WcsCnCrXhBJQ==",
"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
+ },
+ "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"
+ }
+ }
+ }
+ },
"@istanbuljs/load-nyc-config": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
@@ -23118,27 +15899,36 @@
"integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
"dev": true
},
+ "@jest/schemas": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
+ "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
+ "dev": true,
+ "requires": {
+ "@sinclair/typebox": "^0.27.8"
+ }
+ },
"@jest/transform": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-26.6.2.tgz",
- "integrity": "sha512-E9JjhUgNzvuQ+vVAL21vlyfy12gP0GhazGgJC4h6qUt1jSdUXGWJ1wfu/X7Sd8etSgxV4ovT1pb9v5D6QW4XgA==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz",
+ "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==",
"dev": true,
"requires": {
- "@babel/core": "^7.1.0",
- "@jest/types": "^26.6.2",
- "babel-plugin-istanbul": "^6.0.0",
+ "@babel/core": "^7.11.6",
+ "@jest/types": "^29.6.3",
+ "@jridgewell/trace-mapping": "^0.3.18",
+ "babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
- "convert-source-map": "^1.4.0",
- "fast-json-stable-stringify": "^2.0.0",
- "graceful-fs": "^4.2.4",
- "jest-haste-map": "^26.6.2",
- "jest-regex-util": "^26.0.0",
- "jest-util": "^26.6.2",
- "micromatch": "^4.0.2",
- "pirates": "^4.0.1",
+ "convert-source-map": "^2.0.0",
+ "fast-json-stable-stringify": "^2.1.0",
+ "graceful-fs": "^4.2.9",
+ "jest-haste-map": "^29.7.0",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "pirates": "^4.0.4",
"slash": "^3.0.0",
- "source-map": "^0.6.1",
- "write-file-atomic": "^3.0.0"
+ "write-file-atomic": "^4.0.2"
},
"dependencies": {
"ansi-styles": {
@@ -23193,15 +15983,16 @@
}
},
"@jest/types": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-26.6.2.tgz",
- "integrity": "sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz",
+ "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==",
"dev": true,
"requires": {
+ "@jest/schemas": "^29.6.3",
"@types/istanbul-lib-coverage": "^2.0.0",
"@types/istanbul-reports": "^3.0.0",
"@types/node": "*",
- "@types/yargs": "^15.0.0",
+ "@types/yargs": "^17.0.8",
"chalk": "^4.0.0"
},
"dependencies": {
@@ -23302,117 +16093,63 @@
}
},
"@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==",
+ "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.17",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz",
- "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==",
- "dev": true,
- "requires": {
- "@jridgewell/resolve-uri": "3.1.0",
- "@jridgewell/sourcemap-codec": "1.4.14"
- }
- },
- "@mdx-js/mdx": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz",
- "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==",
- "dev": true,
- "requires": {
- "@babel/core": "7.12.9",
- "@babel/plugin-syntax-jsx": "7.12.1",
- "@babel/plugin-syntax-object-rest-spread": "7.8.3",
- "@mdx-js/util": "1.6.22",
- "babel-plugin-apply-mdx-type-prop": "1.6.22",
- "babel-plugin-extract-import-names": "1.6.22",
- "camelcase-css": "2.0.1",
- "detab": "2.0.4",
- "hast-util-raw": "6.0.1",
- "lodash.uniq": "4.5.0",
- "mdast-util-to-hast": "10.0.1",
- "remark-footnotes": "2.0.0",
- "remark-mdx": "1.6.22",
- "remark-parse": "8.0.3",
- "remark-squeeze-paragraphs": "4.0.0",
- "style-to-object": "0.3.0",
- "unified": "9.2.0",
- "unist-builder": "2.0.3",
- "unist-util-visit": "2.0.3"
- },
- "dependencies": {
- "@babel/core": {
- "version": "7.12.9",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz",
- "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.5",
- "@babel/parser": "^7.12.7",
- "@babel/template": "^7.12.7",
- "@babel/traverse": "^7.12.9",
- "@babel/types": "^7.12.7",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
- "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true
- }
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
+ "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.1.0",
+ "@jridgewell/sourcemap-codec": "^1.4.14"
}
},
- "@mdx-js/util": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz",
- "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==",
+ "@juggle/resize-observer": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
+ "integrity": "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==",
"dev": true
},
- "@mrmlnc/readdir-enhanced": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
- "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==",
+ "@lit-labs/ssr-dom-shim": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.1.2.tgz",
+ "integrity": "sha512-jnOD+/+dSrfTWYfSXBXlo5l5f0q1UuJo3tkbMDCYA2lKUYq79jaxqtGEvnRoh049nt1vdo1+45RinipU6FGY2g==",
+ "dev": true,
+ "peer": true
+ },
+ "@lit/reactive-element": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.2.tgz",
+ "integrity": "sha512-SVOwLAWUQg3Ji1egtOt1UiFe4zdDpnWHyc5qctSceJ5XIu0Uc76YmGpIjZgx9YJ0XtdW0Jm507sDvjOu+HnB8w==",
"dev": true,
+ "peer": true,
"requires": {
- "call-me-maybe": "^1.0.1",
- "glob-to-regexp": "^0.3.0"
- },
- "dependencies": {
- "glob-to-regexp": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
- "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==",
- "dev": true
- }
+ "@lit-labs/ssr-dom-shim": "^1.1.2"
+ }
+ },
+ "@mdx-js/react": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-2.3.0.tgz",
+ "integrity": "sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==",
+ "dev": true,
+ "requires": {
+ "@types/mdx": "^2.0.0",
+ "@types/react": ">=16"
+ }
+ },
+ "@ndelangen/get-tarball": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/@ndelangen/get-tarball/-/get-tarball-3.0.9.tgz",
+ "integrity": "sha512-9JKTEik4vq+yGosHYhZ1tiH/3WpUS0Nh0kej4Agndhox8pAdWhEx5knFVRcb/ya9knCRCs1rPxNrSXTDdfVqpA==",
+ "dev": true,
+ "requires": {
+ "gunzip-maybe": "^1.4.2",
+ "pump": "^3.0.0",
+ "tar-fs": "^2.1.1"
}
},
"@nodelib/fs.scandir": {
@@ -23441,1851 +16178,550 @@
"fastq": "^1.6.0"
}
},
- "@npmcli/fs": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
- "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
+ "@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
+ },
+ "@radix-ui/number": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.0.1.tgz",
+ "integrity": "sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==",
"dev": true,
"requires": {
- "@gar/promisify": "^1.0.1",
- "semver": "^7.3.5"
- },
- "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.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
- "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
- }
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/primitive": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.0.1.tgz",
+ "integrity": "sha512-yQ8oGX2GVsEYMWGxcovu1uGWPCxV5BFfeeYxqPmuAzUyLT9qmaMXSAhXpb0WrspIeqYzdJpkh2vHModJPgRIaw==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10"
}
},
- "@npmcli/move-file": {
+ "@radix-ui/react-arrow": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.0.3.tgz",
+ "integrity": "sha512-wSP+pHsB/jQRaL6voubsQ/ZlrGBHHrOjmBnr19hxYgtS0WvAFwZhK2WP/YY5yF9uKECCEEDGxuLxq1NBK51wFA==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
+ }
+ },
+ "@radix-ui/react-collection": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.0.3.tgz",
+ "integrity": "sha512-3SzW+0PW7yBBoQlT8wNcGtaxaD0XSu0uLUFgrtHY08Acx05TaHaOmVLR73c0j/cqpDy53KBMO7s0dx2wmOIDIA==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-slot": "1.0.2"
+ }
+ },
+ "@radix-ui/react-compose-refs": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.0.1.tgz",
+ "integrity": "sha512-fDSBgd44FKHa1FRMU59qBMPFcl2PZE+2nmqunj+BWFyYYjnhIDWL2ItDs3rrbJDQOtzt5nIebLCQc4QRfz6LJw==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-context": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.0.1.tgz",
+ "integrity": "sha512-ebbrdFoYTcuZ0v4wG5tedGnp9tzcV8awzsxYph7gXUyvnNLuTIcCk1q17JEbnVhXAKG9oX3KtchwiMIAYp9NLg==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-direction": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.0.1.tgz",
+ "integrity": "sha512-RXcvnXgyvYvBEOhCBuddKecVkoMiI10Jcm5cTI7abJRAHYfFxeu+FBQs/DvdxSYucxR5mna0dNsL6QFlds5TMA==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-dismissable-layer": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.0.4.tgz",
+ "integrity": "sha512-7UpBa/RKMoHJYjie1gkF1DlK8l1fdU/VKDpoS3rCCo8YBJR294GwcEHyxHw72yvphJ7ld0AXEcSLAzY2F/WyCg==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-escape-keydown": "1.0.3"
+ }
+ },
+ "@radix-ui/react-focus-guards": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.0.1.tgz",
+ "integrity": "sha512-Rect2dWbQ8waGzhMavsIbmSVCgYxkXLxxR3ZvCX79JOglzdEy4JXMb98lq4hPxUbLr77nP0UOGf4rcMU+s1pUA==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10"
+ }
+ },
+ "@radix-ui/react-focus-scope": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.0.3.tgz",
+ "integrity": "sha512-upXdPfqI4islj2CslyfUBNlaJCPybbqRHAi1KER7Isel9Q2AtSJ0zRBZv8mWQiFXD2nyAJ4BhC3yXgZ6kMBSrQ==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
+ }
+ },
+ "@radix-ui/react-id": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.0.1.tgz",
+ "integrity": "sha512-tI7sT/kqYp8p96yGWY1OAnLHrqDgzHefRBKQ2YAkBS5ja7QLcZ9Z/uY7bEjPUatf8RomoXM8/1sMj1IJaE5UzQ==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-layout-effect": "1.0.1"
+ }
+ },
+ "@radix-ui/react-popper": {
"version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
- "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.1.2.tgz",
+ "integrity": "sha512-1CnGGfFi/bbqtJZZ0P/NQY20xdG3E0LALJaLUEoKwPLwl6PPPfbeiCqMVQnhoFRAxjJj4RpBRJzDmUgsex2tSg==",
"dev": true,
"requires": {
- "mkdirp": "^1.0.4",
- "rimraf": "^3.0.2"
+ "@babel/runtime": "^7.13.10",
+ "@floating-ui/react-dom": "^2.0.0",
+ "@radix-ui/react-arrow": "1.0.3",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-layout-effect": "1.0.1",
+ "@radix-ui/react-use-rect": "1.0.1",
+ "@radix-ui/react-use-size": "1.0.1",
+ "@radix-ui/rect": "1.0.1"
}
},
- "@storybook/addon-a11y": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-6.5.15.tgz",
- "integrity": "sha512-4IgsCU7mrfooyGSgvyQdkZVu2iGJZqZ+2GDDIzzeIs1yXvuRy6QiHYNzesSrgeL52ykDXaPGuzKu2pcMKfDQHA==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/theming": "6.5.15",
- "axe-core": "^4.2.0",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "react-sizeme": "^3.0.1",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "@radix-ui/react-portal": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.0.3.tgz",
+ "integrity": "sha512-xLYZeHrWoPmA5mEKEfZZevoVRK/Q43GfzRXkWV6qawIWWK8t6ifIiLQdd7rmQ4Vk1bmI21XhqF9BN3jWf+phpA==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
}
},
- "@storybook/addon-actions": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.15.tgz",
- "integrity": "sha512-cnLzVK1S+EydFDSuvxMmMAxVqNXijBGdV9QTgsu6ys5sOkoiXRETKZmxuN8/ZRbkfc4N+1KAylSCZOOHzBQTBQ==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "polished": "^4.2.2",
- "prop-types": "^15.7.2",
- "react-inspector": "^5.1.0",
- "regenerator-runtime": "^0.13.7",
- "telejson": "^6.0.8",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "uuid-browser": "^3.1.0"
- },
- "dependencies": {
- "react-inspector": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/react-inspector/-/react-inspector-5.1.1.tgz",
- "integrity": "sha512-GURDaYzoLbW8pMGXwYPDBIv6nqei4kK7LPRZ9q9HCZF54wqXz/dnylBp/kfE9XmekBhHvLDdcYeyIwSrvtOiWg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.0.0",
- "is-dom": "^1.0.0",
- "prop-types": "^15.0.0"
- }
- }
+ "@radix-ui/react-primitive": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-1.0.3.tgz",
+ "integrity": "sha512-yi58uVyoAcK/Nq1inRY56ZSjKypBNKTa/1mcL8qdl6oJeEaDbOldlzrGn7P6Q3Id5d+SYNGc5AJgc4vGhjs5+g==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-slot": "1.0.2"
}
},
- "@storybook/addon-backgrounds": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.15.tgz",
- "integrity": "sha512-9ddB3QIL8mRurf7TvYG1P9i1sW0b8Iik3kGlHggKogHER9WJPzbiUeH0XDjkASSa4rMCZdYn5CZKNkIAoJ2jdA==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "memoizerific": "^1.11.3",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "@radix-ui/react-roving-focus": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.0.4.tgz",
+ "integrity": "sha512-2mUg5Mgcu001VkGy+FfzZyzbmuUWzgWkj3rvv4yu+mLw03+mTzbxZHvfcGyFp2b8EkQeMkpRQ5FiA2Vr2O6TeQ==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-collection": "1.0.3",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-direction": "1.0.1",
+ "@radix-ui/react-id": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-controllable-state": "1.0.1"
}
},
- "@storybook/addon-controls": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-6.5.15.tgz",
- "integrity": "sha512-q5y0TvD0stvQoJZ2PnFmmKIRNSOI4/k2NKyZq//J2cBUBcP1reYlFxdsNwLZWmAFpSIkc2+nsliEzNxU1WByoA==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/node-logger": "6.5.15",
- "@storybook/store": "6.5.15",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "lodash": "^4.17.21",
- "ts-dedent": "^2.0.0"
+ "@radix-ui/react-select": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-1.2.2.tgz",
+ "integrity": "sha512-zI7McXr8fNaSrUY9mZe4x/HC0jTLY9fWNhO1oLWYMQGDXuV4UCivIGTxwioSzO0ZCYX9iSLyWmAh/1TOmX3Cnw==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/number": "1.0.1",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-collection": "1.0.3",
+ "@radix-ui/react-compose-refs": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-direction": "1.0.1",
+ "@radix-ui/react-dismissable-layer": "1.0.4",
+ "@radix-ui/react-focus-guards": "1.0.1",
+ "@radix-ui/react-focus-scope": "1.0.3",
+ "@radix-ui/react-id": "1.0.1",
+ "@radix-ui/react-popper": "1.1.2",
+ "@radix-ui/react-portal": "1.0.3",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-slot": "1.0.2",
+ "@radix-ui/react-use-callback-ref": "1.0.1",
+ "@radix-ui/react-use-controllable-state": "1.0.1",
+ "@radix-ui/react-use-layout-effect": "1.0.1",
+ "@radix-ui/react-use-previous": "1.0.1",
+ "@radix-ui/react-visually-hidden": "1.0.3",
+ "aria-hidden": "^1.1.1",
+ "react-remove-scroll": "2.5.5"
+ }
+ },
+ "@radix-ui/react-separator": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.0.3.tgz",
+ "integrity": "sha512-itYmTy/kokS21aiV5+Z56MZB54KrhPgn6eHDKkFeOLR34HMN2s8PaN47qZZAGnvupcjxHaFZnW4pQEh0BvvVuw==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
}
},
- "@storybook/addon-docs": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-6.5.15.tgz",
- "integrity": "sha512-k3LAu+wVp6pNhfh6B1soCRl6+7sNTNxtqy6WTrIeVJVCGbXbyc5s7gQ48gJ4WAk6meoDEZbypiP4NK1El03YLg==",
- "dev": true,
- "requires": {
- "@babel/plugin-transform-react-jsx": "^7.12.12",
- "@babel/preset-env": "^7.12.11",
- "@jest/transform": "^26.6.2",
- "@mdx-js/react": "^1.6.22",
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/docs-tools": "6.5.15",
- "@storybook/mdx1-csf": "^0.0.1",
- "@storybook/node-logger": "6.5.15",
- "@storybook/postinstall": "6.5.15",
- "@storybook/preview-web": "6.5.15",
- "@storybook/source-loader": "6.5.15",
- "@storybook/store": "6.5.15",
- "@storybook/theming": "6.5.15",
- "babel-loader": "^8.0.0",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "regenerator-runtime": "^0.13.7",
- "remark-external-links": "^8.0.0",
- "remark-slug": "^6.0.0",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
- },
- "dependencies": {
- "@mdx-js/react": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz",
- "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==",
- "dev": true,
- "requires": {}
- }
+ "@radix-ui/react-slot": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.0.2.tgz",
+ "integrity": "sha512-YeTpuq4deV+6DusvVUW4ivBgnkHwECUu0BiN43L5UCDFgdhsRUWAghhTF5MbvNTPzmiFOx90asDSUjWuCNapwg==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-compose-refs": "1.0.1"
}
},
- "@storybook/addon-essentials": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-6.5.15.tgz",
- "integrity": "sha512-m3EY6BhUk6Z9Et7P5wGaRGNoEDHzJIOsLbGS/4IXvIoDfrqmNIilqUQl8kfDqpVdBSFprvpacHpKpLosu9H37w==",
- "dev": true,
- "requires": {
- "@storybook/addon-actions": "6.5.15",
- "@storybook/addon-backgrounds": "6.5.15",
- "@storybook/addon-controls": "6.5.15",
- "@storybook/addon-docs": "6.5.15",
- "@storybook/addon-measure": "6.5.15",
- "@storybook/addon-outline": "6.5.15",
- "@storybook/addon-toolbars": "6.5.15",
- "@storybook/addon-viewport": "6.5.15",
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "core-js": "^3.8.2",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
+ "@radix-ui/react-toggle": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.0.3.tgz",
+ "integrity": "sha512-Pkqg3+Bc98ftZGsl60CLANXQBBQ4W3mTFS9EJvNxKMZ7magklKV69/id1mlAlOFDDfHvlCms0fx8fA4CMKDJHg==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-use-controllable-state": "1.0.1"
}
},
- "@storybook/addon-links": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-6.5.15.tgz",
- "integrity": "sha512-L7Q3u/xEUuy1uPq8ttjDfvDj19Hr2Crq/Us0RfowfGAAzOb7fCoiUJDP37ADtRUlCYyuKM5V/nHxN8eGpWtugw==",
+ "@radix-ui/react-toggle-group": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.0.4.tgz",
+ "integrity": "sha512-Uaj/M/cMyiyT9Bx6fOZO0SAG4Cls0GptBWiBmBxofmDbNVnYYoyRWj/2M/6VCi/7qcXFWnHhRUfdfZFvvkuu8A==",
"dev": true,
"requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/router": "6.5.15",
- "@types/qs": "^6.9.5",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "prop-types": "^15.7.2",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-direction": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-roving-focus": "1.0.4",
+ "@radix-ui/react-toggle": "1.0.3",
+ "@radix-ui/react-use-controllable-state": "1.0.1"
}
},
- "@storybook/addon-measure": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.5.15.tgz",
- "integrity": "sha512-j77WX/v6qpWK8ZuYscWLIc+Am4/WOJRsVgyXLIw1EZIviQsjoXPo7mmyoTneEIbbHfPtWlLRbtmkjh8DAVDrCA==",
+ "@radix-ui/react-toolbar": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.0.4.tgz",
+ "integrity": "sha512-tBgmM/O7a07xbaEkYJWYTXkIdU/1pW4/KZORR43toC/4XWyBCURK0ei9kMUdp+gTPPKBgYLxXmRSH1EVcIDp8Q==",
"dev": true,
"requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "core-js": "^3.8.2",
- "global": "^4.4.0"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/primitive": "1.0.1",
+ "@radix-ui/react-context": "1.0.1",
+ "@radix-ui/react-direction": "1.0.1",
+ "@radix-ui/react-primitive": "1.0.3",
+ "@radix-ui/react-roving-focus": "1.0.4",
+ "@radix-ui/react-separator": "1.0.3",
+ "@radix-ui/react-toggle-group": "1.0.4"
}
},
- "@storybook/addon-outline": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-6.5.15.tgz",
- "integrity": "sha512-8yGEZQOYypnliU3rsakoZlgT4Pkq8iOhX9JclVXZL/fJMQWFQGCsXqlLaRn8sx7qsa+21PPxY5bd2+Hv/Au4zQ==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
+ "@radix-ui/react-use-callback-ref": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.0.1.tgz",
+ "integrity": "sha512-D94LjX4Sp0xJFVaoQOd3OO9k7tpBYNOXdVhkltUbGv2Qb9OXdrg/CpsjlZv7ia14Sylv398LswWBVVu5nqKzAQ==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10"
}
},
- "@storybook/addon-toolbars": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-6.5.15.tgz",
- "integrity": "sha512-btwDTgElmaaT0dBRASABbTpq6m1UiQXQmLUmxfjLxVC3I2SK5tyJKbPQ2hVLFAQHK4cQn4u45BxdZ5LDpJ830A==",
+ "@radix-ui/react-use-controllable-state": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.0.1.tgz",
+ "integrity": "sha512-Svl5GY5FQeN758fWKrjM6Qb7asvXeiZltlT4U2gVfl8Gx5UAv2sMR0LWo8yhsIZh2oQ0eFdZ59aoOOMV7b47VA==",
"dev": true,
"requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "regenerator-runtime": "^0.13.7"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
}
},
- "@storybook/addon-viewport": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-6.5.15.tgz",
- "integrity": "sha512-oOiVzgFMlTnzPLVoHWQNzWdmpksrUyT6Aq8ZOyBPNMQ0RN2doIgFr7W53nZ1OBB5cPQx9q2FgWwzJ7Tawo+iVA==",
- "dev": true,
- "requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "memoizerific": "^1.11.3",
- "prop-types": "^15.7.2",
- "regenerator-runtime": "^0.13.7"
- }
- },
- "@storybook/addons": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.15.tgz",
- "integrity": "sha512-xT31SuSX+kYGyxCNK2nqL7WTxucs3rSmhiCLovJcUjYk+QquV3c2c53Ki7lwwdDbzfXFcNAe0HJ4hoTN4jhn0Q==",
- "dev": true,
- "requires": {
- "@storybook/api": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/router": "6.5.15",
- "@storybook/theming": "6.5.15",
- "@types/webpack-env": "^1.16.0",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "regenerator-runtime": "^0.13.7"
- }
- },
- "@storybook/api": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.15.tgz",
- "integrity": "sha512-BBE0KXKvj1/3jTghbIoWfrcDM0t+xO7EYtWWAXD6XlhGsZVD2Dy82Z52ONyLulMDRpMWl0OYy3h6A1YnFUH25w==",
- "dev": true,
- "requires": {
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/router": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "regenerator-runtime": "^0.13.7",
- "store2": "^2.12.0",
- "telejson": "^6.0.8",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "@radix-ui/react-use-escape-keydown": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.0.3.tgz",
+ "integrity": "sha512-vyL82j40hcFicA+M4Ex7hVkB9vHgSse1ZWomAqV2Je3RleKGO5iM8KMOEtfoSB0PnIelMd2lATjTGMYqN5ylTg==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-callback-ref": "1.0.1"
}
},
- "@storybook/builder-webpack4": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/builder-webpack4/-/builder-webpack4-6.5.15.tgz",
- "integrity": "sha512-1ZkMECUUdiYplhlgyUF5fqW3XU7eWNDJbuPUguyDOeidgJ111WZzBcLuKj+SNrzdNNgXwROCWAFybiNnX33YHQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.10",
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/channel-postmessage": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "@storybook/preview-web": "6.5.15",
- "@storybook/router": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@storybook/store": "6.5.15",
- "@storybook/theming": "6.5.15",
- "@storybook/ui": "6.5.15",
- "@types/node": "^14.0.10 || ^16.0.0",
- "@types/webpack": "^4.41.26",
- "autoprefixer": "^9.8.6",
- "babel-loader": "^8.0.0",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
- "core-js": "^3.8.2",
- "css-loader": "^3.6.0",
- "file-loader": "^6.2.0",
- "find-up": "^5.0.0",
- "fork-ts-checker-webpack-plugin": "^4.1.6",
- "glob": "^7.1.6",
- "glob-promise": "^3.4.0",
- "global": "^4.4.0",
- "html-webpack-plugin": "^4.0.0",
- "pnp-webpack-plugin": "1.6.4",
- "postcss": "^7.0.36",
- "postcss-flexbugs-fixes": "^4.2.1",
- "postcss-loader": "^4.2.0",
- "raw-loader": "^4.0.2",
- "stable": "^0.1.8",
- "style-loader": "^1.3.0",
- "terser-webpack-plugin": "^4.2.3",
- "ts-dedent": "^2.0.0",
- "url-loader": "^4.1.1",
- "util-deprecate": "^1.0.2",
- "webpack": "4",
- "webpack-dev-middleware": "^3.7.3",
- "webpack-filter-warnings-plugin": "^1.2.1",
- "webpack-hot-middleware": "^2.25.1",
- "webpack-virtual-modules": "^0.2.2"
- },
- "dependencies": {
- "@types/html-minifier-terser": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz",
- "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==",
- "dev": true
- },
- "@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
- "dev": true,
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
- "dev": true,
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
- "dev": true
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/helper-wasm-section": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-opt": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "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"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "clean-css": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz",
- "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==",
- "dev": true,
- "requires": {
- "source-map": "~0.6.0"
- }
- },
- "commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true
- },
- "css-loader": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
- "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "cssesc": "^3.0.0",
- "icss-utils": "^4.1.1",
- "loader-utils": "^1.2.3",
- "normalize-path": "^3.0.0",
- "postcss": "^7.0.32",
- "postcss-modules-extract-imports": "^2.0.0",
- "postcss-modules-local-by-default": "^3.0.2",
- "postcss-modules-scope": "^2.2.0",
- "postcss-modules-values": "^3.0.0",
- "postcss-value-parser": "^4.1.0",
- "schema-utils": "^2.7.0",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- }
- }
- },
- "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"
- }
- },
- "enhanced-resolve": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
- "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "dependencies": {
- "memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- }
- }
- },
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "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"
- }
- },
- "fork-ts-checker-webpack-plugin": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
- "integrity": "sha512-DUxuQaKoqfNne8iikd14SAkh5uw4+8vNifp6gmA73yYNS6ywLIWSLD/n/mBzHQRpW3J7rbATEakmiA8JvkTyZw==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.5.5",
- "chalk": "^2.4.1",
- "micromatch": "^3.1.10",
- "minimatch": "^3.0.4",
- "semver": "^5.6.0",
- "tapable": "^1.0.0",
- "worker-rpc": "^0.1.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
- "html-minifier-terser": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
- "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
- "dev": true,
- "requires": {
- "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"
- },
- "dependencies": {
- "terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- },
- "dependencies": {
- "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
- }
- }
- }
- }
- },
- "html-webpack-plugin": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz",
- "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==",
- "dev": true,
- "requires": {
- "@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"
- },
- "dependencies": {
- "loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
- "dev": true
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "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"
- }
- },
- "mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "dev": true
- },
- "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,
- "requires": {
- "minimist": "^1.2.6"
- }
- },
- "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"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "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"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- }
- }
- },
- "pretty-error": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
- "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.20",
- "renderkid": "^2.0.4"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "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"
- }
- },
- "renderkid": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz",
- "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==",
- "dev": true,
- "requires": {
- "css-select": "^4.1.3",
- "dom-converter": "^0.2.0",
- "htmlparser2": "^6.1.0",
- "lodash": "^4.17.21",
- "strip-ansi": "^3.0.1"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "serialize-javascript": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
- "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.5.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"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "style-loader": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz",
- "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==",
- "dev": true,
- "requires": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^2.7.0"
- }
- },
- "terser-webpack-plugin": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz",
- "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==",
- "dev": true,
- "requires": {
- "cacache": "^15.0.5",
- "find-cache-dir": "^3.3.1",
- "jest-worker": "^26.5.0",
- "p-limit": "^3.0.2",
- "schema-utils": "^3.0.0",
- "serialize-javascript": "^5.0.1",
- "source-map": "^0.6.1",
- "terser": "^5.3.4",
- "webpack-sources": "^1.4.3"
- },
- "dependencies": {
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
- "dev": true,
- "requires": {
- "chokidar": "^3.4.1",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0",
- "watchpack-chokidar2": "^2.0.1"
- }
- },
- "webpack": {
- "version": "4.46.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
- "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
- "dev": true,
- "requires": {
- "@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"
- },
- "dependencies": {
- "cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.5",
- "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"
- }
- },
- "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
- },
- "find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "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,
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- }
- },
- "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": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- }
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- }
- },
- "terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
- "dev": true,
- "requires": {
- "cacache": "^12.0.2",
- "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"
- }
- }
- }
- },
- "webpack-dev-middleware": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
- "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==",
- "dev": true,
- "requires": {
- "memory-fs": "^0.4.1",
- "mime": "^2.4.4",
- "mkdirp": "^0.5.1",
- "range-parser": "^1.2.1",
- "webpack-log": "^2.0.0"
- }
- },
- "webpack-filter-warnings-plugin": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/webpack-filter-warnings-plugin/-/webpack-filter-warnings-plugin-1.2.1.tgz",
- "integrity": "sha512-Ez6ytc9IseDMLPo0qCuNNYzgtUl8NovOqjIq4uAU8LTD4uoa1w1KpZyyzFtLTEMZpkkOkLfL9eN+KGYdk1Qtwg==",
- "dev": true,
- "requires": {}
- },
- "webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
- },
- "webpack-virtual-modules": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz",
- "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==",
- "dev": true,
- "requires": {
- "debug": "^3.0.0"
- }
- }
+ "@radix-ui/react-use-layout-effect": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.0.1.tgz",
+ "integrity": "sha512-v/5RegiJWYdoCvMnITBkNNx6bCj20fiaJnWtRkU18yITptraXjffz5Qbn05uOiQnOvi+dbkznkoaMltz1GnszQ==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10"
}
},
- "@storybook/builder-webpack5": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-6.5.15.tgz",
- "integrity": "sha512-BnSoAmI02pvbGBSyzCx+voXb/d5EopQ78zx/lYv4CeOspBFOYEfGvAgYHILFo04V12S2/k8aSOc/tCYw5AqPtw==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.10",
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/channel-postmessage": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "@storybook/preview-web": "6.5.15",
- "@storybook/router": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@storybook/store": "6.5.15",
- "@storybook/theming": "6.5.15",
- "@types/node": "^14.0.10 || ^16.0.0",
- "babel-loader": "^8.0.0",
- "babel-plugin-named-exports-order": "^0.0.2",
- "browser-assert": "^1.2.1",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
- "core-js": "^3.8.2",
- "css-loader": "^5.0.1",
- "fork-ts-checker-webpack-plugin": "^6.0.4",
- "glob": "^7.1.6",
- "glob-promise": "^3.4.0",
- "html-webpack-plugin": "^5.0.0",
- "path-browserify": "^1.0.1",
- "process": "^0.11.10",
- "stable": "^0.1.8",
- "style-loader": "^2.0.0",
- "terser-webpack-plugin": "^5.0.3",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "webpack": "^5.9.0",
- "webpack-dev-middleware": "^4.1.0",
- "webpack-hot-middleware": "^2.25.1",
- "webpack-virtual-modules": "^0.4.1"
- },
- "dependencies": {
- "@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- }
+ "@radix-ui/react-use-previous": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.0.1.tgz",
+ "integrity": "sha512-cV5La9DPwiQ7S0gf/0qiD6YgNqM5Fk97Kdrlc5yBcrF3jyEZQwm7vYFqMo4IfeHgJXsRaMvLABFtd0OVEmZhDw==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "^7.13.10"
}
},
- "@storybook/channel-postmessage": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/channel-postmessage/-/channel-postmessage-6.5.15.tgz",
- "integrity": "sha512-gMpA8LWT8lC4z5KWnaMh03aazEwtDO7GtY5kZVru+EEMgExGmaR82qgekwmLmgLj2nRJEv0o138o9IqYUcou8w==",
+ "@radix-ui/react-use-rect": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.0.1.tgz",
+ "integrity": "sha512-Cq5DLuSiuYVKNU8orzJMbl15TXilTnJKUCltMVQg53BQOF1/C5toAaGrowkgksdBQ9H+SRL23g0HDmg9tvmxXw==",
"dev": true,
"requires": {
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "qs": "^6.10.0",
- "telejson": "^6.0.8"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/rect": "1.0.1"
}
},
- "@storybook/channel-websocket": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/channel-websocket/-/channel-websocket-6.5.15.tgz",
- "integrity": "sha512-K85KEgzo5ahzJNJjyUbSNyuRmkeC8glJX2hCg2j9HiJ9rasX53qugkODrKDlWAeheulo3kR13VSuAqIuwVbmbw==",
+ "@radix-ui/react-use-size": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.0.1.tgz",
+ "integrity": "sha512-ibay+VqrgcaI6veAojjofPATwledXiSmX+C0KrBk/xgpX9rBzPV3OsfwlhQdUOFbh+LKQorLYT+xTXW9V8yd0g==",
"dev": true,
"requires": {
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "telejson": "^6.0.8"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-use-layout-effect": "1.0.1"
}
},
- "@storybook/channels": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.15.tgz",
- "integrity": "sha512-gPpsBgirv2NCXbH4WbYqdkI0JLE96aiVuu7UEWfn9yu071pQ9CLHbhXGD9fSFNrfOkyBBY10ppSE7uCXw3Wexg==",
+ "@radix-ui/react-visually-hidden": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.0.3.tgz",
+ "integrity": "sha512-D4w41yN5YRKtu464TLnByKzMDG/JlMPHtfZgQAu9v6mNakUqGUI9vUrfQKz8NK41VMm/xbZbh76NUTVtIYqOMA==",
"dev": true,
"requires": {
- "core-js": "^3.8.2",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "@babel/runtime": "^7.13.10",
+ "@radix-ui/react-primitive": "1.0.3"
}
},
- "@storybook/client-api": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/client-api/-/client-api-6.5.15.tgz",
- "integrity": "sha512-0ZGpRgVz7rdbCguBqBpwObXbsVY5qlSTWDzzIBpmz8EkxW/MtK5wEyeq+0L0O+DTn41FwvH5yCGLAENpzWD8BQ==",
+ "@radix-ui/rect": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.0.1.tgz",
+ "integrity": "sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==",
"dev": true,
"requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/channel-postmessage": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/store": "6.5.15",
- "@types/qs": "^6.9.5",
- "@types/webpack-env": "^1.16.0",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "store2": "^2.12.0",
- "synchronous-promise": "^2.0.15",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2"
+ "@babel/runtime": "^7.13.10"
}
},
- "@storybook/client-logger": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.15.tgz",
- "integrity": "sha512-0uyxKvodq+FycGv6aUwC1wUR6suXf2+7ywMFAOlYolI4UvNj8NyU/5AfgKT5XnxYAgPmoCiAjOE700TrfHrosw==",
+ "@sinclair/typebox": {
+ "version": "0.27.8",
+ "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
+ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
+ "dev": true
+ },
+ "@storybook/addon-a11y": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-7.6.4.tgz",
+ "integrity": "sha512-NwROJMes3D1WVPSmASVnHtDCIFQCF3DoPJEpzpnUYFxCR2IQzqPSlf9jptRkot6XjL5XwVX5mV2KxC2lKA1cfg==",
"dev": true,
"requires": {
- "core-js": "^3.8.2",
- "global": "^4.4.0"
+ "@storybook/addon-highlight": "7.6.4",
+ "axe-core": "^4.2.0"
}
},
- "@storybook/components": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.15.tgz",
- "integrity": "sha512-bHTT0Oa3s4g+MBMaLBbX9ofMtb1AW59AzIUNGrfqW1XqJMGuUHMiJ7TSo+i5dRSFpbFygnwMEG9LfHxpR2Z0Dw==",
+ "@storybook/addon-actions": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-7.6.4.tgz",
+ "integrity": "sha512-91UD5KPDik74VKVioPMcbwwvDXN/non8p1wArYAHCHCmd/Pts5MJRiFueSdfomSpNjUtjtn6eSXtwpIL3XVOfQ==",
"dev": true,
"requires": {
- "@storybook/client-logger": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "util-deprecate": "^1.0.2"
+ "@storybook/core-events": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "@types/uuid": "^9.0.1",
+ "dequal": "^2.0.2",
+ "polished": "^4.2.2",
+ "uuid": "^9.0.0"
}
},
- "@storybook/core": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/core/-/core-6.5.15.tgz",
- "integrity": "sha512-T9TjLxbb5P/XvLEoj0dnbtexJa0V3pqCifRlIUNkTJO0nU3PdGLMcKMSyIYWjkthAJ9oBrajnodV0UveM/epTg==",
+ "@storybook/addon-backgrounds": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-7.6.4.tgz",
+ "integrity": "sha512-gNy3kIkHSr+Lg/jVDHwbZjIe1po5SDGZNVe39vrJwnqGz8T1clWes9WHCL6zk/uaCDA3yUna2Nt/KlOFAWDSoQ==",
"dev": true,
"requires": {
- "@storybook/core-client": "6.5.15",
- "@storybook/core-server": "6.5.15"
+ "@storybook/global": "^5.0.0",
+ "memoizerific": "^1.11.3",
+ "ts-dedent": "^2.0.0"
}
},
- "@storybook/core-client": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-6.5.15.tgz",
- "integrity": "sha512-i9t4WONy2MxJwLI1FIp5ck7b52EXyJfALnxUn4O/3GTkw09J0NOKi2DPjefUsi7IB5MzFpDjDH9vw/XiTM+OZw==",
+ "@storybook/addon-controls": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-7.6.4.tgz",
+ "integrity": "sha512-k4AtZfazmD/nL3JAtLGAB7raPhkhUo0jWnaZWrahd9h1Fm13mBU/RW+JzTRhCw3Mp2HPERD7NI5Qcd2fUP6WDA==",
"dev": true,
"requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/channel-postmessage": "6.5.15",
- "@storybook/channel-websocket": "6.5.15",
- "@storybook/client-api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/preview-web": "6.5.15",
- "@storybook/store": "6.5.15",
- "@storybook/ui": "6.5.15",
- "airbnb-js-shims": "^2.2.1",
- "ansi-to-html": "^0.6.11",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
+ "@storybook/blocks": "7.6.4",
"lodash": "^4.17.21",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0",
- "unfetch": "^4.2.0",
- "util-deprecate": "^1.0.2"
+ "ts-dedent": "^2.0.0"
}
},
- "@storybook/core-common": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-6.5.15.tgz",
- "integrity": "sha512-uits9o6qwHTPnjsNZP25f7hWmUBGRJ7FXtxxtEaNSmtiwk50KWxBaro7wt505lJ1Gb9vOhpNPhS7y3IxdsXNmQ==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-proposal-class-properties": "^7.12.1",
- "@babel/plugin-proposal-decorators": "^7.12.12",
- "@babel/plugin-proposal-export-default-from": "^7.12.1",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
- "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
- "@babel/plugin-proposal-optional-chaining": "^7.12.7",
- "@babel/plugin-proposal-private-methods": "^7.12.1",
- "@babel/plugin-proposal-private-property-in-object": "^7.12.1",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-transform-arrow-functions": "^7.12.1",
- "@babel/plugin-transform-block-scoping": "^7.12.12",
- "@babel/plugin-transform-classes": "^7.12.1",
- "@babel/plugin-transform-destructuring": "^7.12.1",
- "@babel/plugin-transform-for-of": "^7.12.1",
- "@babel/plugin-transform-parameters": "^7.12.1",
- "@babel/plugin-transform-shorthand-properties": "^7.12.1",
- "@babel/plugin-transform-spread": "^7.12.1",
- "@babel/preset-env": "^7.12.11",
- "@babel/preset-react": "^7.12.10",
- "@babel/preset-typescript": "^7.12.7",
- "@babel/register": "^7.12.1",
- "@storybook/node-logger": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@types/node": "^14.0.10 || ^16.0.0",
- "@types/pretty-hrtime": "^1.0.0",
- "babel-loader": "^8.0.0",
- "babel-plugin-macros": "^3.0.1",
- "babel-plugin-polyfill-corejs3": "^0.1.0",
- "chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "express": "^4.17.1",
- "file-system-cache": "^1.0.5",
- "find-up": "^5.0.0",
- "fork-ts-checker-webpack-plugin": "^6.0.4",
- "fs-extra": "^9.0.1",
- "glob": "^7.1.6",
- "handlebars": "^4.7.7",
- "interpret": "^2.2.0",
- "json5": "^2.1.3",
- "lazy-universal-dotenv": "^3.0.1",
- "picomatch": "^2.3.0",
- "pkg-dir": "^5.0.0",
- "pretty-hrtime": "^1.0.3",
- "resolve-from": "^5.0.0",
- "slash": "^3.0.0",
- "telejson": "^6.0.8",
+ "@storybook/addon-docs": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-7.6.4.tgz",
+ "integrity": "sha512-PbFMbvC9sK3sGdMhwmagXs9TqopTp9FySji+L8O7W9SHRC6wSmdwoWWPWybkOYxr/z/wXi7EM0azSAX7yQxLbw==",
+ "dev": true,
+ "requires": {
+ "@jest/transform": "^29.3.1",
+ "@mdx-js/react": "^2.1.5",
+ "@storybook/blocks": "7.6.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/components": "7.6.4",
+ "@storybook/csf-plugin": "7.6.4",
+ "@storybook/csf-tools": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "@storybook/mdx2-csf": "^1.0.0",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/postinstall": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@storybook/react-dom-shim": "7.6.4",
+ "@storybook/theming": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "fs-extra": "^11.1.0",
+ "remark-external-links": "^8.0.0",
+ "remark-slug": "^6.0.0",
+ "ts-dedent": "^2.0.0"
+ }
+ },
+ "@storybook/addon-essentials": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-7.6.4.tgz",
+ "integrity": "sha512-J+zPmP4pbuuFxQ3pjLRYQRnxEtp7jF3xRXGFO8brVnEqtqoxwJ6j3euUrRLe0rpGAU3AD7dYfaaFjd3xkENgTw==",
+ "dev": true,
+ "requires": {
+ "@storybook/addon-actions": "7.6.4",
+ "@storybook/addon-backgrounds": "7.6.4",
+ "@storybook/addon-controls": "7.6.4",
+ "@storybook/addon-docs": "7.6.4",
+ "@storybook/addon-highlight": "7.6.4",
+ "@storybook/addon-measure": "7.6.4",
+ "@storybook/addon-outline": "7.6.4",
+ "@storybook/addon-toolbars": "7.6.4",
+ "@storybook/addon-viewport": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/manager-api": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "ts-dedent": "^2.0.0"
+ }
+ },
+ "@storybook/addon-highlight": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-7.6.4.tgz",
+ "integrity": "sha512-0kvjDzquoPwWWU61QYmEtcSGWXufnV7Z/bfBTYh132uxvV/X9YzDFcXXrxGL7sBJkK32gNUUBDuiTOxs5NxyOQ==",
+ "dev": true,
+ "requires": {
+ "@storybook/global": "^5.0.0"
+ }
+ },
+ "@storybook/addon-links": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-7.6.4.tgz",
+ "integrity": "sha512-TEhxYdMhJO28gD84ej1FCwLv9oLuCPt77bRXip9ndaNPRTdHYdWv6IP94dhbuDi8eHux7Z4A/mllciFuDFrnCw==",
+ "dev": true,
+ "requires": {
+ "@storybook/csf": "^0.1.2",
+ "@storybook/global": "^5.0.0",
+ "ts-dedent": "^2.0.0"
+ }
+ },
+ "@storybook/addon-measure": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-7.6.4.tgz",
+ "integrity": "sha512-73wsJ8PALsgWniR3MA/cmxcFuU6cRruWdIyYzOMgM8ife2Jm3xSkV7cTTXAqXt2H9Uuki4PGnuMHWWFLpPeyVA==",
+ "dev": true,
+ "requires": {
+ "@storybook/global": "^5.0.0",
+ "tiny-invariant": "^1.3.1"
+ }
+ },
+ "@storybook/addon-outline": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-7.6.4.tgz",
+ "integrity": "sha512-CFxGASRse/qeFocetDKFNeWZ3Aa2wapVtRciDNa4Zx7k1wCnTjEsPIm54waOuCaNVcrvO+nJUAZG5WyiorQvcg==",
+ "dev": true,
+ "requires": {
+ "@storybook/global": "^5.0.0",
+ "ts-dedent": "^2.0.0"
+ }
+ },
+ "@storybook/addon-toolbars": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-7.6.4.tgz",
+ "integrity": "sha512-ENMQJgU4sRCLLDVXYfa+P3cQVV9PC0ZxwVAKeM3NPYPNH/ODoryGNtq+Q68LwHlM4ObCE2oc9MzaQqPxloFcCw==",
+ "dev": true
+ },
+ "@storybook/addon-viewport": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-7.6.4.tgz",
+ "integrity": "sha512-SoTcHIoqybhYD28v7QExF1EZnl7FfxuP74VDhtze5LyMd2CbqmVnUfwewLCz/3IvCNce0GqdNyg1m6QJ7Eq1uw==",
+ "dev": true,
+ "requires": {
+ "memoizerific": "^1.11.3"
+ }
+ },
+ "@storybook/blocks": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-7.6.4.tgz",
+ "integrity": "sha512-iXinXXhTUBtReREP1Jifpu35DnGg7FidehjvCM8sM4E4aymfb8czdg9DdvG46T2UFUPUct36nnjIdMLWOya8Bw==",
+ "dev": true,
+ "requires": {
+ "@storybook/channels": "7.6.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/components": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/docs-tools": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "@storybook/manager-api": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@storybook/theming": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/lodash": "^4.14.167",
+ "color-convert": "^2.0.1",
+ "dequal": "^2.0.2",
+ "lodash": "^4.17.21",
+ "markdown-to-jsx": "^7.1.8",
+ "memoizerific": "^1.11.3",
+ "polished": "^4.2.2",
+ "react-colorful": "^5.1.2",
+ "telejson": "^7.2.0",
+ "tocbot": "^4.20.1",
"ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "webpack": "4"
+ "util-deprecate": "^1.0.2"
},
"dependencies": {
- "@babel/helper-define-polyfill-provider": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz",
- "integrity": "sha512-nXuzCSwlJ/WKr8qxzW816gwyT6VZgiJG17zR40fou70yfAcqjoNyTLl/DQ+FExw5Hx5KNqshmN8Ldl/r2N7cTg==",
- "dev": true,
- "requires": {
- "@babel/helper-compilation-targets": "^7.13.0",
- "@babel/helper-module-imports": "^7.12.13",
- "@babel/helper-plugin-utils": "^7.13.0",
- "@babel/traverse": "^7.13.0",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2",
- "semver": "^6.1.2"
- }
- },
- "@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
- "dev": true,
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
- "dev": true,
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
- "dev": true
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/helper-wasm-section": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-opt": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true
- },
- "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"
- }
- },
- "babel-plugin-polyfill-corejs3": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.1.7.tgz",
- "integrity": "sha512-u+gbS9bbPhZWEeyy1oR/YaaSpod/KDT07arZHb80aTpl8H5ZBq+uN1nN9/xtX7jQyfLdPfoqI4Rue/MQSWJquw==",
- "dev": true,
- "requires": {
- "@babel/helper-define-polyfill-provider": "^0.1.5",
- "core-js-compat": "^3.8.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "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"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.5",
- "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"
- }
- },
- "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"
- }
- },
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -25300,1230 +16736,332 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"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
- },
- "enhanced-resolve": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
- "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "dependencies": {
- "memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- }
- }
- },
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.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
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
- "dev": true
- },
- "loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- },
- "dependencies": {
- "json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- }
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "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"
- }
- },
- "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,
- "requires": {
- "minimist": "^1.2.6"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.5.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"
- }
- },
- "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"
- }
- },
- "terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- }
- },
- "terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
- "dev": true,
- "requires": {
- "cacache": "^12.0.2",
- "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"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
- "dev": true,
- "requires": {
- "chokidar": "^3.4.1",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0",
- "watchpack-chokidar2": "^2.0.1"
- }
- },
- "webpack": {
- "version": "4.46.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
- "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
- "dev": true,
- "requires": {
- "@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"
- }
- },
- "webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
}
}
},
- "@storybook/core-events": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.15.tgz",
- "integrity": "sha512-B1Ba6l5W7MeNclclqMMTMHgYgfdpB5SIhNCQFnzIz8blynzRhNFMdxvbAl6Je5G0S4xydYYd7Lno2kXQebs7HA==",
+ "@storybook/builder-manager": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-manager/-/builder-manager-7.6.4.tgz",
+ "integrity": "sha512-k5+D3fXw7LdMOWd5tF7cIq8L3irrdW6/vmcEHLaJj1EXZ+DvsNCH9xSsLS+6zfrUcxug4oSfRqvF87w6Oz3DtA==",
"dev": true,
"requires": {
- "core-js": "^3.8.2"
+ "@fal-works/esbuild-plugin-global-externals": "^2.1.2",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/manager": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@types/ejs": "^3.1.1",
+ "@types/find-cache-dir": "^3.2.1",
+ "@yarnpkg/esbuild-plugin-pnp": "^3.0.0-rc.10",
+ "browser-assert": "^1.2.1",
+ "ejs": "^3.1.8",
+ "esbuild": "^0.18.0",
+ "esbuild-plugin-alias": "^0.2.1",
+ "express": "^4.17.3",
+ "find-cache-dir": "^3.0.0",
+ "fs-extra": "^11.1.0",
+ "process": "^0.11.10",
+ "util": "^0.12.4"
}
},
- "@storybook/core-server": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-6.5.15.tgz",
- "integrity": "sha512-m+pZwHhCjwryeqTptyyKHSbIjnnPGKoRSnkqLTOpKQf8llZMnNQWUFrn4fx6UDKzxFQ2st2+laV8O2QbMs8qwQ==",
- "dev": true,
- "requires": {
- "@discoveryjs/json-ext": "^0.5.3",
- "@storybook/builder-webpack4": "6.5.15",
- "@storybook/core-client": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/csf-tools": "6.5.15",
- "@storybook/manager-webpack4": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@storybook/store": "6.5.15",
- "@storybook/telemetry": "6.5.15",
- "@types/node": "^14.0.10 || ^16.0.0",
- "@types/node-fetch": "^2.5.7",
- "@types/pretty-hrtime": "^1.0.0",
- "@types/webpack": "^4.41.26",
- "better-opn": "^2.1.1",
- "boxen": "^5.1.2",
- "chalk": "^4.1.0",
- "cli-table3": "^0.6.1",
- "commander": "^6.2.1",
- "compression": "^1.7.4",
- "core-js": "^3.8.2",
- "cpy": "^8.1.2",
- "detect-port": "^1.3.0",
- "express": "^4.17.1",
- "fs-extra": "^9.0.1",
- "global": "^4.4.0",
- "globby": "^11.0.2",
- "ip": "^2.0.0",
- "lodash": "^4.17.21",
- "node-fetch": "^2.6.7",
- "open": "^8.4.0",
- "pretty-hrtime": "^1.0.3",
- "prompts": "^2.4.0",
- "regenerator-runtime": "^0.13.7",
- "serve-favicon": "^2.5.0",
- "slash": "^3.0.0",
- "telejson": "^6.0.8",
+ "@storybook/builder-webpack5": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/builder-webpack5/-/builder-webpack5-7.6.4.tgz",
+ "integrity": "sha512-J5wzPn/rsowlur5A7W9pAfN3a5fMapOoHaZsDKUklGRud/JUeabAIVdL1P/eX+yE3xaJk9auYivEWbglSx2Kpg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.23.2",
+ "@storybook/channels": "7.6.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/core-webpack": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/preview": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@swc/core": "^1.3.82",
+ "@types/node": "^18.0.0",
+ "@types/semver": "^7.3.4",
+ "babel-loader": "^9.0.0",
+ "browser-assert": "^1.2.1",
+ "case-sensitive-paths-webpack-plugin": "^2.4.0",
+ "constants-browserify": "^1.0.0",
+ "css-loader": "^6.7.1",
+ "es-module-lexer": "^1.4.1",
+ "express": "^4.17.3",
+ "fork-ts-checker-webpack-plugin": "^8.0.0",
+ "fs-extra": "^11.1.0",
+ "html-webpack-plugin": "^5.5.0",
+ "magic-string": "^0.30.5",
+ "path-browserify": "^1.0.1",
+ "process": "^0.11.10",
+ "semver": "^7.3.7",
+ "style-loader": "^3.3.1",
+ "swc-loader": "^0.2.3",
+ "terser-webpack-plugin": "^5.3.1",
"ts-dedent": "^2.0.0",
+ "url": "^0.11.0",
+ "util": "^0.12.4",
"util-deprecate": "^1.0.2",
- "watchpack": "^2.2.0",
- "webpack": "4",
- "ws": "^8.2.3",
- "x-default-browser": "^0.4.0"
+ "webpack": "5",
+ "webpack-dev-middleware": "^6.1.1",
+ "webpack-hot-middleware": "^2.25.1",
+ "webpack-virtual-modules": "^0.5.0"
},
"dependencies": {
- "@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
+ "ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
"dev": true,
"requires": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
}
},
- "@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
+ "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": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0"
+ "fast-deep-equal": "^3.1.3"
}
},
- "@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
+ "babel-loader": {
+ "version": "9.1.3",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz",
+ "integrity": "sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==",
"dev": true,
"requires": {
- "@xtuc/ieee754": "^1.2.0"
+ "find-cache-dir": "^4.0.0",
+ "schema-utils": "^4.0.0"
}
},
- "@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
+ "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": {
- "@xtuc/long": "4.2.2"
+ "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"
}
},
- "@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
+ "es-module-lexer": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz",
+ "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==",
"dev": true
},
- "@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/helper-wasm-section": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-opt": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
+ "find-cache-dir": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-4.0.0.tgz",
+ "integrity": "sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==",
"dev": true,
"requires": {
- "@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"
+ "common-path-prefix": "^3.0.0",
+ "pkg-dir": "^7.0.0"
}
},
- "@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
+ "find-up": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz",
+ "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
+ "locate-path": "^7.1.0",
+ "path-exists": "^5.0.0"
}
},
- "acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
+ "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
},
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "locate-path": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz",
+ "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==",
"dev": true,
"requires": {
- "color-convert": "^2.0.1"
+ "p-locate": "^6.0.0"
}
},
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "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": {
- "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"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
+ "yallist": "^4.0.0"
}
},
- "cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
+ "p-limit": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz",
+ "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==",
"dev": true,
"requires": {
- "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"
+ "yocto-queue": "^1.0.0"
}
},
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "p-locate": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz",
+ "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==",
"dev": true,
"requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
+ "p-limit": "^4.0.0"
}
},
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "path-exists": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz",
+ "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==",
"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==",
+ "pkg-dir": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-7.0.0.tgz",
+ "integrity": "sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==",
"dev": true,
"requires": {
- "color-name": "~1.1.4"
+ "find-up": "^6.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
- },
- "enhanced-resolve": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
- "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
+ "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": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "dependencies": {
- "memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- }
+ "@types/json-schema": "^7.0.9",
+ "ajv": "^8.9.0",
+ "ajv-formats": "^2.1.1",
+ "ajv-keywords": "^5.1.0"
}
},
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
+ "lru-cache": "^6.0.0"
}
},
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
+ "style-loader": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.3.tgz",
+ "integrity": "sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==",
"dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.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
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
+ "requires": {}
},
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
+ "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": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "colorette": "^2.0.10",
+ "memfs": "^3.4.12",
+ "mime-types": "^2.1.31",
+ "range-parser": "^1.2.1",
+ "schema-utils": "^4.0.0"
}
},
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "webpack-virtual-modules": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz",
+ "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==",
"dev": true
},
- "json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
},
- "loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "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"
- }
- },
- "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,
- "requires": {
- "minimist": "^1.2.6"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "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"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "schema-utils": {
+ "yocto-queue": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.5.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"
- }
- },
- "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"
- }
- },
- "terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- },
- "dependencies": {
- "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
- }
- }
- },
- "terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
- "dev": true,
- "requires": {
- "cacache": "^12.0.2",
- "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"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "webpack": {
- "version": "4.46.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
- "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
- "dev": true,
- "requires": {
- "@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"
- },
- "dependencies": {
- "watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
- "dev": true,
- "requires": {
- "chokidar": "^3.4.1",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0",
- "watchpack-chokidar2": "^2.0.1"
- }
- }
- }
- },
- "webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
+ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
+ "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
+ "dev": true
}
}
},
- "@storybook/csf": {
- "version": "0.0.2--canary.4566f4d.1",
- "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.2--canary.4566f4d.1.tgz",
- "integrity": "sha512-9OVvMVh3t9znYZwb0Svf/YQoxX2gVOeQTGe2bses2yj+a3+OJnCrUF3/hGv6Em7KujtOdL2LL+JnG49oMVGFgQ==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.15"
- }
- },
- "@storybook/csf-tools": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-6.5.15.tgz",
- "integrity": "sha512-2LwSD7yE/ccXBc58K4vdKw/oJJg6IpC4WD51rBt2mAl5JUCkxhOq7wG/Z8Wy1lZw2LVuKNTmjVou5blGRI/bTg==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.10",
- "@babel/generator": "^7.12.11",
- "@babel/parser": "^7.12.11",
- "@babel/plugin-transform-react-jsx": "^7.12.12",
- "@babel/preset-env": "^7.12.11",
- "@babel/traverse": "^7.12.11",
- "@babel/types": "^7.12.11",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/mdx1-csf": "^0.0.1",
- "core-js": "^3.8.2",
- "fs-extra": "^9.0.1",
- "global": "^4.4.0",
- "regenerator-runtime": "^0.13.7",
- "ts-dedent": "^2.0.0"
- }
- },
- "@storybook/docs-tools": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-6.5.15.tgz",
- "integrity": "sha512-8w78NFOtlJGuIa9vPPsr87J9iQUGmLFh7CrMS2+t9LxW+0oH5MZ8QqPQUHNuTuKsYN3r+QAmmi2pj0auZmCoKA==",
+ "@storybook/channels": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-7.6.4.tgz",
+ "integrity": "sha512-Z4PY09/Czl70ap4ObmZ4bgin+EQhPaA3HdrEDNwpnH7A9ttfEO5u5KThytIjMq6kApCCihmEPDaYltoVrfYJJA==",
"dev": true,
"requires": {
- "@babel/core": "^7.12.10",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/store": "6.5.15",
- "core-js": "^3.8.2",
- "doctrine": "^3.0.0",
- "lodash": "^4.17.21",
- "regenerator-runtime": "^0.13.7"
- }
- },
- "@storybook/manager-webpack4": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/manager-webpack4/-/manager-webpack4-6.5.15.tgz",
- "integrity": "sha512-zRvBTMoaFO6MvHDsDLnt3tsFENhpY3k+e/UIPdqbIDMbUPGGQzxJucAM9aS/kbVSO5IVs8IflVxbeeB/uTIIfA==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-transform-template-literals": "^7.12.1",
- "@babel/preset-react": "^7.12.10",
- "@storybook/addons": "6.5.15",
- "@storybook/core-client": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "@storybook/theming": "6.5.15",
- "@storybook/ui": "6.5.15",
- "@types/node": "^14.0.10 || ^16.0.0",
- "@types/webpack": "^4.41.26",
- "babel-loader": "^8.0.0",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "qs": "^6.10.0",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1"
+ }
+ },
+ "@storybook/cli": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/cli/-/cli-7.6.4.tgz",
+ "integrity": "sha512-GqvaFdkkBMJOdnrVe82XY0V3b+qFMhRNyVoTv2nqB87iMUXZHqh4Pu4LqwaJBsBpuNregvCvVOPe9LGgoOzy4A==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.23.2",
+ "@babel/preset-env": "^7.23.2",
+ "@babel/types": "^7.23.0",
+ "@ndelangen/get-tarball": "^3.0.7",
+ "@storybook/codemod": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/core-server": "7.6.4",
+ "@storybook/csf-tools": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/telemetry": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/semver": "^7.3.4",
+ "@yarnpkg/fslib": "2.10.3",
+ "@yarnpkg/libzip": "2.3.0",
"chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "css-loader": "^3.6.0",
- "express": "^4.17.1",
- "file-loader": "^6.2.0",
+ "commander": "^6.2.1",
+ "cross-spawn": "^7.0.3",
+ "detect-indent": "^6.1.0",
+ "envinfo": "^7.7.3",
+ "execa": "^5.0.0",
+ "express": "^4.17.3",
"find-up": "^5.0.0",
- "fs-extra": "^9.0.1",
- "html-webpack-plugin": "^4.0.0",
- "node-fetch": "^2.6.7",
- "pnp-webpack-plugin": "1.6.4",
+ "fs-extra": "^11.1.0",
+ "get-npm-tarball-url": "^2.0.3",
+ "get-port": "^5.1.1",
+ "giget": "^1.0.0",
+ "globby": "^11.0.2",
+ "jscodeshift": "^0.15.1",
+ "leven": "^3.1.0",
+ "ora": "^5.4.1",
+ "prettier": "^2.8.0",
+ "prompts": "^2.4.0",
+ "puppeteer-core": "^2.1.1",
"read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7",
- "resolve-from": "^5.0.0",
- "style-loader": "^1.3.0",
- "telejson": "^6.0.8",
- "terser-webpack-plugin": "^4.2.3",
+ "semver": "^7.3.7",
+ "simple-update-notifier": "^2.0.0",
+ "strip-json-comments": "^3.0.1",
+ "tempy": "^1.0.1",
"ts-dedent": "^2.0.0",
- "url-loader": "^4.1.1",
- "util-deprecate": "^1.0.2",
- "webpack": "4",
- "webpack-dev-middleware": "^3.7.3",
- "webpack-virtual-modules": "^0.2.2"
+ "util-deprecate": "^1.0.2"
},
"dependencies": {
- "@types/html-minifier-terser": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz",
- "integrity": "sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w==",
- "dev": true
- },
- "@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "@webassemblyjs/helper-buffer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
- "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-section": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
- "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0"
- }
- },
- "@webassemblyjs/ieee754": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
- "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
- "dev": true,
- "requires": {
- "@xtuc/ieee754": "^1.2.0"
- }
- },
- "@webassemblyjs/leb128": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
- "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
- "dev": true,
- "requires": {
- "@xtuc/long": "4.2.2"
- }
- },
- "@webassemblyjs/utf8": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
- "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
- "dev": true
- },
- "@webassemblyjs/wasm-edit": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
- "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/helper-wasm-section": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-opt": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0",
- "@webassemblyjs/wast-printer": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-gen": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
- "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-opt": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
- "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-buffer": "1.9.0",
- "@webassemblyjs/wasm-gen": "1.9.0",
- "@webassemblyjs/wasm-parser": "1.9.0"
- }
- },
- "@webassemblyjs/wasm-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
- "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/helper-api-error": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/ieee754": "1.9.0",
- "@webassemblyjs/leb128": "1.9.0",
- "@webassemblyjs/utf8": "1.9.0"
- }
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- },
- "acorn": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz",
- "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==",
- "dev": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true
- },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -26533,35 +17071,6 @@
"color-convert": "^2.0.1"
}
},
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "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"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
"chalk": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
@@ -26572,21 +17081,6 @@
"supports-color": "^7.1.0"
}
},
- "chownr": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
- "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
- "dev": true
- },
- "clean-css": {
- "version": "4.2.4",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.4.tgz",
- "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==",
- "dev": true,
- "requires": {
- "source-map": "~0.6.0"
- }
- },
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -26603,444 +17097,33 @@
"dev": true
},
"commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
+ "version": "6.2.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
+ "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
"dev": true
},
- "css-loader": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
- "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.3.1",
- "cssesc": "^3.0.0",
- "icss-utils": "^4.1.1",
- "loader-utils": "^1.2.3",
- "normalize-path": "^3.0.0",
- "postcss": "^7.0.32",
- "postcss-modules-extract-imports": "^2.0.0",
- "postcss-modules-local-by-default": "^3.0.2",
- "postcss-modules-scope": "^2.2.0",
- "postcss-modules-values": "^3.0.0",
- "postcss-value-parser": "^4.1.0",
- "schema-utils": "^2.7.0",
- "semver": "^6.3.0"
- },
- "dependencies": {
- "loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- }
- }
- },
- "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"
- }
- },
- "enhanced-resolve": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz",
- "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.5.0",
- "tapable": "^1.0.0"
- },
- "dependencies": {
- "memory-fs": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz",
- "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- }
- }
- },
- "eslint-scope": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz",
- "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==",
- "dev": true,
- "requires": {
- "esrecurse": "^4.1.0",
- "estraverse": "^4.1.1"
- }
- },
- "estraverse": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
- "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
- "dev": true
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "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"
- }
- },
"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
},
- "html-minifier-terser": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz",
- "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==",
- "dev": true,
- "requires": {
- "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"
- },
- "dependencies": {
- "terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- },
- "dependencies": {
- "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
- }
- }
- }
- }
- },
- "html-webpack-plugin": {
- "version": "4.5.2",
- "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz",
- "integrity": "sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A==",
- "dev": true,
- "requires": {
- "@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"
- },
- "dependencies": {
- "loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-wsl": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
- "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "json5": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz",
- "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==",
- "dev": true,
- "requires": {
- "minimist": "^1.2.0"
- }
- },
- "loader-runner": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
- "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==",
- "dev": true
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "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"
- }
- },
- "mime": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
- "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
- "dev": true
- },
- "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,
- "requires": {
- "minimist": "^1.2.6"
- }
- },
- "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"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "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"
- },
- "dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- }
- }
- },
- "pretty-error": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz",
- "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==",
- "dev": true,
- "requires": {
- "lodash": "^4.17.20",
- "renderkid": "^2.0.4"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "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"
- }
- },
- "renderkid": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz",
- "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==",
- "dev": true,
- "requires": {
- "css-select": "^4.1.3",
- "dom-converter": "^0.2.0",
- "htmlparser2": "^6.1.0",
- "lodash": "^4.17.21",
- "strip-ansi": "^3.0.1"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "serialize-javascript": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz",
- "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "ssri": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz",
- "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==",
- "dev": true,
- "requires": {
- "figgy-pudding": "^3.5.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"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
+ "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": {
- "ansi-regex": "^2.0.0"
+ "yallist": "^4.0.0"
}
},
- "style-loader": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.3.0.tgz",
- "integrity": "sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q==",
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"requires": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^2.7.0"
+ "lru-cache": "^6.0.0"
}
},
"supports-color": {
@@ -27052,338 +17135,94 @@
"has-flag": "^4.0.0"
}
},
- "terser-webpack-plugin": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz",
- "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==",
- "dev": true,
- "requires": {
- "cacache": "^15.0.5",
- "find-cache-dir": "^3.3.1",
- "jest-worker": "^26.5.0",
- "p-limit": "^3.0.2",
- "schema-utils": "^3.0.0",
- "serialize-javascript": "^5.0.1",
- "source-map": "^0.6.1",
- "terser": "^5.3.4",
- "webpack-sources": "^1.4.3"
- },
- "dependencies": {
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "watchpack": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz",
- "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==",
- "dev": true,
- "requires": {
- "chokidar": "^3.4.1",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0",
- "watchpack-chokidar2": "^2.0.1"
- }
- },
- "webpack": {
- "version": "4.46.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.46.0.tgz",
- "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==",
- "dev": true,
- "requires": {
- "@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"
- },
- "dependencies": {
- "cacache": {
- "version": "12.0.4",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz",
- "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==",
- "dev": true,
- "requires": {
- "bluebird": "^3.5.5",
- "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"
- }
- },
- "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
- },
- "find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
- "dev": true,
- "requires": {
- "commondir": "^1.0.1",
- "make-dir": "^2.0.0",
- "pkg-dir": "^3.0.0"
- }
- },
- "find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
- "dev": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "loader-utils": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz",
- "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==",
- "dev": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^1.0.1"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
- "dev": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "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,
- "requires": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- }
- },
- "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": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
- "dev": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true
- },
- "pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0"
- }
- },
- "schema-utils": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz",
- "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==",
- "dev": true,
- "requires": {
- "ajv": "^6.1.0",
- "ajv-errors": "^1.0.0",
- "ajv-keywords": "^3.1.0"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "serialize-javascript": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
- "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.1.0"
- }
- },
- "terser": {
- "version": "4.8.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz",
- "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==",
- "dev": true,
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.6.1",
- "source-map-support": "~0.5.12"
- }
- },
- "terser-webpack-plugin": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
- "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
- "dev": true,
- "requires": {
- "cacache": "^12.0.2",
- "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"
- }
- }
- }
- },
- "webpack-dev-middleware": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz",
- "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==",
- "dev": true,
- "requires": {
- "memory-fs": "^0.4.1",
- "mime": "^2.4.4",
- "mkdirp": "^0.5.1",
- "range-parser": "^1.2.1",
- "webpack-log": "^2.0.0"
- }
- },
- "webpack-sources": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz",
- "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==",
- "dev": true,
- "requires": {
- "source-list-map": "^2.0.0",
- "source-map": "~0.6.1"
- }
- },
- "webpack-virtual-modules": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz",
- "integrity": "sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA==",
- "dev": true,
- "requires": {
- "debug": "^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
}
}
},
- "@storybook/manager-webpack5": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/manager-webpack5/-/manager-webpack5-6.5.15.tgz",
- "integrity": "sha512-yrHVFUHGdVRWq/oGJwQu+UOZzxELH5SS+Lpn5oIQ/Dblam9piQC0KmBZtFuA9X8acaw4BBVnXgF/aiqs9fOp/Q==",
- "dev": true,
- "requires": {
- "@babel/core": "^7.12.10",
- "@babel/plugin-transform-template-literals": "^7.12.1",
- "@babel/preset-react": "^7.12.10",
- "@storybook/addons": "6.5.15",
- "@storybook/core-client": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/node-logger": "6.5.15",
- "@storybook/theming": "6.5.15",
- "@storybook/ui": "6.5.15",
- "@types/node": "^14.0.10 || ^16.0.0",
- "babel-loader": "^8.0.0",
- "case-sensitive-paths-webpack-plugin": "^2.3.0",
+ "@storybook/client-logger": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-7.6.4.tgz",
+ "integrity": "sha512-vJwMShC98tcoFruRVQ4FphmFqvAZX1FqZqjFyk6IxtFumPKTVSnXJjlU1SnUIkSK2x97rgdUMqkdI+wAv/tugQ==",
+ "dev": true,
+ "requires": {
+ "@storybook/global": "^5.0.0"
+ }
+ },
+ "@storybook/codemod": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-7.6.4.tgz",
+ "integrity": "sha512-q4rZVOfozxzbDRH/LzuFDoIGBdXs+orAm18fi6iAx8PeMHe8J/MOXKccNV1zdkm/h7mTQowuRo45KwJHw8vX+g==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.23.2",
+ "@babel/preset-env": "^7.23.2",
+ "@babel/types": "^7.23.0",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/csf-tools": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/cross-spawn": "^6.0.2",
+ "cross-spawn": "^7.0.3",
+ "globby": "^11.0.2",
+ "jscodeshift": "^0.15.1",
+ "lodash": "^4.17.21",
+ "prettier": "^2.8.0",
+ "recast": "^0.23.1"
+ }
+ },
+ "@storybook/components": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/components/-/components-7.6.4.tgz",
+ "integrity": "sha512-K5RvEObJAnX+SbGJbkM1qrZEk+VR2cUhRCSrFnlfMwsn8/60T3qoH7U8bCXf8krDgbquhMwqev5WzDB+T1VV8g==",
+ "dev": true,
+ "requires": {
+ "@radix-ui/react-select": "^1.2.2",
+ "@radix-ui/react-toolbar": "^1.0.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/global": "^5.0.0",
+ "@storybook/theming": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "memoizerific": "^1.11.3",
+ "use-resize-observer": "^9.1.0",
+ "util-deprecate": "^1.0.2"
+ }
+ },
+ "@storybook/core-common": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/core-common/-/core-common-7.6.4.tgz",
+ "integrity": "sha512-qes4+mXqINu0kCgSMFjk++GZokmYjb71esId0zyJsk0pcIPkAiEjnhbSEQkMhbUfcvO1lztoaQTBW2P7Rd1tag==",
+ "dev": true,
+ "requires": {
+ "@storybook/core-events": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/find-cache-dir": "^3.2.1",
+ "@types/node": "^18.0.0",
+ "@types/node-fetch": "^2.6.4",
+ "@types/pretty-hrtime": "^1.0.0",
"chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "css-loader": "^5.0.1",
- "express": "^4.17.1",
+ "esbuild": "^0.18.0",
+ "esbuild-register": "^3.5.0",
+ "file-system-cache": "2.3.0",
+ "find-cache-dir": "^3.0.0",
"find-up": "^5.0.0",
- "fs-extra": "^9.0.1",
- "html-webpack-plugin": "^5.0.0",
- "node-fetch": "^2.6.7",
- "process": "^0.11.10",
- "read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7",
+ "fs-extra": "^11.1.0",
+ "glob": "^10.0.0",
+ "handlebars": "^4.7.7",
+ "lazy-universal-dotenv": "^4.0.0",
+ "node-fetch": "^2.0.0",
+ "picomatch": "^2.3.0",
+ "pkg-dir": "^5.0.0",
+ "pretty-hrtime": "^1.0.3",
"resolve-from": "^5.0.0",
- "style-loader": "^2.0.0",
- "telejson": "^6.0.8",
- "terser-webpack-plugin": "^5.0.3",
- "ts-dedent": "^2.0.0",
- "util-deprecate": "^1.0.2",
- "webpack": "^5.9.0",
- "webpack-dev-middleware": "^4.1.0",
- "webpack-virtual-modules": "^0.4.1"
+ "ts-dedent": "^2.0.0"
},
"dependencies": {
- "@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
"ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -27435,36 +17274,62 @@
}
}
},
- "@storybook/mdx1-csf": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/@storybook/mdx1-csf/-/mdx1-csf-0.0.1.tgz",
- "integrity": "sha512-4biZIWWzoWlCarMZmTpqcJNgo/RBesYZwGFbQeXiGYsswuvfWARZnW9RE9aUEMZ4XPn7B1N3EKkWcdcWe/K2tg==",
+ "@storybook/core-events": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-7.6.4.tgz",
+ "integrity": "sha512-i3xzcJ19ILSy4oJL5Dz9y0IlyApynn5RsGhAMIsW+mcfri+hGfeakq1stNCo0o7jW4Y3A7oluFTtIoK8DOxQdQ==",
"dev": true,
"requires": {
- "@babel/generator": "^7.12.11",
- "@babel/parser": "^7.12.11",
- "@babel/preset-env": "^7.12.11",
- "@babel/types": "^7.12.11",
- "@mdx-js/mdx": "^1.6.22",
- "@types/lodash": "^4.14.167",
- "js-string-escape": "^1.0.1",
- "loader-utils": "^2.0.0",
- "lodash": "^4.17.21",
- "prettier": ">=2.2.1 <=2.3.0",
"ts-dedent": "^2.0.0"
}
},
- "@storybook/node-logger": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-6.5.15.tgz",
- "integrity": "sha512-LQjjbfMuUXm7wZTBKb+iGeCNnej4r1Jb2NxG3Svu2bVhaoB6u33jHAcbmhXpXW1jghzW3kQwOU7BoLuJiRRFIw==",
+ "@storybook/core-server": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/core-server/-/core-server-7.6.4.tgz",
+ "integrity": "sha512-mXxZMpCwOhjEPPRjqrTHdiCpFdkc47f46vlgTj02SX+9xKHxslmZ2D3JG/8O4Ab9tG+bBl6lBm3RIrIzaiCu9Q==",
"dev": true,
"requires": {
- "@types/npmlog": "^4.1.2",
+ "@aw-web-design/x-default-browser": "1.4.126",
+ "@discoveryjs/json-ext": "^0.5.3",
+ "@storybook/builder-manager": "7.6.4",
+ "@storybook/channels": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/csf-tools": "7.6.4",
+ "@storybook/docs-mdx": "^0.1.0",
+ "@storybook/global": "^5.0.0",
+ "@storybook/manager": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@storybook/telemetry": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/detect-port": "^1.3.0",
+ "@types/node": "^18.0.0",
+ "@types/pretty-hrtime": "^1.0.0",
+ "@types/semver": "^7.3.4",
+ "better-opn": "^3.0.2",
"chalk": "^4.1.0",
- "core-js": "^3.8.2",
- "npmlog": "^5.0.1",
- "pretty-hrtime": "^1.0.3"
+ "cli-table3": "^0.6.1",
+ "compression": "^1.7.4",
+ "detect-port": "^1.3.0",
+ "express": "^4.17.3",
+ "fs-extra": "^11.1.0",
+ "globby": "^11.0.2",
+ "ip": "^2.0.0",
+ "lodash": "^4.17.21",
+ "open": "^8.4.0",
+ "pretty-hrtime": "^1.0.3",
+ "prompts": "^2.4.0",
+ "read-pkg-up": "^7.0.1",
+ "semver": "^7.3.7",
+ "telejson": "^7.2.0",
+ "tiny-invariant": "^1.3.1",
+ "ts-dedent": "^2.0.0",
+ "util": "^0.12.4",
+ "util-deprecate": "^1.0.2",
+ "watchpack": "^2.2.0",
+ "ws": "^8.2.3"
},
"dependencies": {
"ansi-styles": {
@@ -27507,6 +17372,24 @@
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"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.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
+ "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",
@@ -27515,163 +17398,239 @@
"requires": {
"has-flag": "^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
}
}
},
- "@storybook/postinstall": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-6.5.15.tgz",
- "integrity": "sha512-l7pApTgLD10OedNOyuf4vUdVCHLOSaIUIL9gdJl1WaSFHiUpJvvzBIh5M4aRICYPbnuExQc8y2GAjERKO4Ep+g==",
+ "@storybook/core-webpack": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/core-webpack/-/core-webpack-7.6.4.tgz",
+ "integrity": "sha512-+C2YddhOhO0Lp9KngzX9XYJZKzCzo4vjXA3IMXxSA7Vo7gFhaa8uQTAXnUx7xCrvFXM/iiHUY1SN+VppB0eBdA==",
"dev": true,
"requires": {
- "core-js": "^3.8.2"
+ "@storybook/core-common": "7.6.4",
+ "@storybook/node-logger": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/node": "^18.0.0",
+ "ts-dedent": "^2.0.0"
}
},
- "@storybook/preview-web": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/preview-web/-/preview-web-6.5.15.tgz",
- "integrity": "sha512-gIHABSAD0JS0iRaG67BnSDq/q8Zf4fFwEWBQOSYgcEx2TzhAUeSkhGZUQHdlOTCwuA2PpXT0/cWDH8u2Ev+msg==",
+ "@storybook/csf": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.2.tgz",
+ "integrity": "sha512-ePrvE/pS1vsKR9Xr+o+YwdqNgHUyXvg+1Xjx0h9LrVx7Zq4zNe06pd63F5EvzTbCbJsHj7GHr9tkiaqm7U8WRA==",
"dev": true,
"requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/channel-postmessage": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/store": "6.5.15",
- "ansi-to-html": "^0.6.11",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "lodash": "^4.17.21",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "synchronous-promise": "^2.0.15",
- "ts-dedent": "^2.0.0",
- "unfetch": "^4.2.0",
- "util-deprecate": "^1.0.2"
+ "type-fest": "^2.19.0"
}
},
- "@storybook/router": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.15.tgz",
- "integrity": "sha512-9t8rI8t7/Krolau29gsdjdbRQ66orONIyP0efp0EukVgv6reNFzb/U14ARrl0uHys6Tl5Xyece9FoakQUdn8Kg==",
+ "@storybook/csf-plugin": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-7.6.4.tgz",
+ "integrity": "sha512-7g9p8s2ITX+Z9iThK5CehPhJOcusVN7JcUEEW+gVF5PlYT+uk/x+66gmQno+scQuNkV9+8UJD6RLFjP+zg2uCA==",
"dev": true,
"requires": {
- "@storybook/client-logger": "6.5.15",
- "core-js": "^3.8.2",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7"
+ "@storybook/csf-tools": "7.6.4",
+ "unplugin": "^1.3.1"
}
},
- "@storybook/semver": {
- "version": "7.3.2",
- "resolved": "https://registry.npmjs.org/@storybook/semver/-/semver-7.3.2.tgz",
- "integrity": "sha512-SWeszlsiPsMI0Ps0jVNtH64cI5c0UF3f7KgjVKJoNP30crQ6wUSddY2hsdeczZXEKVJGEn50Q60flcGsQGIcrg==",
+ "@storybook/csf-tools": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/csf-tools/-/csf-tools-7.6.4.tgz",
+ "integrity": "sha512-6sLayuhgReIK3/QauNj5BW4o4ZfEMJmKf+EWANPEM/xEOXXqrog6Un8sjtBuJS9N1DwyhHY6xfkEiPAwdttwqw==",
+ "dev": true,
+ "requires": {
+ "@babel/generator": "^7.23.0",
+ "@babel/parser": "^7.23.0",
+ "@babel/traverse": "^7.23.2",
+ "@babel/types": "^7.23.0",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/types": "7.6.4",
+ "fs-extra": "^11.1.0",
+ "recast": "^0.23.1",
+ "ts-dedent": "^2.0.0"
+ }
+ },
+ "@storybook/docs-mdx": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@storybook/docs-mdx/-/docs-mdx-0.1.0.tgz",
+ "integrity": "sha512-JDaBR9lwVY4eSH5W8EGHrhODjygPd6QImRbwjAuJNEnY0Vw4ie3bPkeGfnacB3OBW6u/agqPv2aRlR46JcAQLg==",
+ "dev": true
+ },
+ "@storybook/docs-tools": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/docs-tools/-/docs-tools-7.6.4.tgz",
+ "integrity": "sha512-2eGam43aD7O3cocA72Z63kRi7t/ziMSpst0qB218QwBWAeZjT4EYDh8V6j/Xhv6zVQL3msW7AglrQP5kCKPvPA==",
"dev": true,
"requires": {
- "core-js": "^3.6.5",
- "find-up": "^4.1.0"
+ "@storybook/core-common": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "@types/doctrine": "^0.0.3",
+ "assert": "^2.1.0",
+ "doctrine": "^3.0.0",
+ "lodash": "^4.17.21"
+ }
+ },
+ "@storybook/global": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz",
+ "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==",
+ "dev": true
+ },
+ "@storybook/manager": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/manager/-/manager-7.6.4.tgz",
+ "integrity": "sha512-Ug2ejfKgKre8h/RJbkumukwAA44TbvTPEjDcJmyFdAI+kHYhOYdKPEC2UNmVYz8/4HjwMTJQ3M7t/esK8HHY4A==",
+ "dev": true
+ },
+ "@storybook/manager-api": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-7.6.4.tgz",
+ "integrity": "sha512-RFb/iaBJfXygSgXkINPRq8dXu7AxBicTGX7MxqKXbz5FU7ANwV7abH6ONBYURkSDOH9//TQhRlVkF5u8zWg3bw==",
+ "dev": true,
+ "requires": {
+ "@storybook/channels": "7.6.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/global": "^5.0.0",
+ "@storybook/router": "7.6.4",
+ "@storybook/theming": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "dequal": "^2.0.2",
+ "lodash": "^4.17.21",
+ "memoizerific": "^1.11.3",
+ "semver": "^7.3.7",
+ "store2": "^2.14.2",
+ "telejson": "^7.2.0",
+ "ts-dedent": "^2.0.0"
},
"dependencies": {
- "find-up": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
- "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
- "dev": true,
- "requires": {
- "locate-path": "^5.0.0",
- "path-exists": "^4.0.0"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "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": {
- "p-locate": "^4.1.0"
+ "yallist": "^4.0.0"
}
},
- "p-limit": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
- "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"requires": {
- "p-try": "^2.0.0"
+ "lru-cache": "^6.0.0"
}
},
- "p-locate": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
- "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
- "dev": true,
- "requires": {
- "p-limit": "^2.2.0"
- }
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
}
}
},
- "@storybook/source-loader": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/source-loader/-/source-loader-6.5.15.tgz",
- "integrity": "sha512-MaWzki40g0/7NWmJgUBhOp+e7y8Ohw6G/bRr/rcDP7eXSnud6ThYylXv0QqBScLPPTy8txjmBClCoqdLGyvLWQ==",
+ "@storybook/mdx2-csf": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@storybook/mdx2-csf/-/mdx2-csf-1.1.0.tgz",
+ "integrity": "sha512-TXJJd5RAKakWx4BtpwvSNdgTDkKM6RkXU8GK34S/LhidQ5Pjz3wcnqb0TxEkfhK/ztbP8nKHqXFwLfa2CYkvQw==",
+ "dev": true
+ },
+ "@storybook/node-logger": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/node-logger/-/node-logger-7.6.4.tgz",
+ "integrity": "sha512-GDkEnnDj4Op+PExs8ZY/P6ox3wg453CdEIaR8PR9TxF/H/T2fBL6puzma3hN2CMam6yzfAL8U+VeIIDLQ5BZdQ==",
+ "dev": true
+ },
+ "@storybook/postinstall": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/postinstall/-/postinstall-7.6.4.tgz",
+ "integrity": "sha512-7uoB82hSzlFSdDMS3hKQD+AaeSvPit/fAMvXCBxn0/D0UGJUZcq4M9JcKBwEHkZJcbuDROgOTJ6TUeXi/FWO0w==",
+ "dev": true
+ },
+ "@storybook/preset-web-components-webpack": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/preset-web-components-webpack/-/preset-web-components-webpack-7.6.4.tgz",
+ "integrity": "sha512-dCp5fzgTwvN9DjlS770WMAwlTaUXv9HC3H1KwR9u5SXCyvLxwqxg/o8GfG970cyDqg3DNftlVQ3BCNrf8KT0cQ==",
"dev": true,
"requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "core-js": "^3.8.2",
- "estraverse": "^5.2.0",
- "global": "^4.4.0",
- "loader-utils": "^2.0.4",
- "lodash": "^4.17.21",
- "prettier": ">=2.2.1 <=2.3.0",
- "regenerator-runtime": "^0.13.7"
+ "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+ "@babel/plugin-syntax-import-meta": "^7.10.4",
+ "@babel/preset-env": "^7.23.2",
+ "@storybook/core-webpack": "7.6.4",
+ "@types/node": "^18.0.0",
+ "babel-loader": "^7.0.0 || ^8.0.0 || ^9.0.0",
+ "babel-plugin-bundled-import-meta": "^0.3.1"
}
},
- "@storybook/store": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/store/-/store-6.5.15.tgz",
- "integrity": "sha512-r6cYTf6GtbqgdI4ZG3xuWdJAAu5fJ3xAWMiDkHyoK2u+R2TeYXIsJvgn0BPrW87sZhELIkg4ckdFECmATs3kpQ==",
+ "@storybook/preview": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/preview/-/preview-7.6.4.tgz",
+ "integrity": "sha512-p9xIvNkgXgTpSRphOMV9KpIiNdkymH61jBg3B0XyoF6IfM1S2/mQGvC89lCVz1dMGk2SrH4g87/WcOapkU5ArA==",
+ "dev": true
+ },
+ "@storybook/preview-api": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-7.6.4.tgz",
+ "integrity": "sha512-KhisNdQX5NdfAln+spLU4B82d804GJQp/CnI5M1mm/taTnjvMgs/wTH9AmR89OPoq+tFZVW0vhy2zgPS3ar71A==",
"dev": true,
"requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "core-js": "^3.8.2",
- "fast-deep-equal": "^3.1.3",
- "global": "^4.4.0",
+ "@storybook/channels": "7.6.4",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-events": "7.6.4",
+ "@storybook/csf": "^0.1.2",
+ "@storybook/global": "^5.0.0",
+ "@storybook/types": "7.6.4",
+ "@types/qs": "^6.9.5",
+ "dequal": "^2.0.2",
"lodash": "^4.17.21",
"memoizerific": "^1.11.3",
- "regenerator-runtime": "^0.13.7",
- "slash": "^3.0.0",
- "stable": "^0.1.8",
+ "qs": "^6.10.0",
"synchronous-promise": "^2.0.15",
"ts-dedent": "^2.0.0",
"util-deprecate": "^1.0.2"
}
},
+ "@storybook/react-dom-shim": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-7.6.4.tgz",
+ "integrity": "sha512-wGJfomlDEBnowNmhmumWDu/AcUInxSoPqUUJPgk2f5oL0EW17fR9fDP/juG3XOEdieMDM0jDX48GML7lyvL2fg==",
+ "dev": true,
+ "requires": {}
+ },
+ "@storybook/router": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/router/-/router-7.6.4.tgz",
+ "integrity": "sha512-5MQ7Z4D7XNPN2yhFgjey7hXOYd6s8CggUqeAwhzGTex90SMCkKHSz1hfkcXn1ZqBPaall2b53uK553OvPLp9KQ==",
+ "dev": true,
+ "requires": {
+ "@storybook/client-logger": "7.6.4",
+ "memoizerific": "^1.11.3",
+ "qs": "^6.10.0"
+ }
+ },
"@storybook/telemetry": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-6.5.15.tgz",
- "integrity": "sha512-WHMRG6xMkEGscn1q4SotwzV8hxM1g3zHyXPN77iosY5zpOIn/qAzvkmW28V1DPH9jPWMZMizBgG1TIQvUpduXg==",
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/telemetry/-/telemetry-7.6.4.tgz",
+ "integrity": "sha512-Q4QpvcgloHUEqC9PGo7tgqkUH91/PjX+74/0Hi9orLo8QmLMgdYS5fweFwgSKoTwDGNg2PaHp/jqvhhw7UmnJA==",
"dev": true,
"requires": {
- "@storybook/client-logger": "6.5.15",
- "@storybook/core-common": "6.5.15",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/csf-tools": "7.6.4",
"chalk": "^4.1.0",
- "core-js": "^3.8.2",
"detect-package-manager": "^2.0.1",
"fetch-retry": "^5.0.2",
- "fs-extra": "^9.0.1",
- "global": "^4.4.0",
- "isomorphic-unfetch": "^3.1.0",
- "nanoid": "^3.3.1",
- "read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7"
+ "fs-extra": "^11.1.0",
+ "read-pkg-up": "^7.0.1"
},
"dependencies": {
"ansi-styles": {
@@ -27726,110 +17685,259 @@
}
},
"@storybook/theming": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.15.tgz",
- "integrity": "sha512-pgdW0lVZKKXQ4VhIfLHycMmwFSVOY7vLTKnytag4Y8Yz+aXm0bwDN/QxPntFzDH47F1Rcy2ywNnvty8ooDTvuA==",
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-7.6.4.tgz",
+ "integrity": "sha512-Z/dcC5EpkIXelYCkt9ojnX6D7qGOng8YHxV/OWlVE9TrEGYVGPOEfwQryR0RhmGpDha1TYESLYrsDb4A8nJ1EA==",
"dev": true,
"requires": {
- "@storybook/client-logger": "6.5.15",
- "core-js": "^3.8.2",
- "memoizerific": "^1.11.3",
- "regenerator-runtime": "^0.13.7"
+ "@emotion/use-insertion-effect-with-fallbacks": "^1.0.0",
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "memoizerific": "^1.11.3"
}
},
- "@storybook/ui": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/ui/-/ui-6.5.15.tgz",
- "integrity": "sha512-OO+TWZmI8ebWA1C3JBKNvbUbsgvt4GppqsGlkf5CTBZrT/MzmMlYiooLAtlY1ZPcMtTd5ynLxvroHWBEnMOk2A==",
+ "@storybook/types": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/types/-/types-7.6.4.tgz",
+ "integrity": "sha512-qyiiXPCvol5uVgfubcIMzJBA0awAyFPU+TyUP1mkPYyiTHnsHYel/mKlSdPjc8a97N3SlJXHOCx41Hde4IyJgg==",
"dev": true,
"requires": {
- "@storybook/addons": "6.5.15",
- "@storybook/api": "6.5.15",
- "@storybook/channels": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/components": "6.5.15",
- "@storybook/core-events": "6.5.15",
- "@storybook/router": "6.5.15",
- "@storybook/semver": "^7.3.2",
- "@storybook/theming": "6.5.15",
- "core-js": "^3.8.2",
- "memoizerific": "^1.11.3",
- "qs": "^6.10.0",
- "regenerator-runtime": "^0.13.7",
- "resolve-from": "^5.0.0"
+ "@storybook/channels": "7.6.4",
+ "@types/babel__core": "^7.0.0",
+ "@types/express": "^4.7.0",
+ "file-system-cache": "2.3.0"
}
},
"@storybook/web-components": {
- "version": "6.5.15",
- "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-6.5.15.tgz",
- "integrity": "sha512-nG76nKRVtavsFEdgqAJeNtuNoNVaHUPgWh0OaofSGqqAIScdWZ+3+aSfqBJy2wnt+hpU/SyCyWfEQujsjGjaTQ==",
- "dev": true,
- "requires": {
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/preset-env": "^7.12.11",
- "@storybook/addons": "6.5.15",
- "@storybook/client-api": "6.5.15",
- "@storybook/client-logger": "6.5.15",
- "@storybook/core": "6.5.15",
- "@storybook/core-common": "6.5.15",
- "@storybook/csf": "0.0.2--canary.4566f4d.1",
- "@storybook/docs-tools": "6.5.15",
- "@storybook/preview-web": "6.5.15",
- "@storybook/store": "6.5.15",
- "@types/node": "^14.14.20 || ^16.0.0",
- "@types/webpack-env": "^1.16.0",
- "babel-plugin-bundled-import-meta": "^0.3.1",
- "core-js": "^3.8.2",
- "global": "^4.4.0",
- "react": "16.14.0",
- "react-dom": "16.14.0",
- "read-pkg-up": "^7.0.1",
- "regenerator-runtime": "^0.13.7",
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/web-components/-/web-components-7.6.4.tgz",
+ "integrity": "sha512-SUvNDzSUkvQdDhPhZU04UNIpuyrpMylodXwe8UX6V/q8dbv1n5RP7mpBh9tGNb9pJKIIznybJAC/oGnUy9jkzw==",
+ "dev": true,
+ "requires": {
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/core-client": "7.6.4",
+ "@storybook/docs-tools": "7.6.4",
+ "@storybook/global": "^5.0.0",
+ "@storybook/manager-api": "7.6.4",
+ "@storybook/preview-api": "7.6.4",
+ "@storybook/types": "7.6.4",
+ "tiny-invariant": "^1.3.1",
"ts-dedent": "^2.0.0"
},
"dependencies": {
- "@types/node": {
- "version": "16.18.11",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz",
- "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==",
- "dev": true
- },
- "react": {
- "version": "16.14.0",
- "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz",
- "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2"
- }
- },
- "react-dom": {
- "version": "16.14.0",
- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz",
- "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1",
- "prop-types": "^15.6.2",
- "scheduler": "^0.19.1"
- }
- },
- "scheduler": {
- "version": "0.19.1",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz",
- "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==",
+ "@storybook/core-client": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/core-client/-/core-client-7.6.4.tgz",
+ "integrity": "sha512-0msqdGd+VYD1dRgAJ2StTu4d543Wveb7LVVujX3PwD/QCxmCaVUHuAoZrekM/H7jZLw546ZIbLZo0xWrADAUMw==",
"dev": true,
"requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
+ "@storybook/client-logger": "7.6.4",
+ "@storybook/preview-api": "7.6.4"
}
}
}
},
+ "@storybook/web-components-webpack5": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/@storybook/web-components-webpack5/-/web-components-webpack5-7.6.4.tgz",
+ "integrity": "sha512-/D2SkLCPP1ob6kVTJOhTp2nuzNRB+teN+sM1UHwUca3HbEEzwpp471K+PLYjj1WNPYDw/v21O8mG10fpxLlI0A==",
+ "dev": true,
+ "requires": {
+ "@babel/preset-env": "^7.23.2",
+ "@storybook/builder-webpack5": "7.6.4",
+ "@storybook/core-common": "7.6.4",
+ "@storybook/preset-web-components-webpack": "7.6.4",
+ "@storybook/web-components": "7.6.4",
+ "@types/node": "^18.0.0"
+ }
+ },
+ "@swc/core": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.100.tgz",
+ "integrity": "sha512-7dKgTyxJjlrMwFZYb1auj3Xq0D8ZBe+5oeIgfMlRU05doXZypYJe0LAk0yjj3WdbwYzpF+T1PLxwTWizI0pckw==",
+ "dev": true,
+ "requires": {
+ "@swc/core-darwin-arm64": "1.3.100",
+ "@swc/core-darwin-x64": "1.3.100",
+ "@swc/core-linux-arm64-gnu": "1.3.100",
+ "@swc/core-linux-arm64-musl": "1.3.100",
+ "@swc/core-linux-x64-gnu": "1.3.100",
+ "@swc/core-linux-x64-musl": "1.3.100",
+ "@swc/core-win32-arm64-msvc": "1.3.100",
+ "@swc/core-win32-ia32-msvc": "1.3.100",
+ "@swc/core-win32-x64-msvc": "1.3.100",
+ "@swc/counter": "^0.1.1",
+ "@swc/types": "^0.1.5"
+ }
+ },
+ "@swc/core-darwin-arm64": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.100.tgz",
+ "integrity": "sha512-XVWFsKe6ei+SsDbwmsuRkYck1SXRpO60Hioa4hoLwR8fxbA9eVp6enZtMxzVVMBi8ej5seZ4HZQeAWepbukiBw==",
+ "dev": true,
+ "optional": true
+ },
+ "@swc/core-darwin-x64": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.100.tgz",
+ "integrity": "sha512-KF/MXrnH1nakm1wbt4XV8FS7kvqD9TGmVxeJ0U4bbvxXMvzeYUurzg3AJUTXYmXDhH/VXOYJE5N5RkwZZPs5iA==",
+ "dev": true,
+ "optional": true
+ },
+ "@swc/core-linux-arm64-gnu": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.100.tgz",
+ "integrity": "sha512-p8hikNnAEJrw5vHCtKiFT4hdlQxk1V7vqPmvUDgL/qe2menQDK/i12tbz7/3BEQ4UqUPnvwpmVn2d19RdEMNxw==",
+ "dev": true,
+ "optional": true
+ },
+ "@swc/core-linux-arm64-musl": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.100.tgz",
+ "integrity": "sha512-BWx/0EeY89WC4q3AaIaBSGfQxkYxIlS3mX19dwy2FWJs/O+fMvF9oLk/CyJPOZzbp+1DjGeeoGFuDYpiNO91JA==",
+ "dev": true,
+ "optional": true
+ },
+ "@swc/core-linux-x64-gnu": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.100.tgz",
+ "integrity": "sha512-XUdGu3dxAkjsahLYnm8WijPfKebo+jHgHphDxaW0ovI6sTdmEGFDew7QzKZRlbYL2jRkUuuKuDGvD6lO5frmhA==",
+ "dev": true,
+ "optional": true
+ },
+ "@swc/core-linux-x64-musl": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.100.tgz",
+ "integrity": "sha512-PhoXKf+f0OaNW/GCuXjJ0/KfK9EJX7z2gko+7nVnEA0p3aaPtbP6cq1Ubbl6CMoPL+Ci3gZ7nYumDqXNc3CtLQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@swc/core-win32-arm64-msvc": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.100.tgz",
+ "integrity": "sha512-PwLADZN6F9cXn4Jw52FeP/MCLVHm8vwouZZSOoOScDtihjY495SSjdPnlosMaRSR4wJQssGwiD/4MbpgQPqbAw==",
+ "dev": true,
+ "optional": true
+ },
+ "@swc/core-win32-ia32-msvc": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.100.tgz",
+ "integrity": "sha512-0f6nicKSLlDKlyPRl2JEmkpBV4aeDfRQg6n8mPqgL7bliZIcDahG0ej+HxgNjZfS3e0yjDxsNRa6sAqWU2Z60A==",
+ "dev": true,
+ "optional": true
+ },
+ "@swc/core-win32-x64-msvc": {
+ "version": "1.3.100",
+ "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.100.tgz",
+ "integrity": "sha512-b7J0rPoMkRTa3XyUGt8PwCaIBuYWsL2DqbirrQKRESzgCvif5iNpqaM6kjIjI/5y5q1Ycv564CB51YDpiS8EtQ==",
+ "dev": true,
+ "optional": true
+ },
+ "@swc/counter": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz",
+ "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==",
+ "dev": true
+ },
+ "@swc/types": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz",
+ "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==",
+ "dev": true
+ },
+ "@types/babel__core": {
+ "version": "7.20.5",
+ "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz",
+ "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.20.7",
+ "@babel/types": "^7.20.7",
+ "@types/babel__generator": "*",
+ "@types/babel__template": "*",
+ "@types/babel__traverse": "*"
+ }
+ },
+ "@types/babel__generator": {
+ "version": "7.6.7",
+ "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.7.tgz",
+ "integrity": "sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__template": {
+ "version": "7.4.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz",
+ "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==",
+ "dev": true,
+ "requires": {
+ "@babel/parser": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@types/babel__traverse": {
+ "version": "7.20.4",
+ "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.4.tgz",
+ "integrity": "sha512-mSM/iKUk5fDDrEV/e83qY+Cr3I1+Q3qqTuEn++HAWYjEa1+NxZr6CNrcJGf2ZTnq4HoFGC3zaTPZTobCzCFukA==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.20.7"
+ }
+ },
+ "@types/body-parser": {
+ "version": "1.19.5",
+ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz",
+ "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==",
+ "dev": true,
+ "requires": {
+ "@types/connect": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/connect": {
+ "version": "3.4.38",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
+ "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/cross-spawn": {
+ "version": "6.0.6",
+ "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz",
+ "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
+ "@types/detect-port": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/detect-port/-/detect-port-1.3.5.tgz",
+ "integrity": "sha512-Rf3/lB9WkDfIL9eEKaSYKc+1L/rNVYBjThk22JTqQw0YozXarX8YljFAz+HCoC6h4B4KwCMsBPZHaFezwT4BNA==",
+ "dev": true
+ },
+ "@types/doctrine": {
+ "version": "0.0.3",
+ "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.3.tgz",
+ "integrity": "sha512-w5jZ0ee+HaPOaX25X2/2oGR/7rgAQSYII7X7pp0m9KgBfMP7uKfMfTvcpl5Dj+eDBbpxKGiqE+flqDr6XTd2RA==",
+ "dev": true
+ },
+ "@types/ejs": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-3.1.5.tgz",
+ "integrity": "sha512-nv+GSx77ZtXiJzwKdsASqi+YQ5Z7vwHsTP0JY2SiQgjGckkBRKZnk8nIM+7oUZ1VCtuTz0+By4qVR7fqzp/Dfg==",
+ "dev": true
+ },
+ "@types/emscripten": {
+ "version": "1.39.10",
+ "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.10.tgz",
+ "integrity": "sha512-TB/6hBkYQJxsZHSqyeuO1Jt0AB/bW6G7rHt9g7lML7SOF6lbgcHvw/Lr+69iqN0qxgXLhWKScAon73JNnptuDw==",
+ "dev": true
+ },
"@types/eslint": {
"version": "8.4.10",
"resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz",
@@ -27856,32 +17964,43 @@
"integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
"dev": true
},
- "@types/glob": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-8.0.0.tgz",
- "integrity": "sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==",
+ "@types/express": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
+ "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
"dev": true,
"requires": {
- "@types/minimatch": "*",
- "@types/node": "*"
+ "@types/body-parser": "*",
+ "@types/express-serve-static-core": "^4.17.33",
+ "@types/qs": "*",
+ "@types/serve-static": "*"
}
},
- "@types/graceful-fs": {
- "version": "4.1.6",
- "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz",
- "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==",
+ "@types/express-serve-static-core": {
+ "version": "4.17.41",
+ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz",
+ "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==",
"dev": true,
"requires": {
- "@types/node": "*"
+ "@types/node": "*",
+ "@types/qs": "*",
+ "@types/range-parser": "*",
+ "@types/send": "*"
}
},
- "@types/hast": {
- "version": "2.3.4",
- "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz",
- "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==",
+ "@types/find-cache-dir": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz",
+ "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==",
+ "dev": true
+ },
+ "@types/graceful-fs": {
+ "version": "4.1.9",
+ "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz",
+ "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==",
"dev": true,
"requires": {
- "@types/unist": "*"
+ "@types/node": "*"
}
},
"@types/html-minifier-terser": {
@@ -27890,31 +18009,31 @@
"integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==",
"dev": true
},
- "@types/is-function": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/is-function/-/is-function-1.0.1.tgz",
- "integrity": "sha512-A79HEEiwXTFtfY+Bcbo58M2GRYzCr9itHWzbzHVFNEYCcoU/MMGwYYf721gBrnhpj1s6RGVVha/IgNFnR0Iw/Q==",
+ "@types/http-errors": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz",
+ "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==",
"dev": true
},
"@types/istanbul-lib-coverage": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
- "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
+ "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
"dev": true
},
"@types/istanbul-lib-report": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
- "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz",
+ "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==",
"dev": true,
"requires": {
"@types/istanbul-lib-coverage": "*"
}
},
"@types/istanbul-reports": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz",
- "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==",
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz",
+ "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==",
"dev": true,
"requires": {
"@types/istanbul-lib-report": "*"
@@ -27927,24 +18046,27 @@
"dev": true
},
"@types/lodash": {
- "version": "4.14.191",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.191.tgz",
- "integrity": "sha512-BdZ5BCCvho3EIXw6wUCXHe7rS53AIDPLE+JzwgT+OsJk53oBfbSmZZ7CX4VaRoN78N+TJpFi9QPlfIVNmJYWxQ==",
+ "version": "4.14.202",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz",
+ "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==",
"dev": true
},
- "@types/mdast": {
- "version": "3.0.10",
- "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz",
- "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==",
- "dev": true,
- "requires": {
- "@types/unist": "*"
- }
+ "@types/mdx": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.10.tgz",
+ "integrity": "sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==",
+ "dev": true
},
- "@types/minimatch": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
- "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
+ "@types/mime": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz",
+ "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==",
+ "dev": true
+ },
+ "@types/mime-types": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@types/mime-types/-/mime-types-2.1.4.tgz",
+ "integrity": "sha512-lfU4b34HOri+kAY5UheuFMWPDOI+OPceBSHZKp69gEyTL/mmJ4cnU6Y/rlme3UL3GyOn6Y42hyIEw0/q8sWx5w==",
"dev": true
},
"@types/node": {
@@ -27954,137 +18076,127 @@
"dev": true
},
"@types/node-fetch": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.2.tgz",
- "integrity": "sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz",
+ "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==",
"dev": true,
"requires": {
"@types/node": "*",
- "form-data": "^3.0.0"
+ "form-data": "^4.0.0"
}
},
"@types/normalize-package-data": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz",
- "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==",
- "dev": true
- },
- "@types/npmlog": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz",
- "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==",
+ "version": "2.4.4",
+ "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz",
+ "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==",
"dev": true
},
"@types/parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==",
- "dev": true
- },
- "@types/parse5": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz",
- "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
+ "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==",
"dev": true
},
"@types/pretty-hrtime": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.1.tgz",
- "integrity": "sha512-VjID5MJb1eGKthz2qUerWT8+R4b9N+CHvGCzg9fn4kWZgaF9AhdYikQio3R7wV8YY1NsQKPaCwKz1Yff+aHNUQ==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/@types/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
+ "integrity": "sha512-nj39q0wAIdhwn7DGUyT9irmsKK1tV0bd5WFEhgpqNTMFZ8cE+jieuTphCW0tfdm47S2zVT5mr09B28b1chmQMA==",
"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==",
+ "@types/prop-types": {
+ "version": "15.7.11",
+ "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz",
+ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==",
"dev": true
},
- "@types/source-list-map": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz",
- "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==",
+ "@types/qs": {
+ "version": "6.9.10",
+ "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz",
+ "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==",
"dev": true
},
- "@types/tapable": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.8.tgz",
- "integrity": "sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ==",
+ "@types/range-parser": {
+ "version": "1.2.7",
+ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
+ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
"dev": true
},
- "@types/trusted-types": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz",
- "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==",
- "dev": true,
- "peer": true
- },
- "@types/uglify-js": {
- "version": "3.17.1",
- "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.17.1.tgz",
- "integrity": "sha512-GkewRA4i5oXacU/n4MA9+bLgt5/L3F1mKrYvFGm7r2ouLXhRKjuWwo9XHNnbx6WF3vlGW21S3fCvgqxvxXXc5g==",
+ "@types/react": {
+ "version": "18.2.45",
+ "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.45.tgz",
+ "integrity": "sha512-TtAxCNrlrBp8GoeEp1npd5g+d/OejJHFxS3OWmrPBMFaVQMSN0OFySozJio5BHxTuTeug00AVXVAjfDSfk+lUg==",
"dev": true,
"requires": {
- "source-map": "^0.6.1"
+ "@types/prop-types": "*",
+ "@types/scheduler": "*",
+ "csstype": "^3.0.2"
}
},
- "@types/unist": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz",
- "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==",
+ "@types/scheduler": {
+ "version": "0.16.8",
+ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.8.tgz",
+ "integrity": "sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==",
+ "dev": true
+ },
+ "@types/semver": {
+ "version": "7.5.6",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
+ "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
"dev": true
},
- "@types/webpack": {
- "version": "4.41.33",
- "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.33.tgz",
- "integrity": "sha512-PPajH64Ft2vWevkerISMtnZ8rTs4YmRbs+23c402J0INmxDKCrhZNvwZYtzx96gY2wAtXdrK1BS2fiC8MlLr3g==",
+ "@types/send": {
+ "version": "0.17.4",
+ "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz",
+ "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==",
"dev": true,
"requires": {
- "@types/node": "*",
- "@types/tapable": "^1",
- "@types/uglify-js": "*",
- "@types/webpack-sources": "*",
- "anymatch": "^3.0.0",
- "source-map": "^0.6.0"
+ "@types/mime": "^1",
+ "@types/node": "*"
}
},
- "@types/webpack-env": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/@types/webpack-env/-/webpack-env-1.18.0.tgz",
- "integrity": "sha512-56/MAlX5WMsPVbOg7tAxnYvNYMMWr/QJiIp6BxVSW3JJXUVzzOn64qW8TzQyMSqSUFM2+PVI4aUHcHOzIz/1tg==",
- "dev": true
- },
- "@types/webpack-sources": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-3.2.0.tgz",
- "integrity": "sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg==",
+ "@types/serve-static": {
+ "version": "1.15.5",
+ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz",
+ "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==",
"dev": true,
"requires": {
- "@types/node": "*",
- "@types/source-list-map": "*",
- "source-map": "^0.7.3"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
- "dev": true
- }
+ "@types/http-errors": "*",
+ "@types/mime": "*",
+ "@types/node": "*"
}
},
+ "@types/trusted-types": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
+ "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+ "dev": true,
+ "peer": true
+ },
+ "@types/unist": {
+ "version": "2.0.10",
+ "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz",
+ "integrity": "sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==",
+ "dev": true
+ },
+ "@types/uuid": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz",
+ "integrity": "sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g==",
+ "dev": true
+ },
"@types/yargs": {
- "version": "15.0.15",
- "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.15.tgz",
- "integrity": "sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==",
+ "version": "17.0.32",
+ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz",
+ "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==",
"dev": true,
"requires": {
"@types/yargs-parser": "*"
}
},
"@types/yargs-parser": {
- "version": "21.0.0",
- "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz",
- "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==",
+ "version": "21.0.3",
+ "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz",
+ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==",
"dev": true
},
"@web/config-loader": {
@@ -28150,79 +18262,6 @@
"integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==",
"dev": true
},
- "@webassemblyjs/helper-code-frame": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
- "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/wast-printer": "1.9.0"
- },
- "dependencies": {
- "@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- },
- "@webassemblyjs/wast-printer": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
- "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0",
- "@xtuc/long": "4.2.2"
- }
- }
- }
- },
- "@webassemblyjs/helper-fsm": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
- "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
- "dev": true
- },
- "@webassemblyjs/helper-module-context": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
- "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0"
- },
- "dependencies": {
- "@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- }
- }
- },
"@webassemblyjs/helper-numbers": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz",
@@ -28331,51 +18370,6 @@
"@webassemblyjs/utf8": "1.11.1"
}
},
- "@webassemblyjs/wast-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
- "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
- "dev": true,
- "requires": {
- "@webassemblyjs/ast": "1.9.0",
- "@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"
- },
- "dependencies": {
- "@webassemblyjs/ast": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
- "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
- "dev": true,
- "requires": {
- "@webassemblyjs/helper-module-context": "1.9.0",
- "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
- "@webassemblyjs/wast-parser": "1.9.0"
- }
- },
- "@webassemblyjs/floating-point-hex-parser": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
- "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
- "dev": true
- },
- "@webassemblyjs/helper-api-error": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
- "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
- "dev": true
- },
- "@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
- "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
- "dev": true
- }
- }
- },
"@webassemblyjs/wast-printer": {
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz",
@@ -28398,6 +18392,51 @@
"integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
"dev": true
},
+ "@yarnpkg/esbuild-plugin-pnp": {
+ "version": "3.0.0-rc.15",
+ "resolved": "https://registry.npmjs.org/@yarnpkg/esbuild-plugin-pnp/-/esbuild-plugin-pnp-3.0.0-rc.15.tgz",
+ "integrity": "sha512-kYzDJO5CA9sy+on/s2aIW0411AklfCi8Ck/4QDivOqsMKpStZA2SsR+X27VTggGwpStWaLrjJcDcdDMowtG8MA==",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.4.0"
+ }
+ },
+ "@yarnpkg/fslib": {
+ "version": "2.10.3",
+ "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz",
+ "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==",
+ "dev": true,
+ "requires": {
+ "@yarnpkg/libzip": "^2.3.0",
+ "tslib": "^1.13.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ }
+ }
+ },
+ "@yarnpkg/libzip": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz",
+ "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==",
+ "dev": true,
+ "requires": {
+ "@types/emscripten": "^1.39.6",
+ "tslib": "^1.13.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
+ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
+ "dev": true
+ }
+ }
+ },
"accepts": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -28409,9 +18448,9 @@
}
},
"acorn": {
- "version": "8.8.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz",
- "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==",
+ "version": "8.11.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
+ "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
"dev": true
},
"acorn-import-assertions": {
@@ -28427,6 +18466,15 @@
"integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==",
"dev": true
},
+ "agent-base": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz",
+ "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.3.4"
+ }
+ },
"aggregate-error": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
@@ -28437,31 +18485,6 @@
"indent-string": "^4.0.0"
}
},
- "airbnb-js-shims": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz",
- "integrity": "sha512-wJNXPH66U2xjgo1Zwyjf9EydvJ2Si94+vSdk6EERcBfB2VZkeltpqIats0cqIZMLCXP3zcyaUKGYQeIBT6XjsQ==",
- "dev": true,
- "requires": {
- "array-includes": "^3.0.3",
- "array.prototype.flat": "^1.2.1",
- "array.prototype.flatmap": "^1.2.1",
- "es5-shim": "^4.5.13",
- "es6-shim": "^0.35.5",
- "function.prototype.name": "^1.1.0",
- "globalthis": "^1.0.0",
- "object.entries": "^1.1.0",
- "object.fromentries": "^2.0.0 || ^1.0.0",
- "object.getownpropertydescriptors": "^2.0.3",
- "object.values": "^1.1.0",
- "promise.allsettled": "^1.0.0",
- "promise.prototype.finally": "^3.1.0",
- "string.prototype.matchall": "^4.0.0 || ^3.0.1",
- "string.prototype.padend": "^3.0.0",
- "string.prototype.padstart": "^3.0.0",
- "symbol.prototype.description": "^1.0.0"
- }
- },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -28474,12 +18497,34 @@
"uri-js": "^4.2.2"
}
},
- "ajv-errors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
- "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
+ "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": {}
+ "requires": {
+ "ajv": "^8.0.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "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
+ }
+ }
},
"ajv-keywords": {
"version": "3.5.2",
@@ -28488,21 +18533,6 @@
"dev": true,
"requires": {}
},
- "ansi-align": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
- "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
- "dev": true,
- "requires": {
- "string-width": "^4.1.0"
- }
- },
- "ansi-colors": {
- "version": "3.2.4",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
- "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==",
- "dev": true
- },
"ansi-html-community": {
"version": "0.0.8",
"resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz",
@@ -28524,15 +18554,6 @@
"color-convert": "^1.9.0"
}
},
- "ansi-to-html": {
- "version": "0.6.15",
- "resolved": "https://registry.npmjs.org/ansi-to-html/-/ansi-to-html-0.6.15.tgz",
- "integrity": "sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ==",
- "dev": true,
- "requires": {
- "entities": "^2.0.0"
- }
- },
"anymatch": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
@@ -28549,22 +18570,6 @@
"integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g==",
"dev": true
},
- "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": "2.0.0",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
- "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
- "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",
@@ -28574,23 +18579,14 @@
"sprintf-js": "~1.0.2"
}
},
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
- "dev": true
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
- "dev": true
+ "aria-hidden": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.3.tgz",
+ "integrity": "sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==",
+ "dev": true,
+ "requires": {
+ "tslib": "^2.0.0"
+ }
},
"array-back": {
"version": "6.2.2",
@@ -28598,199 +18594,58 @@
"integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==",
"dev": true
},
- "array-find-index": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
- "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==",
- "dev": true,
- "optional": true
- },
"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
},
- "array-includes": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz",
- "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "is-string": "^1.0.7"
- }
- },
"array-union": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true
},
- "array-uniq": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
- "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==",
- "dev": true
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
- "dev": true
- },
- "array.prototype.flat": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz",
- "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
- }
- },
- "array.prototype.flatmap": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz",
- "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "es-shim-unscopables": "^1.0.0"
- }
- },
- "array.prototype.map": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.5.tgz",
- "integrity": "sha512-gfaKntvwqYIuC7mLLyv2wzZIJqrRhn5PZ9EfFejSx6a78sV7iDsGpG9P+3oUPtm1Rerqm6nrKS4FYuTIvWfo3g==",
+ "assert": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz",
+ "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==",
"dev": true,
"requires": {
"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"
+ "is-nan": "^1.3.2",
+ "object-is": "^1.1.5",
+ "object.assign": "^4.1.4",
+ "util": "^0.12.5"
}
},
- "array.prototype.reduce": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz",
- "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==",
+ "ast-types": {
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
+ "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
"dev": true,
"requires": {
- "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"
+ "tslib": "^2.0.1"
}
},
- "arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
+ "async": {
+ "version": "3.2.5",
+ "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz",
+ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==",
"dev": true
},
- "asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0",
- "safer-buffer": "^2.1.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "assert": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz",
- "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==",
- "dev": true,
- "requires": {
- "object-assign": "^4.1.1",
- "util": "0.10.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
- "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==",
- "dev": true
- },
- "util": {
- "version": "0.10.3",
- "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz",
- "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==",
- "dev": true,
- "requires": {
- "inherits": "2.0.1"
- }
- }
- }
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
+ "async-limiter": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
+ "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==",
"dev": true
},
- "async-each": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
- "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
- "dev": true,
- "optional": 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
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
- "autoprefixer": {
- "version": "9.8.8",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz",
- "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==",
- "dev": true,
- "requires": {
- "browserslist": "^4.12.0",
- "caniuse-lite": "^1.0.30001109",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "picocolors": "^0.2.1",
- "postcss": "^7.0.32",
- "postcss-value-parser": "^4.1.0"
- }
- },
"available-typed-arrays": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
@@ -28803,6 +18658,13 @@
"integrity": "sha512-b1WlTV8+XKLj9gZy2DZXgQiyDp9xkkoe2a6U6UbYccScq2wgH/YwCeI2/Jq2mgo0HzQxqJOjWZBLeA/mqsk5Mg==",
"dev": true
},
+ "babel-core": {
+ "version": "7.0.0-bridge.0",
+ "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz",
+ "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==",
+ "dev": true,
+ "requires": {}
+ },
"babel-loader": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz",
@@ -28813,92 +18675,6 @@
"loader-utils": "^2.0.0",
"make-dir": "^3.1.0",
"schema-utils": "^2.6.5"
- },
- "dependencies": {
- "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"
- }
- },
- "locate-path": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
- "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
- "dev": true,
- "requires": {
- "p-locate": "^4.1.0"
- }
- },
- "make-dir": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
- "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
- "dev": true,
- "requires": {
- "semver": "^6.0.0"
- }
- },
- "p-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"
- }
- },
- "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"
- }
- }
- }
- },
- "babel-plugin-apply-mdx-type-prop": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz",
- "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "7.10.4",
- "@mdx-js/util": "1.6.22"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- }
}
},
"babel-plugin-bundled-import-meta": {
@@ -28911,23 +18687,6 @@
"@babel/template": "^7.7.0"
}
},
- "babel-plugin-extract-import-names": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz",
- "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "7.10.4"
- },
- "dependencies": {
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- }
- }
- },
"babel-plugin-istanbul": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz",
@@ -28941,130 +18700,60 @@
"test-exclude": "^6.0.0"
}
},
- "babel-plugin-macros": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz",
- "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==",
- "dev": true,
- "requires": {
- "@babel/runtime": "^7.12.5",
- "cosmiconfig": "^7.0.0",
- "resolve": "^1.19.0"
- }
- },
- "babel-plugin-named-exports-order": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-named-exports-order/-/babel-plugin-named-exports-order-0.0.2.tgz",
- "integrity": "sha512-OgOYHOLoRK+/mvXU9imKHlG6GkPLYrUCvFXG/CM93R/aNNO8pOOF4aS+S8CCHMDQoNSeiOYEZb/G6RwL95Jktw==",
- "dev": true
- },
"babel-plugin-polyfill-corejs2": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz",
- "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.17.7",
- "@babel/helper-define-polyfill-provider": "^0.3.3",
- "semver": "^6.1.1"
- }
- },
- "babel-plugin-polyfill-corejs3": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz",
- "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==",
+ "version": "0.4.7",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.7.tgz",
+ "integrity": "sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==",
"dev": true,
"requires": {
- "@babel/helper-define-polyfill-provider": "^0.3.3",
- "core-js-compat": "^3.25.1"
+ "@babel/compat-data": "^7.22.6",
+ "@babel/helper-define-polyfill-provider": "^0.4.4",
+ "semver": "^6.3.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
+ "dev": true
+ }
}
},
"babel-plugin-polyfill-regenerator": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz",
- "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==",
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.4.tgz",
+ "integrity": "sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==",
"dev": true,
"requires": {
- "@babel/helper-define-polyfill-provider": "^0.3.3"
+ "@babel/helper-define-polyfill-provider": "^0.4.4"
}
},
- "bail": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz",
- "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==",
- "dev": true
- },
"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
},
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "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"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- }
- }
- },
"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-processor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/batch-processor/-/batch-processor-1.0.0.tgz",
- "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==",
- "dev": true
- },
"better-opn": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-2.1.1.tgz",
- "integrity": "sha512-kIPXZS5qwyKiX/HcRvDYfmBQUa8XP17I0mYZZ0y4UhpYOSvtsLHDYqmomS+Mj20aDvD3knEiQ0ecQy2nhio3yA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz",
+ "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==",
"dev": true,
"requires": {
- "open": "^7.0.3"
- },
- "dependencies": {
- "open": {
- "version": "7.4.2",
- "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz",
- "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==",
- "dev": true,
- "requires": {
- "is-docker": "^2.0.0",
- "is-wsl": "^2.1.1"
- }
- }
+ "open": "^8.0.4"
}
},
"big-integer": {
- "version": "1.6.51",
- "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz",
- "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==",
- "dev": true,
- "optional": true
+ "version": "1.6.52",
+ "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
+ "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
+ "dev": true
},
"big.js": {
"version": "5.2.2",
@@ -29078,28 +18767,17 @@
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true
},
- "bindings": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "bl": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
"dev": true,
- "optional": true,
"requires": {
- "file-uri-to-path": "1.0.0"
+ "buffer": "^5.5.0",
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.4.0"
}
},
- "bluebird": {
- "version": "3.7.2",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
- "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
- "dev": true
- },
- "bn.js": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz",
- "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==",
- "dev": true
- },
"body-parser": {
"version": "1.20.1",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
@@ -29149,87 +18827,13 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"dev": true
},
- "boxen": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
- "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
- "dev": true,
- "requires": {
- "ansi-align": "^3.0.0",
- "camelcase": "^6.2.0",
- "chalk": "^4.1.0",
- "cli-boxes": "^2.2.1",
- "string-width": "^4.2.2",
- "type-fest": "^0.20.2",
- "widest-line": "^3.1.0",
- "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"
- }
- },
- "camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "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
- },
- "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"
- }
- }
- }
- },
"bplist-parser": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.1.1.tgz",
- "integrity": "sha512-2AEM0FXy8ZxVLBuqX0hqt1gDwcnz2zygEkQ6zaD5Wko/sB9paUNwlpawrFtKeHUAQUOzjVy9AO4oeonqIHKA9Q==",
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz",
+ "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==",
"dev": true,
- "optional": true,
"requires": {
- "big-integer": "^1.6.7"
+ "big-integer": "^1.6.44"
}
},
"brace-expansion": {
@@ -29251,109 +18855,31 @@
"fill-range": "^7.0.1"
}
},
- "brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
- "dev": true
- },
"browser-assert": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz",
"integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==",
"dev": true
},
- "browserify-aes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
- "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
- "dev": true,
- "requires": {
- "buffer-xor": "^1.0.3",
- "cipher-base": "^1.0.0",
- "create-hash": "^1.1.0",
- "evp_bytestokey": "^1.0.3",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "browserify-cipher": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
- "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
- "dev": true,
- "requires": {
- "browserify-aes": "^1.0.4",
- "browserify-des": "^1.0.0",
- "evp_bytestokey": "^1.0.0"
- }
- },
- "browserify-des": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz",
- "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "des.js": "^1.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "browserify-rsa": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz",
- "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==",
- "dev": true,
- "requires": {
- "bn.js": "^5.0.0",
- "randombytes": "^2.0.1"
- }
- },
- "browserify-sign": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz",
- "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==",
- "dev": true,
- "requires": {
- "bn.js": "^5.1.1",
- "browserify-rsa": "^4.0.1",
- "create-hash": "^1.2.0",
- "create-hmac": "^1.1.7",
- "elliptic": "^6.5.3",
- "inherits": "^2.0.4",
- "parse-asn1": "^5.1.5",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "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
- }
- }
- },
"browserify-zlib": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
- "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
+ "integrity": "sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==",
"dev": true,
"requires": {
- "pako": "~1.0.5"
+ "pako": "~0.2.0"
}
},
"browserslist": {
- "version": "4.21.4",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz",
- "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==",
+ "version": "4.22.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
+ "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30001400",
- "electron-to-chromium": "^1.4.251",
- "node-releases": "^2.0.6",
- "update-browserslist-db": "^1.0.9"
+ "caniuse-lite": "^1.0.30001565",
+ "electron-to-chromium": "^1.4.601",
+ "node-releases": "^2.0.14",
+ "update-browserslist-db": "^1.0.13"
}
},
"bser": {
@@ -29366,117 +18892,33 @@
}
},
"buffer": {
- "version": "4.9.2",
- "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
- "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
"dev": true,
"requires": {
- "base64-js": "^1.0.2",
- "ieee754": "^1.1.4",
- "isarray": "^1.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- }
+ "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",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true
},
- "buffer-xor": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
- "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==",
- "dev": true
- },
- "builtin-status-codes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
- "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==",
- "dev": true
- },
"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": "15.3.0",
- "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
- "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
- "dev": true,
- "requires": {
- "@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"
- },
- "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"
- }
- },
- "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"
- }
- },
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "dev": true
- }
- }
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "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"
- }
- },
"cached-iterable": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/cached-iterable/-/cached-iterable-0.3.0.tgz",
@@ -29484,21 +18926,16 @@
"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==",
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz",
+ "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==",
"dev": true,
"requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.1",
+ "set-function-length": "^1.1.1"
}
},
- "call-me-maybe": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
- "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==",
- "dev": true
- },
"callsites": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
@@ -29521,59 +18958,18 @@
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
"dev": true
},
- "camelcase-css": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
- "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true
- },
- "camelcase-keys": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
- "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "camelcase": "^2.0.0",
- "map-obj": "^1.0.0"
- },
- "dependencies": {
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==",
- "dev": true,
- "optional": true
- }
- }
- },
"caniuse-lite": {
- "version": "1.0.30001442",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz",
- "integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==",
+ "version": "1.0.30001570",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz",
+ "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==",
"dev": true
},
- "capture-exit": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/capture-exit/-/capture-exit-2.0.0.tgz",
- "integrity": "sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g==",
- "dev": true,
- "requires": {
- "rsvp": "^4.8.4"
- }
- },
"case-sensitive-paths-webpack-plugin": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz",
"integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==",
"dev": true
},
- "ccount": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz",
- "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==",
- "dev": true
- },
"chalk": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
@@ -29585,24 +18981,6 @@
"supports-color": "^5.3.0"
}
},
- "character-entities": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz",
- "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==",
- "dev": true
- },
- "character-entities-legacy": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz",
- "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==",
- "dev": true
- },
- "character-reference-invalid": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz",
- "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==",
- "dev": true
- },
"chokidar": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@@ -29632,107 +19010,11 @@
"dev": true
},
"ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "version": "3.9.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz",
+ "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==",
"dev": true
},
- "cipher-base": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz",
- "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
"clean-css": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz",
@@ -29748,10 +19030,19 @@
"integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
"dev": true
},
- "cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
+ "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.2",
+ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
+ "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
"dev": true
},
"cli-table3": {
@@ -29762,8 +19053,33 @@
"requires": {
"@colors/colors": "1.5.0",
"string-width": "^4.2.0"
+ },
+ "dependencies": {
+ "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
+ },
+ "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"
+ }
+ }
}
},
+ "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",
@@ -29775,22 +19091,6 @@
"shallow-clone": "^3.0.0"
}
},
- "collapse-white-space": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz",
- "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==",
- "dev": true
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
"color-convert": {
"version": "1.9.3",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
@@ -29806,16 +19106,10 @@
"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": "1.4.0",
- "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
- "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
+ "version": "2.0.20",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz",
+ "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==",
"dev": true
},
"combined-stream": {
@@ -29827,12 +19121,6 @@
"delayed-stream": "~1.0.0"
}
},
- "comma-separated-tokens": {
- "version": "1.0.8",
- "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz",
- "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==",
- "dev": true
- },
"command-line-args": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.2.tgz",
@@ -29846,9 +19134,9 @@
}
},
"commander": {
- "version": "6.2.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
- "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
+ "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
},
"comment-parser": {
@@ -29857,18 +19145,18 @@
"integrity": "sha512-pm0b+qv+CkWNriSTMsfnjChF9kH0kxz55y44Wo5le9qLxMj5xDQAaEd9ZN1ovSuk9CsrncWaFwgpOMg7ClJwkw==",
"dev": true
},
+ "common-path-prefix": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz",
+ "integrity": "sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==",
+ "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
},
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
"compressible": {
"version": "2.0.18",
"resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz",
@@ -29907,6 +19195,12 @@
"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
}
}
},
@@ -29928,16 +19222,10 @@
"typedarray": "^0.0.6"
},
"dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
"readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "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",
@@ -29949,6 +19237,12 @@
"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",
@@ -29960,18 +19254,6 @@
}
}
},
- "console-browserify": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz",
- "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==",
- "dev": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
- "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==",
- "dev": true
- },
"constants-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
@@ -29985,14 +19267,6 @@
"dev": true,
"requires": {
"safe-buffer": "5.2.1"
- },
- "dependencies": {
- "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
- }
}
},
"content-type": {
@@ -30002,9 +19276,9 @@
"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==",
+ "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
},
"cookie": {
@@ -30019,65 +19293,13 @@
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
"dev": true
},
- "copy-concurrently": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
- "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true
- },
- "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,
- "requires": {
- "minimist": "^1.2.6"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
- "dev": true
- },
- "core-js": {
- "version": "3.27.1",
- "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.27.1.tgz",
- "integrity": "sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==",
- "dev": true
- },
"core-js-compat": {
- "version": "3.27.1",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.27.1.tgz",
- "integrity": "sha512-Dg91JFeCDA17FKnneN7oCMz4BkQ4TcffkgHP4OWwp9yx3pi7ubqMDXXSacfNak1PQqjc95skyt+YBLHQJnkJwA==",
+ "version": "3.34.0",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz",
+ "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==",
"dev": true,
"requires": {
- "browserslist": "^4.21.4"
+ "browserslist": "^4.22.2"
}
},
"core-util-is": {
@@ -30099,322 +19321,6 @@
"yaml": "^1.10.0"
}
},
- "cp-file": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz",
- "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "make-dir": "^3.0.0",
- "nested-error-stacks": "^2.0.0",
- "p-event": "^4.1.0"
- },
- "dependencies": {
- "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"
- }
- }
- }
- },
- "cpy": {
- "version": "8.1.2",
- "resolved": "https://registry.npmjs.org/cpy/-/cpy-8.1.2.tgz",
- "integrity": "sha512-dmC4mUesv0OYH2kNFEidtf/skUwv4zePmGeepjyyJ0qTo5+8KhA1o99oIAwVVLzQMAeDJml74d6wPPKb6EZUTg==",
- "dev": true,
- "requires": {
- "arrify": "^2.0.1",
- "cp-file": "^7.0.0",
- "globby": "^9.2.0",
- "has-glob": "^1.0.0",
- "junk": "^3.1.0",
- "nested-error-stacks": "^2.1.0",
- "p-all": "^2.1.0",
- "p-filter": "^2.1.0",
- "p-map": "^3.0.0"
- },
- "dependencies": {
- "@nodelib/fs.stat": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz",
- "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==",
- "dev": true
- },
- "@types/glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
- "dev": true,
- "requires": {
- "@types/minimatch": "*",
- "@types/node": "*"
- }
- },
- "array-union": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
- "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==",
- "dev": true,
- "requires": {
- "array-uniq": "^1.0.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "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"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "dir-glob": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz",
- "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==",
- "dev": true,
- "requires": {
- "path-type": "^3.0.0"
- }
- },
- "fast-glob": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz",
- "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==",
- "dev": true,
- "requires": {
- "@mrmlnc/readdir-enhanced": "^2.2.1",
- "@nodelib/fs.stat": "^1.1.2",
- "glob-parent": "^3.1.0",
- "is-glob": "^4.0.0",
- "merge2": "^1.2.3",
- "micromatch": "^3.1.10"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
- "dev": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- },
- "globby": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
- "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
- "dev": true,
- "requires": {
- "@types/glob": "^7.1.1",
- "array-union": "^1.0.2",
- "dir-glob": "^2.2.2",
- "fast-glob": "^2.2.6",
- "glob": "^7.1.3",
- "ignore": "^4.0.3",
- "pify": "^4.0.1",
- "slash": "^2.0.0"
- }
- },
- "ignore": {
- "version": "4.0.6",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
- "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
- "dev": true
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "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"
- }
- },
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==",
- "dev": true
- }
- }
- },
- "slash": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "create-ecdh": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz",
- "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "elliptic": "^6.5.3"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
- "create-hash": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
- "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.1",
- "inherits": "^2.0.1",
- "md5.js": "^1.3.4",
- "ripemd160": "^2.0.1",
- "sha.js": "^2.4.0"
- }
- },
- "create-hmac": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz",
- "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
- "dev": true,
- "requires": {
- "cipher-base": "^1.0.3",
- "create-hash": "^1.1.0",
- "inherits": "^2.0.1",
- "ripemd160": "^2.0.0",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
- }
- },
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -30426,139 +19332,11 @@
"which": "^2.0.1"
}
},
- "crypto-browserify": {
- "version": "3.12.0",
- "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz",
- "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==",
- "dev": true,
- "requires": {
- "browserify-cipher": "^1.0.0",
- "browserify-sign": "^4.0.0",
- "create-ecdh": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.0",
- "diffie-hellman": "^5.0.0",
- "inherits": "^2.0.1",
- "pbkdf2": "^3.0.3",
- "public-encrypt": "^4.0.0",
- "randombytes": "^2.0.0",
- "randomfill": "^1.0.3"
- }
- },
- "css-loader": {
- "version": "5.2.7",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-5.2.7.tgz",
- "integrity": "sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==",
- "dev": true,
- "requires": {
- "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"
- },
- "dependencies": {
- "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": {}
- },
- "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"
- }
- },
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "postcss": {
- "version": "8.4.21",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz",
- "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==",
- "dev": true,
- "requires": {
- "nanoid": "^3.3.4",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- }
- },
- "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.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz",
- "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==",
- "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"
- }
- },
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- },
- "semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
- "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
- }
- }
+ "crypto-random-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz",
+ "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==",
+ "dev": true
},
"css-select": {
"version": "4.3.0",
@@ -30585,15 +19363,11 @@
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
"dev": true
},
- "currently-unhandled": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
- "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==",
- "dev": true,
- "optional": true,
- "requires": {
- "array-find-index": "^1.0.1"
- }
+ "csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "dev": true
},
"custom-elements-manifest": {
"version": "1.0.0",
@@ -30601,12 +19375,6 @@
"integrity": "sha512-j59k0ExGCKA8T6Mzaq+7axc+KVHwpEphEERU7VZ99260npu/p/9kd+Db+I3cGKxHkM5y6q5gnlXn00mzRQkX2A==",
"dev": true
},
- "cyclist": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
- "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==",
- "dev": true
- },
"debounce": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz",
@@ -30622,35 +19390,40 @@
"ms": "2.1.2"
}
},
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
- "dev": true,
- "optional": true
- },
- "decode-uri-component": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
- "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
- "dev": true
- },
"deepmerge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
- "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
+ "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-browser-id": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz",
+ "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==",
+ "dev": true,
+ "requires": {
+ "bplist-parser": "^0.2.0",
+ "untildify": "^4.0.0"
+ }
+ },
+ "defaults": {
"version": "1.0.4",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-1.0.4.tgz",
- "integrity": "sha512-qPy925qewwul9Hifs+3sx1ZYn14obHxpkX+mPD369w4Rzg+YkJBgi3SOvwUq81nWSjqGUegIgEPwD8u+HUnxlw==",
+ "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz",
+ "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==",
"dev": true,
- "optional": true,
"requires": {
- "bplist-parser": "^0.1.0",
- "meow": "^3.1.0",
- "untildify": "^2.0.0"
+ "clone": "^1.0.2"
+ }
+ },
+ "define-data-property": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz",
+ "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==",
+ "dev": true,
+ "requires": {
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
}
},
"define-lazy-prop": {
@@ -30660,23 +19433,61 @@
"dev": true
},
"define-properties": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz",
- "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
"dev": true,
"requires": {
+ "define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
}
},
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "defu": {
+ "version": "6.1.3",
+ "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.3.tgz",
+ "integrity": "sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==",
+ "dev": true
+ },
+ "del": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
+ "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
"dev": true,
"requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
+ "globby": "^11.0.1",
+ "graceful-fs": "^4.2.4",
+ "is-glob": "^4.0.1",
+ "is-path-cwd": "^2.2.0",
+ "is-path-inside": "^3.0.2",
+ "p-map": "^4.0.0",
+ "rimraf": "^3.0.2",
+ "slash": "^3.0.0"
+ },
+ "dependencies": {
+ "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"
+ }
+ },
+ "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"
+ }
+ }
}
},
"delayed-stream": {
@@ -30685,27 +19496,17 @@
"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",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
"dev": true
},
- "des.js": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz",
- "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "minimalistic-assert": "^1.0.0"
- }
+ "dequal": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
+ "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
+ "dev": true
},
"destroy": {
"version": "1.2.0",
@@ -30713,14 +19514,17 @@
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
"dev": true
},
- "detab": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz",
- "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==",
- "dev": true,
- "requires": {
- "repeat-string": "^1.5.4"
- }
+ "detect-indent": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz",
+ "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==",
+ "dev": true
+ },
+ "detect-node-es": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz",
+ "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==",
+ "dev": true
},
"detect-package-manager": {
"version": "2.0.1",
@@ -30741,25 +19545,6 @@
"debug": "4"
}
},
- "diffie-hellman": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
- "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "miller-rabin": "^4.0.0",
- "randombytes": "^2.0.0"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
"dir-glob": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
@@ -30798,18 +19583,6 @@
"entities": "^2.0.0"
}
},
- "dom-walk": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
- "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
- "dev": true
- },
- "domain-browser": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
- "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",
- "dev": true
- },
"domelementtype": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
@@ -30847,15 +19620,15 @@
}
},
"dotenv": {
- "version": "8.6.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz",
- "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==",
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
+ "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
"dev": true
},
"dotenv-expand": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
- "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz",
+ "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==",
"dev": true
},
"duplexify": {
@@ -30870,16 +19643,10 @@
"stream-shift": "^1.0.0"
},
"dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
"readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "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",
@@ -30891,6 +19658,12 @@
"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",
@@ -30902,54 +19675,37 @@
}
}
},
+ "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.284",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz",
- "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==",
- "dev": true
- },
- "element-resize-detector": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/element-resize-detector/-/element-resize-detector-1.2.4.tgz",
- "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==",
+ "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": {
- "batch-processor": "1.0.0"
+ "jake": "^10.8.5"
}
},
- "elliptic": {
- "version": "6.5.4",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz",
- "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==",
- "dev": true,
- "requires": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "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"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
+ "electron-to-chromium": {
+ "version": "1.4.613",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.613.tgz",
+ "integrity": "sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==",
+ "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==",
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
"dev": true
},
"emojis-list": {
@@ -30981,14 +19737,6 @@
"requires": {
"graceful-fs": "^4.2.4",
"tapable": "^2.2.0"
- },
- "dependencies": {
- "tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true
- }
}
},
"entities": {
@@ -30997,14 +19745,11 @@
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
"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,
- "requires": {
- "prr": "~1.0.1"
- }
+ "envinfo": {
+ "version": "7.11.0",
+ "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz",
+ "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==",
+ "dev": true
},
"error-ex": {
"version": "1.3.2",
@@ -31015,117 +19760,57 @@
"is-arrayish": "^0.2.1"
}
},
- "es-abstract": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.0.tgz",
- "integrity": "sha512-GUGtW7eXQay0c+PRq0sGIKSdaBorfVqsCMhGHo4elP7YVqZu9nCZS4UkK4gv71gOWNMra/PaSKD3ao1oWExO0g==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "es-set-tostringtag": "^2.0.0",
- "es-to-primitive": "^1.2.1",
- "function-bind": "^1.1.1",
- "function.prototype.name": "^1.1.5",
- "get-intrinsic": "^1.1.3",
- "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.4",
- "is-array-buffer": "^3.0.0",
- "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.2",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.4.3",
- "safe-regex-test": "^1.0.0",
- "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"
- }
- },
- "es-array-method-boxes-properly": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
- "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
- "dev": true
- },
- "es-get-iterator": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.2.tgz",
- "integrity": "sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.0",
- "has-symbols": "^1.0.1",
- "is-arguments": "^1.1.0",
- "is-map": "^2.0.2",
- "is-set": "^2.0.2",
- "is-string": "^1.0.5",
- "isarray": "^2.0.5"
- }
- },
"es-module-lexer": {
"version": "0.9.3",
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz",
"integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==",
"dev": true
},
- "es-set-tostringtag": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz",
- "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.1.3",
- "has": "^1.0.3",
- "has-tostringtag": "^1.0.0"
- }
- },
- "es-shim-unscopables": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz",
- "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
+ "esbuild": {
+ "version": "0.18.20",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz",
+ "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==",
+ "dev": true,
+ "requires": {
+ "@esbuild/android-arm": "0.18.20",
+ "@esbuild/android-arm64": "0.18.20",
+ "@esbuild/android-x64": "0.18.20",
+ "@esbuild/darwin-arm64": "0.18.20",
+ "@esbuild/darwin-x64": "0.18.20",
+ "@esbuild/freebsd-arm64": "0.18.20",
+ "@esbuild/freebsd-x64": "0.18.20",
+ "@esbuild/linux-arm": "0.18.20",
+ "@esbuild/linux-arm64": "0.18.20",
+ "@esbuild/linux-ia32": "0.18.20",
+ "@esbuild/linux-loong64": "0.18.20",
+ "@esbuild/linux-mips64el": "0.18.20",
+ "@esbuild/linux-ppc64": "0.18.20",
+ "@esbuild/linux-riscv64": "0.18.20",
+ "@esbuild/linux-s390x": "0.18.20",
+ "@esbuild/linux-x64": "0.18.20",
+ "@esbuild/netbsd-x64": "0.18.20",
+ "@esbuild/openbsd-x64": "0.18.20",
+ "@esbuild/sunos-x64": "0.18.20",
+ "@esbuild/win32-arm64": "0.18.20",
+ "@esbuild/win32-ia32": "0.18.20",
+ "@esbuild/win32-x64": "0.18.20"
+ }
+ },
+ "esbuild-plugin-alias": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/esbuild-plugin-alias/-/esbuild-plugin-alias-0.2.1.tgz",
+ "integrity": "sha512-jyfL/pwPqaFXyKnj8lP8iLk6Z0m099uXR45aSN8Av1XD4vhvQutxxPzgA2bTcAwQpa1zCXDcWOlhFgyP3GKqhQ==",
+ "dev": true
},
- "es-to-primitive": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
- "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "esbuild-register": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.5.0.tgz",
+ "integrity": "sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==",
"dev": true,
"requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
+ "debug": "^4.3.4"
}
},
- "es5-shim": {
- "version": "4.6.7",
- "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.6.7.tgz",
- "integrity": "sha512-jg21/dmlrNQI7JyyA2w7n+yifSxBng0ZralnSfVZjoCawgNTCnS+yBCyVM9DL5itm7SUnDGgv7hcq2XCZX4iRQ==",
- "dev": true
- },
- "es6-shim": {
- "version": "0.35.7",
- "resolved": "https://registry.npmjs.org/es6-shim/-/es6-shim-0.35.7.tgz",
- "integrity": "sha512-baZkUfTDSx7X69+NA8imbvGrsPfqH0MX7ADdIDjqwsI8lkTgLIiD2QWrUCSGsUQ0YMnSCA/4pNgSyXdnLHWf3A==",
- "dev": true
- },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -31201,22 +19886,6 @@
"integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
"dev": true
},
- "evp_bytestokey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
- "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
- "dev": true,
- "requires": {
- "md5.js": "^1.3.4",
- "safe-buffer": "^5.1.1"
- }
- },
- "exec-sh": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.6.tgz",
- "integrity": "sha512-nQn+hI3yp+oD0huYhKwvYI32+JFeq+XkNcD1GAo3Y/MjxsfVGmrrzrnzjWiNY6f+pUCP440fThsFh5gZrRAU/w==",
- "dev": true
- },
"execa": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
@@ -31232,123 +19901,12 @@
"onetime": "^5.1.2",
"signal-exit": "^3.0.3",
"strip-final-newline": "^2.0.0"
- }
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
- "dev": true,
- "requires": {
- "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"
},
"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"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
+ "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
}
}
@@ -31406,12 +19964,6 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
- },
- "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
}
}
},
@@ -31421,54 +19973,31 @@
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"dev": true
},
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "extract-zip": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz",
+ "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==",
"dev": true,
"requires": {
- "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"
+ "concat-stream": "^1.6.2",
+ "debug": "^2.6.9",
+ "mkdirp": "^0.5.4",
+ "yauzl": "^2.10.0"
},
"dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
"requires": {
- "is-extendable": "^0.1.0"
+ "ms": "2.0.0"
}
},
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
}
}
@@ -31516,71 +20045,73 @@
"bser": "2.1.1"
}
},
- "fetch-retry": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.3.tgz",
- "integrity": "sha512-uJQyMrX5IJZkhoEUBQ3EjxkeiZkppBd5jS/fMTJmfZxLSiaQjv2zD0kTvuvkSH89uFvgSlB6ueGpjD3HWN7Bxw==",
- "dev": true
+ "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"
+ }
},
- "figgy-pudding": {
- "version": "3.5.2",
- "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz",
- "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
+ "fetch-retry": {
+ "version": "5.0.6",
+ "resolved": "https://registry.npmjs.org/fetch-retry/-/fetch-retry-5.0.6.tgz",
+ "integrity": "sha512-3yurQZ2hD9VISAhJJP9bpYFNQrHHBXE2JxxjY5aLEcDi46RmAzJE2OC9FAde0yis5ElW0jTTzs0zfg/Cca4XqQ==",
"dev": true
},
- "file-loader": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz",
- "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==",
+ "file-system-cache": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-2.3.0.tgz",
+ "integrity": "sha512-l4DMNdsIPsVnKrgEXbJwDJsA5mB8rGwHYERMgqQx/xAUtChPJMre1bXBzDEqqVbWv9AIbFezXMxeEkZDSrXUOQ==",
"dev": true,
"requires": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0"
+ "fs-extra": "11.1.1",
+ "ramda": "0.29.0"
},
"dependencies": {
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
+ "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": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
}
}
}
},
- "file-system-cache": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/file-system-cache/-/file-system-cache-1.1.0.tgz",
- "integrity": "sha512-IzF5MBq+5CR0jXx5RxPe4BICl/oEhBSXKaL9fLhAXrIfIUS77Hr4vzrYyqYMHN6uTt+BOqi3fDCTjjEBCjERKw==",
+ "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": {
- "fs-extra": "^10.1.0",
- "ramda": "^0.28.0"
+ "minimatch": "^5.0.1"
},
"dependencies": {
- "fs-extra": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
- "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
+ "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": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
+ "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"
}
}
}
},
- "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==",
- "dev": true,
- "optional": true
- },
"fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
@@ -31623,33 +20154,33 @@
}
},
"find-cache-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz",
- "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==",
+ "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": "^2.0.0",
- "pkg-dir": "^3.0.0"
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
},
"dependencies": {
"find-up": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
- "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"requires": {
- "locate-path": "^3.0.0"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
}
},
"locate-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
- "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "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": "^3.0.0",
- "path-exists": "^3.0.0"
+ "p-locate": "^4.1.0"
}
},
"p-limit": {
@@ -31662,27 +20193,21 @@
}
},
"p-locate": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
- "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "version": "4.1.0",
+ "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.0.0"
+ "p-limit": "^2.2.0"
}
},
- "path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
- "dev": true
- },
"pkg-dir": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
- "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "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": "^3.0.0"
+ "find-up": "^4.0.0"
}
}
}
@@ -31714,47 +20239,11 @@
"path-exists": "^4.0.0"
}
},
- "flush-write-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
- "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.3.6"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "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"
- }
- },
- "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"
- }
- }
- }
+ "flow-parser": {
+ "version": "0.224.0",
+ "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.224.0.tgz",
+ "integrity": "sha512-S1P78o0VLB1FZvkoGSIpaRiiTUQ3xDhm9I4Z1qc3lglmkjehfR2sjM0vhwKS7UC1G12VT4Leb/GGV/KlactqjA==",
+ "dev": true
},
"for-each": {
"version": "0.3.3",
@@ -31765,31 +20254,34 @@
"is-callable": "^1.1.3"
}
},
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
- "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"
+ }
},
"fork-ts-checker-webpack-plugin": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz",
- "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-8.0.0.tgz",
+ "integrity": "sha512-mX3qW3idpueT2klaQXBzrIM/pHw+T0B/V9KHEvNrqijTq9NFnMZU6oreVxDYcf33P8a5cW+67PjodNHthGnNVg==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.8.3",
- "@types/json-schema": "^7.0.5",
- "chalk": "^4.1.0",
- "chokidar": "^3.4.2",
- "cosmiconfig": "^6.0.0",
+ "@babel/code-frame": "^7.16.7",
+ "chalk": "^4.1.2",
+ "chokidar": "^3.5.3",
+ "cosmiconfig": "^7.0.1",
"deepmerge": "^4.2.2",
- "fs-extra": "^9.0.0",
- "glob": "^7.1.6",
- "memfs": "^3.1.2",
+ "fs-extra": "^10.0.0",
+ "memfs": "^3.4.1",
"minimatch": "^3.0.4",
- "schema-utils": "2.7.0",
- "semver": "^7.3.2",
- "tapable": "^1.0.0"
+ "node-abort-controller": "^3.0.1",
+ "schema-utils": "^3.1.1",
+ "semver": "^7.3.5",
+ "tapable": "^2.2.1"
},
"dependencies": {
"ansi-styles": {
@@ -31826,17 +20318,15 @@
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
- "cosmiconfig": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz",
- "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==",
+ "fs-extra": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
+ "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dev": true,
"requires": {
- "@types/parse-json": "^4.0.0",
- "import-fresh": "^3.1.0",
- "parse-json": "^5.0.0",
- "path-type": "^4.0.0",
- "yaml": "^1.7.2"
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^6.0.1",
+ "universalify": "^2.0.0"
}
},
"has-flag": {
@@ -31855,20 +20345,20 @@
}
},
"schema-utils": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
- "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+ "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.4",
- "ajv": "^6.12.2",
- "ajv-keywords": "^3.4.1"
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
}
},
"semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"requires": {
"lru-cache": "^6.0.0"
@@ -31892,9 +20382,9 @@
}
},
"form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
+ "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",
@@ -31908,70 +20398,24 @@
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
"dev": true
},
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
"dev": true
},
- "from2": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
- "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "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"
- }
- },
- "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"
- }
- }
- }
+ "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": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz",
+ "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==",
"dev": true,
"requires": {
- "at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
@@ -31984,58 +20428,31 @@
"dev": true,
"requires": {
"minipass": "^3.0.0"
- }
- },
- "fs-monkey": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
- "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
- "dev": true
- },
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
},
"dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "minipass": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
"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"
+ "yallist": "^4.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"
- }
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
}
}
},
+ "fs-monkey": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz",
+ "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==",
+ "dev": true
+ },
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@@ -32050,46 +20467,11 @@
"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
- },
- "function.prototype.name": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz",
- "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "es-abstract": "^1.19.0",
- "functions-have-names": "^1.2.2"
- }
- },
- "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==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
"dev": true
},
- "gauge": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
- "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
- "dev": true,
- "requires": {
- "aproba": "^1.0.3 || ^2.0.0",
- "color-support": "^1.1.2",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.1",
- "object-assign": "^4.1.1",
- "signal-exit": "^3.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1",
- "wide-align": "^1.1.2"
- }
- },
"gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -32097,28 +20479,40 @@
"dev": true
},
"get-intrinsic": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz",
- "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==",
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz",
+ "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==",
"dev": true,
"requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.3"
+ "function-bind": "^1.1.2",
+ "has-proto": "^1.0.1",
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
}
},
+ "get-nonce": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz",
+ "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==",
+ "dev": true
+ },
+ "get-npm-tarball-url": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.1.0.tgz",
+ "integrity": "sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==",
+ "dev": true
+ },
"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-stdin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
- "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==",
- "dev": true,
- "optional": true
+ "get-port": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz",
+ "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==",
+ "dev": true
},
"get-stream": {
"version": "6.0.1",
@@ -32126,22 +20520,21 @@
"integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
"dev": true
},
- "get-symbol-description": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz",
- "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==",
+ "giget": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/giget/-/giget-1.1.3.tgz",
+ "integrity": "sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q==",
"dev": true,
"requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
+ "colorette": "^2.0.20",
+ "defu": "^6.1.2",
+ "https-proxy-agent": "^7.0.2",
+ "mri": "^1.2.0",
+ "node-fetch-native": "^1.4.0",
+ "pathe": "^1.1.1",
+ "tar": "^6.2.0"
}
},
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
- "dev": true
- },
"github-slugger": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz",
@@ -32149,17 +20542,36 @@
"dev": true
},
"glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "version": "10.3.10",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
+ "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
"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"
+ "foreground-child": "^3.1.0",
+ "jackspeak": "^2.3.5",
+ "minimatch": "^9.0.1",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
+ "path-scurry": "^1.10.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": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "requires": {
+ "brace-expansion": "^2.0.1"
+ }
+ }
}
},
"glob-parent": {
@@ -32171,46 +20583,18 @@
"is-glob": "^4.0.1"
}
},
- "glob-promise": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-3.4.0.tgz",
- "integrity": "sha512-q08RJ6O+eJn+dVanerAndJwIcumgbDdYiUT7zFQl3Wm1xD6fBKtah7H8ZJChj4wP+8C+QfeVy8xautR7rdmKEw==",
- "dev": true,
- "requires": {
- "@types/glob": "*"
- }
- },
"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
},
- "global": {
- "version": "4.4.0",
- "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
- "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
- "dev": true,
- "requires": {
- "min-document": "^2.19.0",
- "process": "^0.11.10"
- }
- },
"globals": {
"version": "11.12.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
- "globalthis": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
- "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3"
- }
- },
"globby": {
"version": "11.1.0",
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
@@ -32240,14 +20624,28 @@
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==",
"dev": true
},
+ "gunzip-maybe": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz",
+ "integrity": "sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==",
+ "dev": true,
+ "requires": {
+ "browserify-zlib": "^0.1.4",
+ "is-deflate": "^1.0.0",
+ "is-gzip": "^1.0.0",
+ "peek-stream": "^1.1.0",
+ "pumpify": "^1.3.3",
+ "through2": "^2.0.3"
+ }
+ },
"handlebars": {
- "version": "4.7.7",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz",
- "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==",
+ "version": "4.7.8",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
+ "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
"dev": true,
"requires": {
"minimist": "^1.2.5",
- "neo-async": "^2.6.0",
+ "neo-async": "^2.6.2",
"source-map": "^0.6.1",
"uglify-js": "^3.1.4",
"wordwrap": "^1.0.0"
@@ -32262,45 +20660,19 @@
"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",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
"dev": true
},
- "has-glob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz",
- "integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==",
- "dev": true,
- "requires": {
- "is-glob": "^3.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.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==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz",
+ "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==",
"dev": true,
"requires": {
- "get-intrinsic": "^1.1.1"
+ "get-intrinsic": "^1.2.2"
}
},
"has-proto": {
@@ -32324,176 +20696,13 @@
"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
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "hash-base": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
- "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.4",
- "readable-stream": "^3.6.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- }
- }
- },
- "hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "hast-to-hyperscript": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz",
- "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.3",
- "comma-separated-tokens": "^1.0.0",
- "property-information": "^5.3.0",
- "space-separated-tokens": "^1.0.0",
- "style-to-object": "^0.3.0",
- "unist-util-is": "^4.0.0",
- "web-namespaces": "^1.0.0"
- }
- },
- "hast-util-from-parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz",
- "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==",
- "dev": true,
- "requires": {
- "@types/parse5": "^5.0.0",
- "hastscript": "^6.0.0",
- "property-information": "^5.0.0",
- "vfile": "^4.0.0",
- "vfile-location": "^3.2.0",
- "web-namespaces": "^1.0.0"
- }
- },
- "hast-util-parse-selector": {
- "version": "2.2.5",
- "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz",
- "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==",
- "dev": true
- },
- "hast-util-raw": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz",
- "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==",
- "dev": true,
- "requires": {
- "@types/hast": "^2.0.0",
- "hast-util-from-parse5": "^6.0.0",
- "hast-util-to-parse5": "^6.0.0",
- "html-void-elements": "^1.0.0",
- "parse5": "^6.0.0",
- "unist-util-position": "^3.0.0",
- "vfile": "^4.0.0",
- "web-namespaces": "^1.0.0",
- "xtend": "^4.0.0",
- "zwitch": "^1.0.0"
- }
- },
- "hast-util-to-parse5": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz",
- "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==",
- "dev": true,
- "requires": {
- "hast-to-hyperscript": "^9.0.0",
- "property-information": "^5.0.0",
- "web-namespaces": "^1.0.0",
- "xtend": "^4.0.0",
- "zwitch": "^1.0.0"
- }
- },
- "hastscript": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz",
- "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==",
+ "hasown": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
+ "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
"dev": true,
"requires": {
- "@types/hast": "^2.0.0",
- "comma-separated-tokens": "^1.0.0",
- "hast-util-parse-selector": "^2.0.0",
- "property-information": "^5.0.0",
- "space-separated-tokens": "^1.0.0"
+ "function-bind": "^1.1.2"
}
},
"he": {
@@ -32502,17 +20711,6 @@
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
"dev": true
},
- "hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
- "dev": true,
- "requires": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
"hosted-git-info": {
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
@@ -32548,12 +20746,6 @@
}
}
},
- "html-void-elements": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz",
- "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==",
- "dev": true
- },
"html-webpack-plugin": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz",
@@ -32565,14 +20757,6 @@
"lodash": "^4.17.21",
"pretty-error": "^4.0.0",
"tapable": "^2.0.0"
- },
- "dependencies": {
- "tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true
- }
}
},
"htmlparser2": {
@@ -32600,11 +20784,15 @@
"toidentifier": "1.0.1"
}
},
- "https-browserify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
- "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==",
- "dev": true
+ "https-proxy-agent": {
+ "version": "7.0.2",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz",
+ "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==",
+ "dev": true,
+ "requires": {
+ "agent-base": "^7.0.2",
+ "debug": "4"
+ }
},
"human-signals": {
"version": "2.1.0",
@@ -32622,13 +20810,11 @@
}
},
"icss-utils": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
- "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz",
+ "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==",
"dev": true,
- "requires": {
- "postcss": "^7.0.14"
- }
+ "requires": {}
},
"ieee754": {
"version": "1.2.1",
@@ -32636,12 +20822,6 @@
"integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
"dev": true
},
- "iferr": {
- "version": "0.1.5",
- "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
- "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==",
- "dev": true
- },
"ignore": {
"version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
@@ -32678,12 +20858,6 @@
"integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
"dev": true
},
- "infer-owner": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
- "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
- "dev": true
- },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -32700,29 +20874,6 @@
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
- "inline-style-parser": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz",
- "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==",
- "dev": true
- },
- "internal-slot": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz",
- "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==",
- "dev": true,
- "requires": {
- "get-intrinsic": "^1.1.3",
- "has": "^1.0.3",
- "side-channel": "^1.0.4"
- }
- },
- "interpret": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
- "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==",
- "dev": true
- },
"invariant": {
"version": "2.2.4",
"resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz",
@@ -32750,31 +20901,6 @@
"integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==",
"dev": true
},
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-alphabetical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz",
- "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==",
- "dev": true
- },
- "is-alphanumerical": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz",
- "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==",
- "dev": true,
- "requires": {
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0"
- }
- },
"is-arguments": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
@@ -32785,32 +20911,12 @@
"has-tostringtag": "^1.0.0"
}
},
- "is-array-buffer": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz",
- "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
- "is-typed-array": "^1.1.10"
- }
- },
"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-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",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -32820,37 +20926,12 @@
"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-buffer": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz",
- "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==",
- "dev": true
- },
"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": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
- "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
- "dev": true,
- "requires": {
- "ci-info": "^2.0.0"
- }
- },
"is-core-module": {
"version": "2.11.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
@@ -32860,90 +20941,38 @@
"has": "^1.0.3"
}
},
- "is-data-descriptor": {
+ "is-deflate": {
"version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- }
- },
- "is-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-decimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz",
- "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==",
+ "resolved": "https://registry.npmjs.org/is-deflate/-/is-deflate-1.0.0.tgz",
+ "integrity": "sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==",
"dev": true
},
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- }
- },
"is-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-dom": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-dom/-/is-dom-1.1.0.tgz",
- "integrity": "sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ==",
- "dev": true,
- "requires": {
- "is-object": "^1.0.1",
- "is-window": "^1.0.2"
- }
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
"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-finite": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
- "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
- "dev": true,
- "optional": 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-function": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz",
- "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==",
- "dev": true
+ "is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dev": true,
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
},
"is-glob": {
"version": "4.0.3",
@@ -32954,23 +20983,27 @@
"is-extglob": "^2.1.1"
}
},
- "is-hexadecimal": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
- "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==",
+ "is-gzip": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-gzip/-/is-gzip-1.0.0.tgz",
+ "integrity": "sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==",
"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==",
+ "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-negative-zero": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
- "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
- "dev": true
+ "is-nan": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz",
+ "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==",
+ "dev": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3"
+ }
},
"is-number": {
"version": "7.0.0",
@@ -32978,25 +21011,16 @@
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"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-object": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz",
- "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==",
+ "is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
"dev": true
},
- "is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
+ "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-object": {
@@ -33008,112 +21032,25 @@
"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==",
+ "version": "1.1.12",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz",
+ "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==",
"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"
+ "which-typed-array": "^1.1.11"
}
},
- "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-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
- "dev": true,
- "optional": true
- },
- "is-weakref": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
- "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2"
- }
- },
- "is-whitespace-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz",
- "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==",
- "dev": true
- },
- "is-window": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz",
- "integrity": "sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg==",
- "dev": true
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "is-word-character": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz",
- "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==",
+ "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-wsl": {
@@ -33126,9 +21063,9 @@
}
},
"isarray": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
- "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
"dev": true
},
"isexe": {
@@ -33143,20 +21080,10 @@
"integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true
},
- "isomorphic-unfetch": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz",
- "integrity": "sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q==",
- "dev": true,
- "requires": {
- "node-fetch": "^2.6.1",
- "unfetch": "^4.2.0"
- }
- },
"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==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
+ "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
"dev": true
},
"istanbul-lib-instrument": {
@@ -33172,72 +21099,117 @@
"semver": "^6.3.0"
}
},
- "iterate-iterator": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.2.tgz",
- "integrity": "sha512-t91HubM4ZDQ70M9wqp+pcNpu8OyJ9UAtXntT/Bcsvp5tZMnz9vRa+IunKXeI8AnfZMTv0jNuVEmGeLSMjVvfPw==",
- "dev": true
+ "jackspeak": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
+ "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
+ "dev": true,
+ "requires": {
+ "@isaacs/cliui": "^8.0.2",
+ "@pkgjs/parseargs": "^0.11.0"
+ }
},
- "iterate-value": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz",
- "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==",
+ "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": {
- "es-get-iterator": "^1.0.2",
- "iterate-iterator": "^1.0.1"
+ "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"
+ }
+ }
}
},
"jest-haste-map": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-26.6.2.tgz",
- "integrity": "sha512-easWIJXIw71B2RdR8kgqpjQrbMRWQBgiBwXYEhtGUTaX+doCjBheluShdDMeR8IMfJiTqH4+zfhtg29apJf/8w==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz",
+ "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==",
"dev": true,
"requires": {
- "@jest/types": "^26.6.2",
- "@types/graceful-fs": "^4.1.2",
+ "@jest/types": "^29.6.3",
+ "@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
- "fsevents": "^2.1.2",
- "graceful-fs": "^4.2.4",
- "jest-regex-util": "^26.0.0",
- "jest-serializer": "^26.6.2",
- "jest-util": "^26.6.2",
- "jest-worker": "^26.6.2",
- "micromatch": "^4.0.2",
- "sane": "^4.0.3",
- "walker": "^1.0.7"
+ "fsevents": "^2.3.2",
+ "graceful-fs": "^4.2.9",
+ "jest-regex-util": "^29.6.3",
+ "jest-util": "^29.7.0",
+ "jest-worker": "^29.7.0",
+ "micromatch": "^4.0.4",
+ "walker": "^1.0.8"
}
},
"jest-regex-util": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-26.0.0.tgz",
- "integrity": "sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==",
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz",
+ "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==",
"dev": true
},
- "jest-serializer": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-26.6.2.tgz",
- "integrity": "sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==",
- "dev": true,
- "requires": {
- "@types/node": "*",
- "graceful-fs": "^4.2.4"
- }
- },
"jest-util": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-26.6.2.tgz",
- "integrity": "sha512-MDW0fKfsn0OI7MS7Euz6h8HNDXVQ0gaM9uW6RjfDmd1DAFcaxX9OqIakHIqhbnmF08Cf2DLDG+ulq8YQQ0Lp0Q==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz",
+ "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==",
"dev": true,
"requires": {
- "@jest/types": "^26.6.2",
+ "@jest/types": "^29.6.3",
"@types/node": "*",
"chalk": "^4.0.0",
- "graceful-fs": "^4.2.4",
- "is-ci": "^2.0.0",
- "micromatch": "^4.0.2"
+ "ci-info": "^3.2.0",
+ "graceful-fs": "^4.2.9",
+ "picomatch": "^2.2.3"
},
"dependencies": {
"ansi-styles": {
@@ -33292,14 +21264,15 @@
}
},
"jest-worker": {
- "version": "26.6.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz",
- "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==",
+ "version": "29.7.0",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz",
+ "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==",
"dev": true,
"requires": {
"@types/node": "*",
+ "jest-util": "^29.7.0",
"merge-stream": "^2.0.0",
- "supports-color": "^7.0.0"
+ "supports-color": "^8.0.0"
},
"dependencies": {
"has-flag": {
@@ -33309,9 +21282,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==",
+ "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"
@@ -33319,12 +21292,6 @@
}
}
},
- "js-string-escape": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
- "integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg==",
- "dev": true
- },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -33341,18 +21308,108 @@
"esprima": "^4.0.0"
}
},
+ "jscodeshift": {
+ "version": "0.15.1",
+ "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.1.tgz",
+ "integrity": "sha512-hIJfxUy8Rt4HkJn/zZPU9ChKfKZM1342waJ1QC2e2YsPcWhM+3BJ4dcfQCzArTrk1jJeNLB341H+qOcEHRxJZg==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.23.0",
+ "@babel/parser": "^7.23.0",
+ "@babel/plugin-transform-class-properties": "^7.22.5",
+ "@babel/plugin-transform-modules-commonjs": "^7.23.0",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11",
+ "@babel/plugin-transform-optional-chaining": "^7.23.0",
+ "@babel/plugin-transform-private-methods": "^7.22.5",
+ "@babel/preset-flow": "^7.22.15",
+ "@babel/preset-typescript": "^7.23.0",
+ "@babel/register": "^7.22.15",
+ "babel-core": "^7.0.0-bridge.0",
+ "chalk": "^4.1.2",
+ "flow-parser": "0.*",
+ "graceful-fs": "^4.2.4",
+ "micromatch": "^4.0.4",
+ "neo-async": "^2.5.0",
+ "node-dir": "^0.1.17",
+ "recast": "^0.23.3",
+ "temp": "^0.8.4",
+ "write-file-atomic": "^2.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
+ },
+ "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
+ },
+ "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"
+ }
+ },
+ "write-file-atomic": {
+ "version": "2.4.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
+ "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ }
+ }
+ },
"jsesc": {
"version": "2.5.2",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true
},
- "json-parse-better-errors": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
- "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
- "dev": true
- },
"json-parse-even-better-errors": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
@@ -33381,12 +21438,6 @@
"universalify": "^2.0.0"
}
},
- "junk": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/junk/-/junk-3.1.0.tgz",
- "integrity": "sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==",
- "dev": true
- },
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@@ -33399,72 +21450,61 @@
"integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
"dev": true
},
- "klona": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz",
- "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==",
- "dev": true
- },
"lazy-universal-dotenv": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz",
- "integrity": "sha512-prXSYk799h3GY3iOWnC6ZigYzMPjxN2svgjJ9shk7oMadSNX3wXy0B6F32PMJv7qtMnrIbUxoEHzbutvxR2LBQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/lazy-universal-dotenv/-/lazy-universal-dotenv-4.0.0.tgz",
+ "integrity": "sha512-aXpZJRnTkpK6gQ/z4nk+ZBLd/Qdp118cvPruLSIQzQNRhKwEcdXCOzXuF55VDqIiuAaY3UGZ10DJtvZzDcvsxg==",
"dev": true,
"requires": {
- "@babel/runtime": "^7.5.0",
"app-root-dir": "^1.0.2",
- "core-js": "^3.0.4",
- "dotenv": "^8.0.0",
- "dotenv-expand": "^5.1.0"
+ "dotenv": "^16.0.0",
+ "dotenv-expand": "^10.0.0"
}
},
+ "leven": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
+ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==",
+ "dev": true
+ },
"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
},
- "lit-html": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-2.6.0.tgz",
- "integrity": "sha512-slNAAYfvC7LxeryDOnPFl5uTpxGYGJ6UR9SFmfY+gQ+sf30z1atDPXlgjcSTtwymNdlwDhfGjq+EemQRXp9z1g==",
+ "lit": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lit/-/lit-3.1.0.tgz",
+ "integrity": "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w==",
"dev": true,
"peer": true,
"requires": {
- "@types/trusted-types": "^2.0.2"
+ "@lit/reactive-element": "^2.0.0",
+ "lit-element": "^4.0.0",
+ "lit-html": "^3.1.0"
}
},
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
+ "lit-element": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.0.2.tgz",
+ "integrity": "sha512-/W6WQZUa5VEXwC7H9tbtDMdSs9aWil3Ou8hU6z2cOKWbsm/tXPAcsoaHVEtrDo0zcOIE5GF6QgU55tlGL2Nihg==",
"dev": true,
- "optional": true,
+ "peer": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- },
- "dependencies": {
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
- "optional": true
- }
+ "@lit-labs/ssr-dom-shim": "^1.1.2",
+ "@lit/reactive-element": "^2.0.0",
+ "lit-html": "^3.1.0"
+ }
+ },
+ "lit-html": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.1.0.tgz",
+ "integrity": "sha512-FwAjq3iNsaO6SOZXEIpeROlJLUlrbyMkn4iuv4f4u1H40Jw8wkeR/OUXZUHUoiYabGk8Y4Y0F/rgq+R4MrOLmA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@types/trusted-types": "^2.0.2"
}
},
"loader-runner": {
@@ -33511,11 +21551,66 @@
"integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
"dev": true
},
- "lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
- "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"
+ }
+ }
+ }
},
"loose-envify": {
"version": "1.4.0",
@@ -33526,17 +21621,6 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
- "loud-rejection": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
- "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "currently-unhandled": "^0.4.1",
- "signal-exit": "^3.0.0"
- }
- },
"lower-case": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
@@ -33555,22 +21639,22 @@
"yallist": "^3.0.2"
}
},
+ "magic-string": {
+ "version": "0.30.5",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
+ "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.4.15"
+ }
+ },
"make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
+ "version": "3.1.0",
+ "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": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
+ "semver": "^6.0.0"
}
},
"makeerror": {
@@ -33582,68 +21666,18 @@
"tmpl": "1.0.5"
}
},
- "map-age-cleaner": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
- "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
- "dev": true,
- "requires": {
- "p-defer": "^1.0.0"
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
- "dev": true
- },
- "map-obj": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
- "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==",
- "dev": true,
- "optional": true
- },
"map-or-similar": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz",
"integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==",
"dev": true
},
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "markdown-escapes": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz",
- "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==",
- "dev": true
- },
- "md5.js": {
- "version": "1.3.5",
- "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
- "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1",
- "safe-buffer": "^5.1.2"
- }
- },
- "mdast-squeeze-paragraphs": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz",
- "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==",
+ "markdown-to-jsx": {
+ "version": "7.3.2",
+ "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.3.2.tgz",
+ "integrity": "sha512-B+28F5ucp83aQm+OxNrPkS8z0tMKaeHiy0lHJs3LqCyDQFtWuenaIrkaVTgAm1pf1AU85LXltva86hlaT17i8Q==",
"dev": true,
- "requires": {
- "unist-util-remove": "^2.0.0"
- }
+ "requires": {}
},
"mdast-util-definitions": {
"version": "4.0.0",
@@ -33654,58 +21688,18 @@
"unist-util-visit": "^2.0.0"
}
},
- "mdast-util-to-hast": {
- "version": "10.0.1",
- "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz",
- "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==",
- "dev": true,
- "requires": {
- "@types/mdast": "^3.0.0",
- "@types/unist": "^2.0.0",
- "mdast-util-definitions": "^4.0.0",
- "mdurl": "^1.0.0",
- "unist-builder": "^2.0.0",
- "unist-util-generated": "^1.0.0",
- "unist-util-position": "^3.0.0",
- "unist-util-visit": "^2.0.0"
- }
- },
"mdast-util-to-string": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz",
"integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==",
"dev": true
},
- "mdurl": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
- "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==",
- "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
},
- "mem": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz",
- "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==",
- "dev": true,
- "requires": {
- "map-age-cleaner": "^0.1.3",
- "mimic-fn": "^3.1.0"
- },
- "dependencies": {
- "mimic-fn": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz",
- "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==",
- "dev": true
- }
- }
- },
"memfs": {
"version": "3.4.13",
"resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz",
@@ -33724,132 +21718,6 @@
"map-or-similar": "^1.5.0"
}
},
- "memory-fs": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
- "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "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"
- }
- },
- "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"
- }
- }
- }
- },
- "meow": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
- "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==",
- "dev": true,
- "optional": true,
- "requires": {
- "camelcase-keys": "^2.0.0",
- "decamelize": "^1.1.2",
- "loud-rejection": "^1.0.0",
- "map-obj": "^1.0.1",
- "minimist": "^1.1.3",
- "normalize-package-data": "^2.3.4",
- "object-assign": "^4.0.1",
- "read-pkg-up": "^1.0.1",
- "redent": "^1.0.0",
- "trim-newlines": "^1.0.0"
- },
- "dependencies": {
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
- "dev": true,
- "optional": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
- "dev": true,
- "optional": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
- "optional": true
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
- "dev": true,
- "optional": true,
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- }
- }
- }
- },
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
@@ -33874,12 +21742,6 @@
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
"dev": true
},
- "microevent.ts": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz",
- "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==",
- "dev": true
- },
"micromatch": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
@@ -33890,24 +21752,6 @@
"picomatch": "^2.3.1"
}
},
- "miller-rabin": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz",
- "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
- "dev": true,
- "requires": {
- "bn.js": "^4.0.0",
- "brorand": "^1.0.1"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
"mime": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
@@ -33935,27 +21779,6 @@
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
- "min-document": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
- "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==",
- "dev": true,
- "requires": {
- "dom-walk": "^0.1.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
- },
- "minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
- "dev": true
- },
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
@@ -33966,54 +21789,16 @@
}
},
"minimist": {
- "version": "1.2.7",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
- "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==",
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
"dev": true
},
"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"
- },
- "dependencies": {
- "yallist": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
- "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
- "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"
- }
- },
- "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"
- }
- },
- "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"
- }
+ "version": "7.0.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
+ "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+ "dev": true
},
"minizlib": {
"version": "2.1.2",
@@ -34025,6 +21810,15 @@
"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",
@@ -34033,79 +21827,26 @@
}
}
},
- "mississippi": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
- "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
- "dev": true,
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- }
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
+ "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,
"requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
+ "minimist": "^1.2.6"
}
},
- "mkdirp": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
- "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "mkdirp-classic": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
"dev": true
},
- "move-concurrently": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
- "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==",
- "dev": true,
- "requires": {
- "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"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "dev": true
- },
- "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,
- "requires": {
- "minimist": "^1.2.6"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
- "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
- "dev": true,
- "requires": {
- "glob": "^7.1.3"
- }
- }
- }
+ "mri": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
+ "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
+ "dev": true
},
"ms": {
"version": "2.1.2",
@@ -34113,38 +21854,12 @@
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
- "nan": {
- "version": "2.17.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
- "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
- "dev": true,
- "optional": true
- },
"nanoid": {
- "version": "3.3.4",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz",
- "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==",
+ "version": "3.3.7",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
"dev": true
},
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "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"
- }
- },
"negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
@@ -34157,18 +21872,6 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
- "nested-error-stacks": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz",
- "integrity": "sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw==",
- "dev": true
- },
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
- "dev": true
- },
"no-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
@@ -34179,6 +21882,21 @@
"tslib": "^2.0.3"
}
},
+ "node-abort-controller": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
+ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==",
+ "dev": true
+ },
+ "node-dir": {
+ "version": "0.1.17",
+ "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
+ "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==",
+ "dev": true,
+ "requires": {
+ "minimatch": "^3.0.2"
+ }
+ },
"node-fetch": {
"version": "2.6.7",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
@@ -34188,91 +21906,22 @@
"whatwg-url": "^5.0.0"
}
},
+ "node-fetch-native": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.4.1.tgz",
+ "integrity": "sha512-NsXBU0UgBxo2rQLOeWNZqS3fvflWePMECr8CoSWoSTqCqGbVVsvl9vZu1HfQicYN0g5piV9Gh8RTEvo/uP752w==",
+ "dev": true
+ },
"node-int64": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
"integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==",
"dev": true
},
- "node-libs-browser": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz",
- "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==",
- "dev": true,
- "requires": {
- "assert": "^1.1.1",
- "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"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "path-browserify": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz",
- "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==",
- "dev": true
- },
- "punycode": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
- "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "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"
- }
- },
- "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"
- }
- }
- }
- },
"node-releases": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz",
- "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
"dev": true
},
"normalize-package-data": {
@@ -34288,9 +21937,9 @@
},
"dependencies": {
"semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "version": "5.7.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
+ "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true
}
}
@@ -34301,12 +21950,6 @@
"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-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
@@ -34316,18 +21959,6 @@
"path-key": "^3.0.0"
}
},
- "npmlog": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
- "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
- "dev": true,
- "requires": {
- "are-we-there-yet": "^2.0.0",
- "console-control-strings": "^1.1.0",
- "gauge": "^3.0.0",
- "set-blocking": "^2.0.0"
- }
- },
"nth-check": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
@@ -34337,179 +21968,40 @@
"boolbase": "^1.0.0"
}
},
- "num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==",
- "dev": true
- },
- "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==",
+ "object-inspect": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
+ "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
"dev": true
},
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
+ "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": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
}
},
- "object-inspect": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz",
- "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==",
- "dev": true
- },
"object-keys": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true
},
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- }
- },
"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==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
"dev": true,
"requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
"has-symbols": "^1.0.3",
"object-keys": "^1.1.1"
}
},
- "object.entries": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz",
- "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "object.fromentries": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz",
- "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "object.getownpropertydescriptors": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz",
- "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==",
- "dev": true,
- "requires": {
- "array.prototype.reduce": "^1.0.5",
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "object.values": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz",
- "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
"on-finished": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
@@ -34544,9 +22036,9 @@
}
},
"open": {
- "version": "8.4.0",
- "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz",
- "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==",
+ "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",
@@ -34554,74 +22046,74 @@
"is-wsl": "^2.2.0"
}
},
- "os-browserify": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
- "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==",
- "dev": true
- },
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==",
- "dev": true,
- "optional": true
- },
- "p-all": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-all/-/p-all-2.1.0.tgz",
- "integrity": "sha512-HbZxz5FONzz/z2gJfk6bFca0BCiSRF8jU3yCsWOen/vR6lZjfPOu/e7L3uFzTW1i0H8TlC3vqQstEJPQL4/uLA==",
+ "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": {
- "p-map": "^2.0.0"
+ "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": {
- "p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ "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
- }
- }
- },
- "p-defer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
- "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==",
- "dev": true
- },
- "p-event": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
- "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
- "dev": true,
- "requires": {
- "p-timeout": "^3.1.0"
- }
- },
- "p-filter": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz",
- "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==",
- "dev": true,
- "requires": {
- "p-map": "^2.0.0"
- },
- "dependencies": {
- "p-map": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz",
- "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==",
+ },
+ "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"
+ }
}
}
},
- "p-finally": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
- "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==",
- "dev": true
- },
"p-limit": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
@@ -34641,23 +22133,14 @@
}
},
"p-map": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
- "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "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-timeout": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
- "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
- "dev": true,
- "requires": {
- "p-finally": "^1.0.0"
- }
- },
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -34665,54 +22148,11 @@
"dev": true
},
"pako": {
- "version": "1.0.11",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
- "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
+ "version": "0.2.9",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
+ "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
"dev": true
},
- "parallel-transform": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
- "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==",
- "dev": true,
- "requires": {
- "cyclist": "^1.0.1",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "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"
- }
- },
- "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"
- }
- }
- }
- },
"param-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
@@ -34732,33 +22172,6 @@
"callsites": "^3.0.0"
}
},
- "parse-asn1": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz",
- "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==",
- "dev": true,
- "requires": {
- "asn1.js": "^5.2.0",
- "browserify-aes": "^1.0.0",
- "evp_bytestokey": "^1.0.0",
- "pbkdf2": "^3.0.3",
- "safe-buffer": "^5.1.1"
- }
- },
- "parse-entities": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz",
- "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==",
- "dev": true,
- "requires": {
- "character-entities": "^1.0.0",
- "character-entities-legacy": "^1.0.0",
- "character-reference-invalid": "^1.0.0",
- "is-alphanumerical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-hexadecimal": "^1.0.0"
- }
- },
"parse-json": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
@@ -34771,12 +22184,6 @@
"lines-and-columns": "^1.1.6"
}
},
- "parse5": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz",
- "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==",
- "dev": true
- },
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -34793,24 +22200,12 @@
"tslib": "^2.0.3"
}
},
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
- "dev": true
- },
"path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
"integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
"dev": true
},
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
- "dev": true
- },
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@@ -34835,6 +22230,24 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "path-scurry": {
+ "version": "1.10.1",
+ "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
+ "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^9.1.1 || ^10.0.0",
+ "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "10.1.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
+ "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
+ "dev": true
+ }
+ }
+ },
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
@@ -34847,23 +22260,33 @@
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true
},
- "pbkdf2": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz",
- "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+ "pathe": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz",
+ "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==",
+ "dev": true
+ },
+ "peek-stream": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/peek-stream/-/peek-stream-1.1.3.tgz",
+ "integrity": "sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==",
"dev": true,
"requires": {
- "create-hash": "^1.1.2",
- "create-hmac": "^1.1.4",
- "ripemd160": "^2.0.1",
- "safe-buffer": "^5.0.1",
- "sha.js": "^2.4.8"
+ "buffer-from": "^1.0.0",
+ "duplexify": "^3.5.0",
+ "through2": "^2.0.3"
}
},
+ "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
+ },
"picocolors": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
- "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
},
"picomatch": {
@@ -34878,27 +22301,10 @@
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true
},
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
- "dev": true,
- "optional": true
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
- "dev": true,
- "optional": true,
- "requires": {
- "pinkie": "^2.0.0"
- }
- },
"pirates": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz",
- "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
+ "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
"dev": true
},
"pkg-dir": {
@@ -34910,15 +22316,6 @@
"find-up": "^5.0.0"
}
},
- "pnp-webpack-plugin": {
- "version": "1.6.4",
- "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz",
- "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==",
- "dev": true,
- "requires": {
- "ts-pnp": "^1.1.6"
- }
- },
"polished": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz",
@@ -34928,120 +22325,51 @@
"@babel/runtime": "^7.17.8"
}
},
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
- "dev": true
- },
"postcss": {
- "version": "7.0.39",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
- "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
- "dev": true,
- "requires": {
- "picocolors": "^0.2.1",
- "source-map": "^0.6.1"
- }
- },
- "postcss-flexbugs-fixes": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-4.2.1.tgz",
- "integrity": "sha512-9SiofaZ9CWpQWxOwRh1b/r85KD5y7GgvsNt1056k6OYLvWUun0czCvogfJgylC22uJTwW1KzY3Gz65NZRlvoiQ==",
+ "version": "8.4.32",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
+ "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
"dev": true,
"requires": {
- "postcss": "^7.0.26"
- }
- },
- "postcss-loader": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-4.3.0.tgz",
- "integrity": "sha512-M/dSoIiNDOo8Rk0mUqoj4kpGq91gcxCfb9PoyZVdZ76/AuhxylHDYZblNE8o+EQ9AMSASeMFEKxZf5aU6wlx1Q==",
- "dev": true,
- "requires": {
- "cosmiconfig": "^7.0.0",
- "klona": "^2.0.4",
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0",
- "semver": "^7.3.4"
- },
- "dependencies": {
- "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"
- }
- },
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- },
- "semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
- "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
- }
+ "nanoid": "^3.3.7",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
}
},
"postcss-modules-extract-imports": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz",
- "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==",
+ "version": "3.0.0",
+ "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": "^7.0.5"
- }
+ "requires": {}
},
"postcss-modules-local-by-default": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz",
- "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==",
+ "version": "4.0.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": "^4.1.1",
- "postcss": "^7.0.32",
+ "icss-utils": "^5.0.0",
"postcss-selector-parser": "^6.0.2",
"postcss-value-parser": "^4.1.0"
}
},
"postcss-modules-scope": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
- "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
+ "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": "^7.0.6",
- "postcss-selector-parser": "^6.0.0"
+ "postcss-selector-parser": "^6.0.4"
}
},
"postcss-modules-values": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
- "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
+ "version": "4.0.0",
+ "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": "^4.0.0",
- "postcss": "^7.0.6"
+ "icss-utils": "^5.0.0"
}
},
"postcss-selector-parser": {
@@ -35061,9 +22389,9 @@
"dev": true
},
"prettier": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz",
- "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==",
+ "version": "2.8.8",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
"dev": true
},
"pretty-error": {
@@ -35094,37 +22422,12 @@
"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==",
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
"dev": true
},
- "promise.allsettled": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.6.tgz",
- "integrity": "sha512-22wJUOD3zswWFqgwjNHa1965LvqTX87WPu/lreY2KSd7SVcERfuZ4GfUaOnJNnvtoIv2yXT/W00YIGMetXtFXg==",
- "dev": true,
- "requires": {
- "array.prototype.map": "^1.0.5",
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "iterate-value": "^1.0.2"
- }
- },
- "promise.prototype.finally": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/promise.prototype.finally/-/promise.prototype.finally-3.1.4.tgz",
- "integrity": "sha512-nNc3YbgMfLzqtqvO/q5DP6RR0SiHI9pUPGzyDf1q+usTwCN2kjvAnJkBb7bHe3o+fFSBPpsGMoYtaSi+LTNqng==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
"prompts": {
"version": "2.4.2",
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
@@ -35135,26 +22438,6 @@
"sisteransi": "^1.0.5"
}
},
- "prop-types": {
- "version": "15.8.1",
- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
- "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==",
- "dev": true,
- "requires": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "property-information": {
- "version": "5.6.0",
- "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz",
- "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==",
- "dev": true,
- "requires": {
- "xtend": "^4.0.0"
- }
- },
"proxy-addr": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
@@ -35165,34 +22448,12 @@
"ipaddr.js": "1.9.1"
}
},
- "prr": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
- "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==",
+ "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
},
- "public-encrypt": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
- "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.0",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "parse-asn1": "^5.0.0",
- "randombytes": "^2.0.1",
- "safe-buffer": "^5.1.2"
- },
- "dependencies": {
- "bn.js": {
- "version": "4.12.0",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz",
- "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==",
- "dev": true
- }
- }
- },
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -35232,6 +22493,57 @@
"integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
"dev": true
},
+ "puppeteer-core": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-2.1.1.tgz",
+ "integrity": "sha512-n13AWriBMPYxnpbb6bnaY5YoY6rGj8vPLrz6CZF3o0qJNEwlcfJVxBzYZ0NJsQ21UbdJoijPCDrM++SUVEz7+w==",
+ "dev": true,
+ "requires": {
+ "@types/mime-types": "^2.1.0",
+ "debug": "^4.1.0",
+ "extract-zip": "^1.6.6",
+ "https-proxy-agent": "^4.0.0",
+ "mime": "^2.0.3",
+ "mime-types": "^2.1.25",
+ "progress": "^2.0.1",
+ "proxy-from-env": "^1.0.0",
+ "rimraf": "^2.6.1",
+ "ws": "^6.1.0"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz",
+ "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==",
+ "dev": true
+ },
+ "https-proxy-agent": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz",
+ "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==",
+ "dev": true,
+ "requires": {
+ "agent-base": "5",
+ "debug": "4"
+ }
+ },
+ "mime": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz",
+ "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==",
+ "dev": true
+ },
+ "ws": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
+ "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "~1.0.0"
+ }
+ }
+ }
+ },
"qs": {
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
@@ -35247,12 +22559,6 @@
"integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
"dev": true
},
- "querystring-es3": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
- "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==",
- "dev": true
- },
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -35260,9 +22566,9 @@
"dev": true
},
"ramda": {
- "version": "0.28.0",
- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz",
- "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==",
+ "version": "0.29.0",
+ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.29.0.tgz",
+ "integrity": "sha512-BBea6L67bYLtdbOqfp8f58fPMqEwx0doL+pAi8TZyp2YWz8R9G8z9x75CZI8W+ftqhFHCpEX2cRnUUXK130iKA==",
"dev": true
},
"randombytes": {
@@ -35274,16 +22580,6 @@
"safe-buffer": "^5.1.0"
}
},
- "randomfill": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz",
- "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
- "dev": true,
- "requires": {
- "randombytes": "^2.0.5",
- "safe-buffer": "^5.1.0"
- }
- },
"range-parser": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
@@ -35310,66 +22606,64 @@
}
}
},
- "raw-loader": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.2.tgz",
- "integrity": "sha512-ZnScIV3ag9A4wPX/ZayxL/jZH+euYb6FcUinPcgiQW0+UBtEv0O6Q3lGd3cqJ+GHH+rksEv3Pj99oxJ3u3VIKA==",
- "dev": true,
- "requires": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0"
- },
- "dependencies": {
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
"react": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
"integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
"dev": true,
- "peer": true,
"requires": {
"loose-envify": "^1.1.0"
}
},
+ "react-colorful": {
+ "version": "5.6.1",
+ "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz",
+ "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==",
+ "dev": true,
+ "requires": {}
+ },
"react-dom": {
"version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
"integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
"dev": true,
- "peer": true,
"requires": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.0"
}
},
- "react-is": {
- "version": "16.13.1",
- "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
- "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
- "dev": true
+ "react-remove-scroll": {
+ "version": "2.5.5",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.5.5.tgz",
+ "integrity": "sha512-ImKhrzJJsyXJfBZ4bzu8Bwpka14c/fQt0k+cyFp/PBhTfyDnU5hjOtM4AG/0AMyy8oKzOTR0lDgJIM7pYXI0kw==",
+ "dev": true,
+ "requires": {
+ "react-remove-scroll-bar": "^2.3.3",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.1.0",
+ "use-callback-ref": "^1.3.0",
+ "use-sidecar": "^1.1.2"
+ }
},
- "react-sizeme": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/react-sizeme/-/react-sizeme-3.0.2.tgz",
- "integrity": "sha512-xOIAOqqSSmKlKFJLO3inBQBdymzDuXx4iuwkNcJmC96jeiOg5ojByvL+g3MW9LPEsojLbC6pf68zOfobK8IPlw==",
+ "react-remove-scroll-bar": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz",
+ "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==",
"dev": true,
"requires": {
- "element-resize-detector": "^1.2.2",
+ "react-style-singleton": "^2.2.1",
+ "tslib": "^2.0.0"
+ }
+ },
+ "react-style-singleton": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
+ "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "dev": true,
+ "requires": {
+ "get-nonce": "^1.0.0",
"invariant": "^2.2.4",
- "shallowequal": "^1.1.0",
- "throttle-debounce": "^3.0.1"
+ "tslib": "^2.0.0"
}
},
"read-pkg": {
@@ -35449,9 +22743,9 @@
}
},
"readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
+ "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",
@@ -35468,27 +22762,17 @@
"picomatch": "^2.2.1"
}
},
- "redent": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
- "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==",
+ "recast": {
+ "version": "0.23.4",
+ "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.4.tgz",
+ "integrity": "sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==",
"dev": true,
- "optional": true,
"requires": {
- "indent-string": "^2.1.0",
- "strip-indent": "^1.0.1"
- },
- "dependencies": {
- "indent-string": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
- "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==",
- "dev": true,
- "optional": true,
- "requires": {
- "repeating": "^2.0.0"
- }
- }
+ "assert": "^2.0.0",
+ "ast-types": "^0.16.1",
+ "esprima": "~4.0.0",
+ "source-map": "~0.6.1",
+ "tslib": "^2.0.1"
}
},
"regenerate": {
@@ -35498,9 +22782,9 @@
"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==",
+ "version": "10.1.1",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
+ "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
"dev": true,
"requires": {
"regenerate": "^1.4.2"
@@ -35513,55 +22797,28 @@
"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==",
+ "version": "0.15.2",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
+ "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
"dev": true,
"requires": {
"@babel/runtime": "^7.8.4"
}
},
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "regexp.prototype.flags": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz",
- "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3",
- "functions-have-names": "^1.2.2"
- }
- },
"regexpu-core": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz",
- "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==",
+ "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",
- "regjsgen": "^0.7.1",
"regjsparser": "^0.9.1",
"unicode-match-property-ecmascript": "^2.0.0",
"unicode-match-property-value-ecmascript": "^2.1.0"
}
},
- "regjsgen": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz",
- "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==",
- "dev": true
- },
"regjsparser": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
@@ -35598,116 +22855,6 @@
"unist-util-visit": "^2.0.0"
}
},
- "remark-footnotes": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz",
- "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==",
- "dev": true
- },
- "remark-mdx": {
- "version": "1.6.22",
- "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz",
- "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==",
- "dev": true,
- "requires": {
- "@babel/core": "7.12.9",
- "@babel/helper-plugin-utils": "7.10.4",
- "@babel/plugin-proposal-object-rest-spread": "7.12.1",
- "@babel/plugin-syntax-jsx": "7.12.1",
- "@mdx-js/util": "1.6.22",
- "is-alphabetical": "1.0.4",
- "remark-parse": "8.0.3",
- "unified": "9.2.0"
- },
- "dependencies": {
- "@babel/core": {
- "version": "7.12.9",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz",
- "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.10.4",
- "@babel/generator": "^7.12.5",
- "@babel/helper-module-transforms": "^7.12.1",
- "@babel/helpers": "^7.12.5",
- "@babel/parser": "^7.12.7",
- "@babel/template": "^7.12.7",
- "@babel/traverse": "^7.12.9",
- "@babel/types": "^7.12.7",
- "convert-source-map": "^1.7.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.1",
- "json5": "^2.1.2",
- "lodash": "^4.17.19",
- "resolve": "^1.3.2",
- "semver": "^5.4.1",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-plugin-utils": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
- "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
- "dev": true
- },
- "@babel/plugin-proposal-object-rest-spread": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz",
- "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
- "@babel/plugin-transform-parameters": "^7.12.1"
- }
- },
- "@babel/plugin-syntax-jsx": {
- "version": "7.12.1",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz",
- "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==",
- "dev": true,
- "requires": {
- "@babel/helper-plugin-utils": "^7.10.4"
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true
- }
- }
- },
- "remark-parse": {
- "version": "8.0.3",
- "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz",
- "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==",
- "dev": true,
- "requires": {
- "ccount": "^1.0.0",
- "collapse-white-space": "^1.0.2",
- "is-alphabetical": "^1.0.0",
- "is-decimal": "^1.0.0",
- "is-whitespace-character": "^1.0.0",
- "is-word-character": "^1.0.0",
- "markdown-escapes": "^1.0.0",
- "parse-entities": "^2.0.0",
- "repeat-string": "^1.5.4",
- "state-toggle": "^1.0.0",
- "trim": "0.0.1",
- "trim-trailing-lines": "^1.0.0",
- "unherit": "^1.0.4",
- "unist-util-remove-position": "^2.0.0",
- "vfile-location": "^3.0.0",
- "xtend": "^4.0.1"
- }
- },
"remark-slug": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz",
@@ -35719,21 +22866,6 @@
"unist-util-visit": "^2.0.0"
}
},
- "remark-squeeze-paragraphs": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz",
- "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==",
- "dev": true,
- "requires": {
- "mdast-squeeze-paragraphs": "^4.0.0"
- }
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
- "dev": true
- },
"renderkid": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz",
@@ -35747,28 +22879,12 @@
"strip-ansi": "^6.0.1"
}
},
- "repeat-element": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
+ "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
},
- "repeating": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
- "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-finite": "^1.0.0"
- }
- },
"resolve": {
"version": "1.22.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
@@ -35786,17 +22902,23 @@
"integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
"dev": true
},
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
- "dev": true
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
+ "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
+ }
+ }
},
"reusify": {
"version": "1.0.4",
@@ -35805,30 +22927,30 @@
"dev": true
},
"rimraf": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
- "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
+ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
"dev": true,
"requires": {
"glob": "^7.1.3"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
}
},
- "ripemd160": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz",
- "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
- "dev": true,
- "requires": {
- "hash-base": "^3.0.0",
- "inherits": "^2.0.1"
- }
- },
- "rsvp": {
- "version": "4.8.5",
- "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz",
- "integrity": "sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA==",
- "dev": true
- },
"run-parallel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
@@ -35838,302 +22960,23 @@
"queue-microtask": "^1.2.2"
}
},
- "run-queue": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
- "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==",
- "dev": true,
- "requires": {
- "aproba": "^1.1.1"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
- "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
- "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==",
+ "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
},
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "safe-regex-test": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz",
- "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
- "is-regex": "^1.1.4"
- }
- },
"safer-buffer": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
"dev": true
},
- "sane": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/sane/-/sane-4.1.0.tgz",
- "integrity": "sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA==",
- "dev": true,
- "requires": {
- "@cnakazawa/watch": "^1.0.3",
- "anymatch": "^2.0.0",
- "capture-exit": "^2.0.0",
- "exec-sh": "^0.3.2",
- "execa": "^1.0.0",
- "fb-watchman": "^2.0.0",
- "micromatch": "^3.1.4",
- "minimist": "^1.1.1",
- "walker": "~1.0.5"
- },
- "dependencies": {
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- }
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "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"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "cross-spawn": {
- "version": "6.0.5",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
- "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
- "dev": true,
- "requires": {
- "nice-try": "^1.0.4",
- "path-key": "^2.0.1",
- "semver": "^5.5.0",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- }
- },
- "execa": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
- "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
- "dev": true,
- "requires": {
- "cross-spawn": "^6.0.0",
- "get-stream": "^4.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "get-stream": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
- "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
- "dev": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-stream": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
- "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "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"
- }
- },
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==",
- "dev": true,
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "path-key": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
- "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==",
- "dev": true
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "shebang-command": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
- "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==",
- "dev": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
- "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==",
- "dev": true
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- }
- }
- },
"scheduler": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
"integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
"dev": true,
- "peer": true,
"requires": {
"loose-envify": "^1.1.0"
}
@@ -36210,33 +23053,6 @@
"randombytes": "^2.1.0"
}
},
- "serve-favicon": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz",
- "integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==",
- "dev": true,
- "requires": {
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "ms": "2.1.1",
- "parseurl": "~1.3.2",
- "safe-buffer": "5.1.1"
- },
- "dependencies": {
- "ms": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
- "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
- "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==",
- "dev": true
- }
- }
- },
"serve-static": {
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
@@ -36249,63 +23065,24 @@
"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
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
+ "set-function-length": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz",
+ "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==",
"dev": true,
"requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- }
+ "define-data-property": "^1.1.1",
+ "get-intrinsic": "^1.2.1",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.0"
}
},
- "setimmediate": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
- "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==",
- "dev": true
- },
"setprototypeof": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
"dev": true
},
- "sha.js": {
- "version": "2.4.11",
- "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz",
- "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
"shallow-clone": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
@@ -36315,12 +23092,6 @@
"kind-of": "^6.0.2"
}
},
- "shallowequal": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
- "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==",
- "dev": true
- },
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -36348,201 +23119,56 @@
}
},
"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
- },
- "sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "dev": true
- },
- "slash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
- "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
+ "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
"dev": true
},
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "simple-update-notifier": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
+ "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
"dev": true,
"requires": {
- "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"
+ "semver": "^7.5.3"
},
"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"
- }
- },
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+ "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": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
+ "yallist": "^4.0.0"
}
},
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "semver": {
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dev": true,
"requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "lru-cache": "^6.0.0"
}
},
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
+ "yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
"dev": true
}
}
},
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
+ "sisteransi": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
+ "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
+ "dev": true
},
- "source-list-map": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
- "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==",
+ "slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
"source-map": {
@@ -36557,19 +23183,6 @@
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"dev": true
},
- "source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
- "requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
"source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
@@ -36580,12 +23193,6 @@
"source-map": "^0.6.0"
}
},
- "source-map-url": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
- "dev": true
- },
"space-separated-tokens": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz",
@@ -36593,9 +23200,9 @@
"dev": true
},
"spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "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",
@@ -36619,131 +23226,17 @@
}
},
"spdx-license-ids": {
- "version": "3.0.12",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
- "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
+ "version": "3.0.16",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz",
+ "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==",
"dev": true
},
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
"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": "8.0.1",
- "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
- "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
- "dev": true,
- "requires": {
- "minipass": "^3.1.1"
- }
- },
- "stable": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
- "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
- "dev": true
- },
- "state-toggle": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz",
- "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==",
- "dev": true
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
"statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -36756,101 +23249,13 @@
"integrity": "sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==",
"dev": true
},
- "stream-browserify": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz",
- "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==",
+ "storybook": {
+ "version": "7.6.4",
+ "resolved": "https://registry.npmjs.org/storybook/-/storybook-7.6.4.tgz",
+ "integrity": "sha512-nQhs9XkrroxjqMoBnnToyc6M8ndbmpkOb1qmULO4chtfMy4k0p9Un3K4TJvDaP8c3wPUFGd4ZaJ1hZNVmIl56Q==",
"dev": true,
"requires": {
- "inherits": "~2.0.1",
- "readable-stream": "^2.0.2"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "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"
- }
- },
- "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"
- }
- }
- }
- },
- "stream-each": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz",
- "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "stream-http": {
- "version": "2.8.3",
- "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz",
- "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==",
- "dev": true,
- "requires": {
- "builtin-status-codes": "^3.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.3.6",
- "to-arraybuffer": "^1.0.0",
- "xtend": "^4.0.0"
- },
- "dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "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"
- }
- },
- "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"
- }
- }
+ "@storybook/cli": "7.6.4"
}
},
"stream-shift": {
@@ -36866,18 +23271,38 @@
"dev": true,
"requires": {
"safe-buffer": "~5.2.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"
},
"dependencies": {
- "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==",
+ "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
+ },
+ "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"
+ }
}
}
},
- "string-width": {
- "version": "4.2.3",
+ "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,
@@ -36885,66 +23310,14 @@
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
"strip-ansi": "^6.0.1"
- }
- },
- "string.prototype.matchall": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.8.tgz",
- "integrity": "sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4",
- "get-intrinsic": "^1.1.3",
- "has-symbols": "^1.0.3",
- "internal-slot": "^1.0.3",
- "regexp.prototype.flags": "^1.4.3",
- "side-channel": "^1.0.4"
- }
- },
- "string.prototype.padend": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz",
- "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "string.prototype.padstart": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.4.tgz",
- "integrity": "sha512-XqOHj8horGsF+zwxraBvMTkBFM28sS/jHBJajh17JtJKA92qazidiQbLosV4UA18azvLOVKYo/E3g3T9Y5826w==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "string.prototype.trimend": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz",
- "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
- }
- },
- "string.prototype.trimstart": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz",
- "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
- "es-abstract": "^1.20.4"
+ },
+ "dependencies": {
+ "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
+ }
}
},
"strip-ansi": {
@@ -36956,69 +23329,26 @@
"ansi-regex": "^5.0.1"
}
},
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
+ "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,
- "optional": true,
"requires": {
- "is-utf8": "^0.2.0"
+ "ansi-regex": "^5.0.1"
}
},
- "strip-eof": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
- "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==",
- "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-indent": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
- "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==",
- "dev": true,
- "optional": true,
- "requires": {
- "get-stdin": "^4.0.1"
- }
- },
- "style-loader": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-2.0.0.tgz",
- "integrity": "sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==",
- "dev": true,
- "requires": {
- "loader-utils": "^2.0.0",
- "schema-utils": "^3.0.0"
- },
- "dependencies": {
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
- }
- },
- "style-to-object": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz",
- "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==",
- "dev": true,
- "requires": {
- "inline-style-parser": "0.1.1"
- }
+ "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
},
"supports-color": {
"version": "5.5.0",
@@ -37035,52 +23365,50 @@
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true
},
- "symbol.prototype.description": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz",
- "integrity": "sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ==",
+ "swc-loader": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/swc-loader/-/swc-loader-0.2.3.tgz",
+ "integrity": "sha512-D1p6XXURfSPleZZA/Lipb3A8pZ17fP4NObZvFCDjK/OKljroqDpPmsBdTraWhVBqUNpcWBQY1imWdoPScRlQ7A==",
"dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "get-symbol-description": "^1.0.0",
- "has-symbols": "^1.0.2",
- "object.getownpropertydescriptors": "^2.1.2"
- }
+ "requires": {}
},
"synchronous-promise": {
- "version": "2.0.16",
- "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.16.tgz",
- "integrity": "sha512-qImOD23aDfnIDNqlG1NOehdB9IYsn1V9oByPjKY1nakv2MQYCEMyX033/q+aEtYCpmYK1cv2+NTmlH+ra6GA5A==",
+ "version": "2.0.17",
+ "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.17.tgz",
+ "integrity": "sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==",
"dev": true
},
"tapable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
- "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==",
+ "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.13",
- "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz",
- "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
+ "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
"dev": true,
"requires": {
"chownr": "^2.0.0",
"fs-minipass": "^2.0.0",
- "minipass": "^4.0.0",
+ "minipass": "^5.0.0",
"minizlib": "^2.1.1",
"mkdirp": "^1.0.3",
"yallist": "^4.0.0"
},
"dependencies": {
"minipass": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz",
- "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==",
- "dev": true,
- "requires": {
- "yallist": "^4.0.0"
- }
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
+ "dev": true
+ },
+ "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",
@@ -37090,26 +23418,105 @@
}
}
},
+ "tar-fs": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+ "dev": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "mkdirp-classic": "^0.5.2",
+ "pump": "^3.0.0",
+ "tar-stream": "^2.1.4"
+ },
+ "dependencies": {
+ "chownr": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
+ "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"
+ }
+ },
"telejson": {
- "version": "6.0.8",
- "resolved": "https://registry.npmjs.org/telejson/-/telejson-6.0.8.tgz",
- "integrity": "sha512-nerNXi+j8NK1QEfBHtZUN/aLdDcyupA//9kAboYLrtzZlPLpUfqbVGWb9zz91f/mIjRbAYhbgtnJHY8I1b5MBg==",
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz",
+ "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==",
"dev": true,
"requires": {
- "@types/is-function": "^1.0.0",
- "global": "^4.4.0",
- "is-function": "^1.0.2",
- "is-regex": "^1.1.2",
- "is-symbol": "^1.0.3",
- "isobject": "^4.0.0",
- "lodash": "^4.17.21",
"memoizerific": "^1.11.3"
+ }
+ },
+ "temp": {
+ "version": "0.8.4",
+ "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz",
+ "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==",
+ "dev": true,
+ "requires": {
+ "rimraf": "~2.6.2"
},
"dependencies": {
- "isobject": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-4.0.0.tgz",
- "integrity": "sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==",
+ "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"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ }
+ }
+ },
+ "temp-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz",
+ "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==",
+ "dev": true
+ },
+ "tempy": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz",
+ "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==",
+ "dev": true,
+ "requires": {
+ "del": "^6.0.0",
+ "is-stream": "^2.0.0",
+ "temp-dir": "^2.0.0",
+ "type-fest": "^0.16.0",
+ "unique-string": "^2.0.0"
+ },
+ "dependencies": {
+ "type-fest": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz",
+ "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==",
"dev": true
}
}
@@ -37124,14 +23531,6 @@
"acorn": "^8.5.0",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
- },
- "dependencies": {
- "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
- }
}
},
"terser-webpack-plugin": {
@@ -37195,14 +23594,24 @@
"@istanbuljs/schema": "^0.1.2",
"glob": "^7.1.4",
"minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "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"
+ }
+ }
}
},
- "throttle-debounce": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz",
- "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==",
- "dev": true
- },
"through2": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
@@ -37213,16 +23622,10 @@
"xtend": "~4.0.1"
},
"dependencies": {
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
- },
"readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
+ "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",
@@ -37234,6 +23637,12 @@
"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",
@@ -37245,14 +23654,11 @@
}
}
},
- "timers-browserify": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz",
- "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==",
- "dev": true,
- "requires": {
- "setimmediate": "^1.0.4"
- }
+ "tiny-invariant": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz",
+ "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==",
+ "dev": true
},
"tmpl": {
"version": "1.0.5",
@@ -37260,56 +23666,12 @@
"integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==",
"dev": true
},
- "to-arraybuffer": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
- "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==",
- "dev": true
- },
"to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true
},
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
"to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -37319,6 +23681,12 @@
"is-number": "^7.0.0"
}
},
+ "tocbot": {
+ "version": "4.23.0",
+ "resolved": "https://registry.npmjs.org/tocbot/-/tocbot-4.23.0.tgz",
+ "integrity": "sha512-5DWuSZXsqG894mkGb8ZsQt9myyQyVxE50AiGRZ0obV0BVUTVkaZmc9jbgpknaAAPUm4FIrzGkEseD6FuQJYJDQ==",
+ "dev": true
+ },
"toidentifier": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
@@ -37331,59 +23699,22 @@
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"dev": true
},
- "trim": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
- "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==",
- "dev": true
- },
- "trim-newlines": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
- "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==",
- "dev": true,
- "optional": true
- },
- "trim-trailing-lines": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz",
- "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==",
- "dev": true
- },
- "trough": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz",
- "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==",
- "dev": true
- },
"ts-dedent": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz",
"integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
"dev": true
},
- "ts-pnp": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz",
- "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==",
- "dev": true
- },
"tslib": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz",
"integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==",
"dev": true
},
- "tty-browserify": {
- "version": "0.0.0",
- "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
- "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==",
- "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==",
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
"dev": true
},
"type-is": {
@@ -37396,36 +23727,16 @@
"mime-types": "~2.1.24"
}
},
- "typed-array-length": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz",
- "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "for-each": "^0.3.3",
- "is-typed-array": "^1.1.9"
- }
- },
"typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
"dev": true
},
- "typedarray-to-buffer": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
- "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
- "dev": true,
- "requires": {
- "is-typedarray": "^1.0.0"
- }
- },
"typescript": {
- "version": "4.9.4",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz",
- "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==",
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
"dev": true,
"peer": true
},
@@ -37442,34 +23753,6 @@
"dev": true,
"optional": true
},
- "unbox-primitive": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz",
- "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.2",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.0.3",
- "which-boxed-primitive": "^1.0.2"
- }
- },
- "unfetch": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/unfetch/-/unfetch-4.2.0.tgz",
- "integrity": "sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==",
- "dev": true
- },
- "unherit": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz",
- "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.0",
- "xtend": "^4.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",
@@ -37498,109 +23781,21 @@
"integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
"dev": true
},
- "unified": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz",
- "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==",
- "dev": true,
- "requires": {
- "bail": "^1.0.0",
- "extend": "^3.0.0",
- "is-buffer": "^2.0.0",
- "is-plain-obj": "^2.0.0",
- "trough": "^1.0.0",
- "vfile": "^4.0.0"
- }
- },
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true
- }
- }
- },
- "unique-filename": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
- "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
- "dev": true,
- "requires": {
- "unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
- "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
+ "unique-string": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz",
+ "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==",
"dev": true,
"requires": {
- "imurmurhash": "^0.1.4"
+ "crypto-random-string": "^2.0.0"
}
},
- "unist-builder": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz",
- "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==",
- "dev": true
- },
- "unist-util-generated": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz",
- "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==",
- "dev": true
- },
"unist-util-is": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz",
"integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==",
"dev": true
},
- "unist-util-position": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz",
- "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==",
- "dev": true
- },
- "unist-util-remove": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz",
- "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==",
- "dev": true,
- "requires": {
- "unist-util-is": "^4.0.0"
- }
- },
- "unist-util-remove-position": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz",
- "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==",
- "dev": true,
- "requires": {
- "unist-util-visit": "^2.0.0"
- }
- },
- "unist-util-stringify-position": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz",
- "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.2"
- }
- },
"unist-util-visit": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz",
@@ -37634,85 +23829,40 @@
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
"dev": true
},
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
+ "unplugin": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.1.tgz",
+ "integrity": "sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew==",
"dev": true,
"requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
+ "acorn": "^8.11.2",
+ "chokidar": "^3.5.3",
+ "webpack-sources": "^3.2.3",
+ "webpack-virtual-modules": "^0.6.0"
},
"dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
+ "webpack-virtual-modules": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz",
+ "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==",
"dev": true
}
}
},
"untildify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz",
- "integrity": "sha512-sJjbDp2GodvkB0FZZcn7k6afVisqX5BZD7Yq3xp4nN2O15BBK0cLm3Vwn2vQaF7UDS0UUsrQMkkplmDI5fskig==",
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0"
- }
- },
- "upath": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
- "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
- "dev": true,
- "optional": true
+ "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.10",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz",
- "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==",
+ "version": "1.0.13",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
+ "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
"dev": true,
"requires": {
"escalade": "^3.1.1",
"picocolors": "^1.0.0"
- },
- "dependencies": {
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- }
}
},
"uri-js": {
@@ -37724,12 +23874,6 @@
"punycode": "^2.1.0"
}
},
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
- "dev": true
- },
"url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
@@ -37748,51 +23892,45 @@
}
}
},
- "url-loader": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz",
- "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==",
+ "use-callback-ref": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.0.tgz",
+ "integrity": "sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==",
"dev": true,
"requires": {
- "loader-utils": "^2.0.0",
- "mime-types": "^2.1.27",
- "schema-utils": "^3.0.0"
- },
- "dependencies": {
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
- }
+ "tslib": "^2.0.0"
}
},
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
+ "use-resize-observer": {
+ "version": "9.1.0",
+ "resolved": "https://registry.npmjs.org/use-resize-observer/-/use-resize-observer-9.1.0.tgz",
+ "integrity": "sha512-R25VqO9Wb3asSD4eqtcxk8sJalvIOYBqS8MNZlpDSQ4l4xMQxC/J7Id9HoTqPq8FwULIn0PVW+OAqF2dyYbjow==",
+ "dev": true,
+ "requires": {
+ "@juggle/resize-observer": "^3.3.1"
+ }
+ },
+ "use-sidecar": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz",
+ "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==",
+ "dev": true,
+ "requires": {
+ "detect-node-es": "^1.1.0",
+ "tslib": "^2.0.0"
+ }
},
"util": {
- "version": "0.11.1",
- "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz",
- "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==",
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
"dev": true,
"requires": {
- "inherits": "2.0.3"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
- "dev": true
- }
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
}
},
"util-deprecate": {
@@ -37801,16 +23939,6 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
- "util.promisify": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
- "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.2",
- "object.getownpropertydescriptors": "^2.0.3"
- }
- },
"utila": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz",
@@ -37824,15 +23952,9 @@
"dev": true
},
"uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "dev": true
- },
- "uuid-browser": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz",
- "integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
"dev": true
},
"validate-npm-package-license": {
@@ -37851,40 +23973,6 @@
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
"dev": true
},
- "vfile": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz",
- "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "is-buffer": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0",
- "vfile-message": "^2.0.0"
- }
- },
- "vfile-location": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz",
- "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==",
- "dev": true
- },
- "vfile-message": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz",
- "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==",
- "dev": true,
- "requires": {
- "@types/unist": "^2.0.0",
- "unist-util-stringify-position": "^2.0.0"
- }
- },
- "vm-browserify": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
- "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
- "dev": true
- },
"walker": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz",
@@ -37904,289 +23992,15 @@
"graceful-fs": "^4.1.2"
}
},
- "watchpack-chokidar2": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz",
- "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==",
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==",
"dev": true,
- "optional": true,
"requires": {
- "chokidar": "^2.1.8"
- },
- "dependencies": {
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "optional": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- },
- "dependencies": {
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
- "dev": true,
- "optional": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- }
- }
- },
- "binary-extensions": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true,
- "optional": true
- },
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "optional": true,
- "requires": {
- "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"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "chokidar": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
- "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
- "dev": true,
- "optional": true,
- "requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.1",
- "braces": "^2.3.2",
- "fsevents": "^1.2.7",
- "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"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fsevents": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
- "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
- "dev": true,
- "optional": true,
- "requires": {
- "bindings": "^1.5.0",
- "nan": "^2.12.1"
- }
- },
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- },
- "is-binary-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
- "dev": true,
- "optional": true,
- "requires": {
- "binary-extensions": "^1.0.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true,
- "optional": true
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
- "dev": true,
- "optional": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
- "dev": true,
- "optional": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true,
- "optional": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "optional": true,
- "requires": {
- "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"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "optional": true,
- "requires": {
- "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"
- }
- },
- "readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
- "dev": true,
- "optional": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
+ "defaults": "^1.0.3"
}
},
- "web-namespaces": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz",
- "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==",
- "dev": true
- },
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
@@ -38235,39 +24049,6 @@
"ajv": "^6.12.5",
"ajv-keywords": "^3.5.2"
}
- },
- "tapable": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
- "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
- "dev": true
- }
- }
- },
- "webpack-dev-middleware": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz",
- "integrity": "sha512-PjwyVY95/bhBh6VUqt6z4THplYcsvQ8YNNBTBM873xLVmw8FLeALn0qurHbs9EmcfhzQis/eoqypSnZeuUz26w==",
- "dev": true,
- "requires": {
- "colorette": "^1.2.2",
- "mem": "^8.1.1",
- "memfs": "^3.2.2",
- "mime-types": "^2.1.30",
- "range-parser": "^1.2.1",
- "schema-utils": "^3.0.0"
- },
- "dependencies": {
- "schema-utils": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz",
- "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==",
- "dev": true,
- "requires": {
- "@types/json-schema": "^7.0.8",
- "ajv": "^6.12.5",
- "ajv-keywords": "^3.5.2"
- }
}
}
},
@@ -38282,28 +24063,12 @@
"strip-ansi": "^6.0.0"
}
},
- "webpack-log": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz",
- "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==",
- "dev": true,
- "requires": {
- "ansi-colors": "^3.0.0",
- "uuid": "^3.3.2"
- }
- },
"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-virtual-modules": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz",
- "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==",
- "dev": true
- },
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
@@ -38323,49 +24088,17 @@
"isexe": "^2.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-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==",
+ "version": "1.1.13",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
+ "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
"dev": true,
"requires": {
"available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.2",
+ "call-bind": "^1.0.4",
"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"
- }
- },
- "widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dev": true,
- "requires": {
- "string-width": "^4.0.0"
+ "has-tostringtag": "^1.0.0"
}
},
"wordwrap": {
@@ -38374,26 +24107,42 @@
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
"dev": true
},
- "worker-farm": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
- "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==",
- "dev": true,
- "requires": {
- "errno": "~0.1.7"
- }
- },
- "worker-rpc": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz",
- "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==",
+ "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": {
- "microevent.ts": "~0.1.1"
+ "ansi-styles": "^6.1.0",
+ "string-width": "^5.0.1",
+ "strip-ansi": "^7.0.1"
+ },
+ "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
+ },
+ "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": "7.0.0",
+ "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,
@@ -38426,6 +24175,23 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "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"
+ }
}
}
},
@@ -38436,45 +24202,36 @@
"dev": true
},
"write-file-atomic": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
- "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
"dev": true,
"requires": {
"imurmurhash": "^0.1.4",
- "is-typedarray": "^1.0.0",
- "signal-exit": "^3.0.2",
- "typedarray-to-buffer": "^3.1.5"
+ "signal-exit": "^3.0.7"
+ },
+ "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
+ }
}
},
"ws": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.0.tgz",
- "integrity": "sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==",
+ "version": "8.15.1",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-8.15.1.tgz",
+ "integrity": "sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==",
"dev": true,
"requires": {}
},
- "x-default-browser": {
- "version": "0.4.0",
- "resolved": "https://registry.npmjs.org/x-default-browser/-/x-default-browser-0.4.0.tgz",
- "integrity": "sha512-7LKo7RtWfoFN/rHx1UELv/2zHGMx8MkZKDq1xENmOCTkfIqZJ0zZ26NEJX8czhnPXVcqS0ARjjfJB+eJ0/5Cvw==",
- "dev": true,
- "requires": {
- "default-browser-id": "^1.0.4"
- }
- },
"xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true
},
- "y18n": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz",
- "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==",
- "dev": true
- },
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
@@ -38487,17 +24244,21 @@
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==",
"dev": true
},
+ "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
- },
- "zwitch": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz",
- "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==",
- "dev": true
}
}
}
diff --git a/browser/components/storybook/package.json b/browser/components/storybook/package.json
index e6d7b76062..14e168f40d 100644
--- a/browser/components/storybook/package.json
+++ b/browser/components/storybook/package.json
@@ -6,23 +6,27 @@
"scripts": {
"analyze": "cem analyze",
"test": "echo \"Error: no test specified\" && exit 1",
- "build-storybook": "npm run analyze && build-storybook",
- "storybook": "npm run analyze && start-storybook -p 5703 --no-open"
+ "build-storybook": "npm run analyze && storybook build",
+ "storybook": "npm run analyze && storybook dev -p 5703 --no-open"
},
"author": "",
"license": "MPL-2.0",
"devDependencies": {
"@babel/core": "^7.16.0",
+ "@babel/preset-env": "^7.23.6",
+ "@babel/preset-react": "^7.23.3",
"@custom-elements-manifest/analyzer": "^0.6.6",
"@fluent/bundle": "^0.17.1",
"@fluent/dom": "^0.8.1",
- "@storybook/addon-a11y": "^6.5.15",
- "@storybook/addon-actions": "^6.4.8",
- "@storybook/addon-essentials": "^6.4.8",
- "@storybook/addon-links": "^6.4.8",
- "@storybook/builder-webpack5": "^6.4.8",
- "@storybook/manager-webpack5": "^6.4.8",
- "@storybook/web-components": "^6.4.8",
- "babel-loader": "^8.2.3"
+ "@storybook/addon-a11y": "^7.6.4",
+ "@storybook/addon-actions": "^7.6.4",
+ "@storybook/addon-essentials": "^7.6.4",
+ "@storybook/addon-links": "^7.6.4",
+ "@storybook/web-components": "^7.6.4",
+ "@storybook/web-components-webpack5": "^7.6.4",
+ "babel-loader": "^8.2.3",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0",
+ "storybook": "^7.6.4"
}
}
diff --git a/browser/components/storybook/stories/button.stories.mjs b/browser/components/storybook/stories/button.stories.mjs
index ad800c83ec..e64e73f356 100644
--- a/browser/components/storybook/stories/button.stories.mjs
+++ b/browser/components/storybook/stories/button.stories.mjs
@@ -14,6 +14,9 @@ export default {
},
},
parameters: {
+ actions: {
+ handles: ["click"],
+ },
status: "stable",
fluent: `
button-regular = Regular
diff --git a/browser/components/storybook/stories/fxview-category-navigation.stories.mjs b/browser/components/storybook/stories/fxview-category-navigation.stories.mjs
deleted file mode 100644
index 74a379a5a8..0000000000
--- a/browser/components/storybook/stories/fxview-category-navigation.stories.mjs
+++ /dev/null
@@ -1,113 +0,0 @@
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
-import { html } from "lit.all.mjs";
-// eslint-disable-next-line import/no-unassigned-import
-import "browser/components/firefoxview/fxview-category-navigation.mjs";
-
-export default {
- title: "Domain-specific UI Widgets/Firefox View/Category Navigation",
- component: "fxview-category-navigation",
- parameters: {
- status: "in-development",
- actions: {
- handles: ["change-category"],
- },
- fluent: `
-fxview-category-button-one = Category 1
- .title = Category 1
-fxview-category-button-two = Category 2
- .title = Category 2
-fxview-category-button-three = Category 3
- .title = Category 3
-fxview-category-footer-button = Settings
- .title = Settings
- `,
- },
-};
-
-const Template = () => html`
- <style>
- #page {
- height: 100%;
- display: grid;
- grid-template-columns: var(--in-content-sidebar-width) 1fr;
- }
- fxview-category-navigation {
- margin-inline-start: 10px;
- }
- fxview-category-button[name="category-one"]::part(icon) {
- background-image: url("chrome://browser/skin/preferences/category-general.svg");
- }
- fxview-category-button[name="category-two"]::part(icon) {
- background-image: url("chrome://browser/skin/preferences/category-general.svg");
- }
- fxview-category-button[name="category-three"]::part(icon) {
- background-image: url("chrome://browser/skin/preferences/category-general.svg");
- }
- .footer-button {
- display: flex;
- gap: 12px;
- font-weight: normal;
- min-width: unset;
- padding: 8px;
- margin: 0;
- }
- .footer-button .cat-icon {
- background-image: url("chrome://browser/skin/preferences/category-general.svg");
- background-color: initial;
- background-size: 20px;
- background-repeat: no-repeat;
- background-position: center;
- height: 20px;
- width: 20px;
- display: inline-block;
- -moz-context-properties: fill;
- fill: currentColor;
- }
- @media (max-width: 52rem) {
- #page {
- grid-template-columns: 82px 1fr;
- }
- .cat-name {
- display: none;
- }
- }
- </style>
- <div id="page">
- <fxview-category-navigation>
- <h2 slot="category-nav-header">Header</h2>
- <fxview-category-button
- slot="category-button"
- name="category-one"
- data-l10n-id="fxview-category-button-one"
- >
- </fxview-category-button>
- <fxview-category-button
- slot="category-button"
- name="category-two"
- data-l10n-id="fxview-category-button-two"
- >
- </fxview-category-button>
- <fxview-category-button
- slot="category-button"
- name="category-three"
- data-l10n-id="fxview-category-button-three"
- >
- </fxview-category-button>
- <div slot="category-nav-footer" class="category-nav-footer">
- <button class="footer-button ghost-button">
- <span class="cat-icon"></span>
- <span
- class="cat-name"
- data-l10n-id="fxview-category-footer-button"
- ></span>
- </button>
- </div>
- </fxview-category-navigation>
- </div>
-`;
-
-export const Default = Template.bind({});
-Default.args = {};
diff --git a/browser/components/storybook/stories/fxview-tab-list.stories.md b/browser/components/storybook/stories/fxview-tab-list.stories.md
index 9e6c59a89d..ae3d39d72a 100644
--- a/browser/components/storybook/stories/fxview-tab-list.stories.md
+++ b/browser/components/storybook/stories/fxview-tab-list.stories.md
@@ -28,7 +28,7 @@ And used as follows:
With context menu:
```html
<fxview-tab-list
- class="with-context-menu"
+ secondaryActionClass="options-button"
.dateTimeFormat=${"relative"}
.hasPopup=${"menu"}
.maxTabsLength=${this.maxTabsLength}
@@ -80,7 +80,11 @@ You'll need to pass along some of the following properties:
* `primaryL10nId` (**Optional**) - The l10n id to be used for the primary action element. This fluent string should ONLY define a `.title` attribute to describe the link element in each row.
* `primaryL10nArgs` (**Optional**) - The l10n args you can optionally pass for the primary action element
* `secondaryL10nId` (**Optional**) - The l10n id to be used for the secondary action button. This fluent string should ONLY define a `.title` attribute to describe the secondary button in each row.
+ * `tertiaryL10nId` (**Optional**) - The l10n id to be used for the tertiary action button. This fluent string should ONLY define a `.title` attribute to describe the secondary button in each row.
* `secondaryL10nArgs` (**Optional**) - The l10n args you can optionally pass for the secondary action button
+ * `tertiaryL10nArgs` (**Optional**) - The l10n args you can optionally pass for the tertiary action button
+ * `secondaryActionClass` (**Optional**) - The class used to style the secondary action button. `options-button` or `dismiss-button`
+ * `tertiaryActionClass` (**Optional**) - The class used to style the tertiary action button. `options-button` or `dismiss-button`
* `tabElement` (**Optional**) - The MozTabbrowserTab element for the tab item.
* `sourceClosedId` (**Optional**) - The closedId of the closed window the tab is from if applicable.
* `sourceWindowId` (**Optional**) - The SessionStore id of the window the tab is from if applicable.
@@ -93,10 +97,12 @@ You'll need to pass along some of the following properties:
### Notes
-* In order to keep this as generic as possible, the icon for the secondary action button will NOT have a default. You can supply a `class` attribute to an instance of `fxview-tab-list` in order to apply styles to things like the icon for the secondary action button. In the above example, I added a class `"with-context-menu"` to `fxview-tab-list`, so I can update the button's icon by using:
+* In order to keep this as generic as possible, the icon for the secondary action button will NOT have a default. You can supply a `class` attribute to an instance of `fxview-tab-list` in order to apply styles to things like the icon for the secondary action button. In the above example, I added a `secondaryActionClass` `"options-button"` to `fxview-tab-list`, so I can update the button's icon by using:
```css
- fxview-tab-list.with-context-menu::part(secondary-button) {
- background-image: url("chrome://global/skin/icons/more.svg");
+ .fxview-tab-row-button {
+ &.options-button {
+ background-image: url("chrome://global/skin/icons/more.svg");
+ }
}
```
* You'll also need to define functions for the `fxview-tab-list-primary-action` and `fxview-tab-list-secondary-action` listeners in order to add functionality to the primary element and the secondary button.
diff --git a/browser/components/storybook/stories/migration-wizard.stories.mjs b/browser/components/storybook/stories/migration-wizard.stories.mjs
index 64ce519a66..53d4698a7a 100644
--- a/browser/components/storybook/stories/migration-wizard.stories.mjs
+++ b/browser/components/storybook/stories/migration-wizard.stories.mjs
@@ -172,7 +172,27 @@ const FAKE_MIGRATOR_LIST = [
},
];
-const Template = ({ state, dialogMode }) => html`
+const Template = ({
+ state,
+ dialogMode,
+ forceShowImportAll,
+ hideOptionExpanderSubtitle,
+ optionExpanderTitleString,
+ hideSelectAll,
+ importButtonString,
+ checkboxMarginInline,
+ checkboxMarginBlock,
+ importButtonClass,
+ selectionHeaderString,
+ selectionSubheaderString,
+ dataImportCompleteSuccessString,
+ headerFontSize,
+ headerMarginBlock,
+ headerFontWeight,
+ subheaderFontSize,
+ subheaderMarginBlock,
+ subheaderFontWeight,
+}) => html`
<style>
@media (prefers-reduced-motion: no-preference) {
migration-wizard::part(progress-spinner) {
@@ -184,6 +204,23 @@ const Template = ({ state, dialogMode }) => html`
<div class="card card-no-hover" style="width: fit-content">
<migration-wizard
?dialog-mode=${dialogMode}
+ ?force-show-import-all=${forceShowImportAll}
+ ?hide-option-expander-subtitle=${hideOptionExpanderSubtitle}
+ option-expander-title-string=${optionExpanderTitleString}
+ ?hide-select-all=${hideSelectAll}
+ import-button-string=${importButtonString}
+ import-button-class=${importButtonClass}
+ checkbox-margin-inline=${checkboxMarginInline}
+ checkbox-margin-block=${checkboxMarginBlock}
+ selection-header-string=${selectionHeaderString}
+ selection-subheader-string=${selectionSubheaderString}
+ data-import-complete-success-string=${dataImportCompleteSuccessString}
+ header-font-size=${headerFontSize}
+ header-margin-block=${headerMarginBlock}
+ header-font-weight=${headerFontWeight}
+ subheader-font-size=${subheaderFontSize}
+ subheader-margin-block=${subheaderMarginBlock}
+ subheader-font-weight=${subheaderFontWeight}
.state=${state}
></migration-wizard>
</div>
@@ -217,6 +254,33 @@ MainSelectorVariant2.args = {
},
};
+export const CustomizedSelectionPage = Template.bind({});
+CustomizedSelectionPage.args = {
+ dialogMode: true,
+ state: {
+ page: MigrationWizardConstants.PAGES.SELECTION,
+ migrators: FAKE_MIGRATOR_LIST,
+ showImportAll: true,
+ },
+ forceShowImportAll: false,
+ hideOptionExpanderSubtitle: false,
+ hideSelectAll: false,
+ importButtonString: "Custom Button String",
+ checkboxMarginInline: "5px",
+ checkboxMarginBlock: "10px",
+ importButtonClass: "test-class",
+ optionExpanderTitleString: "Options",
+ selectionHeaderString: "Custom Header",
+ selectionSubheaderString: "Custom Subheader",
+ dataImportCompleteSuccessString: "Custom Data Import Success",
+ headerFontSize: "24px",
+ headerMarginBlock: "0 4px",
+ headerFontWeight: "590",
+ subheaderFontSize: "13px",
+ subheaderMarginBlock: "0 28px",
+ subheaderFontWeight: "400",
+};
+
export const NoPermissionMessage = Template.bind({});
NoPermissionMessage.args = {
dialogMode: true,
diff --git a/browser/components/syncedtabs/TabListView.sys.mjs b/browser/components/syncedtabs/TabListView.sys.mjs
index a280a0fe0f..041d7300d9 100644
--- a/browser/components/syncedtabs/TabListView.sys.mjs
+++ b/browser/components/syncedtabs/TabListView.sys.mjs
@@ -411,12 +411,9 @@ TabListView.prototype = {
// Set up the custom context menu
_setupContextMenu() {
- Services.els.addSystemEventListener(
- this._window,
- "contextmenu",
- this,
- false
- );
+ this._window.addEventListener("contextmenu", this, {
+ mozSystemGroup: true,
+ });
for (let getMenu of [getContextMenu, getTabsFilterContextMenu]) {
let menu = getMenu(this._window);
menu.addEventListener("popupshowing", this, true);
@@ -426,12 +423,9 @@ TabListView.prototype = {
_teardownContextMenu() {
// Tear down context menu
- Services.els.removeSystemEventListener(
- this._window,
- "contextmenu",
- this,
- false
- );
+ this._window.removeEventListener("contextmenu", this, {
+ mozSystemGroup: true,
+ });
for (let getMenu of [getContextMenu, getTabsFilterContextMenu]) {
let menu = getMenu(this._window);
menu.removeEventListener("popupshowing", this, true);
diff --git a/browser/components/tabpreview/tabpreview.css b/browser/components/tabpreview/tabpreview.css
index 8b288cb95d..776f520c7d 100644
--- a/browser/components/tabpreview/tabpreview.css
+++ b/browser/components/tabpreview/tabpreview.css
@@ -3,13 +3,25 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
.tab-preview-container {
- background-color: #ffffff;
- color: #15141a;
+ --tab-preview-background-color: light-dark(#fff, #42414d);
+ --tab-preview-text-color: light-dark(#15141a, #fbfbfe);
+ --tab-preview-border-color: light-dark(#cfcfd8, #8f8f9d);
+
+ @media (prefers-contrast) {
+ --tab-preview-background-color: Canvas;
+ --tab-preview-text-color: CanvasText;
+ }
+}
+
+.tab-preview-container {
+ background-color: var(--tab-preview-background-color);
+ color: var(--tab-preview-text-color);
border-radius: 9px;
display: inline-block;
width: 280px;
overflow: hidden;
line-height: 1.5;
+ border: 1px solid var(--tab-preview-border-color);
}
.tab-preview-title {
@@ -19,7 +31,7 @@
}
.tab-preview-uri {
- color: #4a4b49;
+ color: var(--text-color-deemphasized);
max-height: 1.5em;
overflow: hidden;
white-space: nowrap;
@@ -30,32 +42,16 @@
padding: 8px;
}
+.tab-preview-thumbnail-container {
+ border-top: 1px solid var(--tab-preview-border-color);
+}
+
.tab-preview-thumbnail-container img,
.tab-preview-thumbnail-container canvas {
display: block;
width: 100%;
}
-@media (prefers-color-scheme: dark) {
- .tab-preview-container {
- background-color: #42414d;
- color: #fbfbfe;
- }
- .tab-preview-uri {
- color: #cfcfd8;
- }
-}
-
-@media (prefers-contrast) {
- .tab-preview-container {
- background-color: Canvas;
- color: CanvasText;
- }
- .tab-preview-uri {
- color: CanvasText;
- }
-}
-
@media (max-width: 640px) {
.tab-preview-thumbnail-container {
display: none;
diff --git a/browser/components/tabpreview/tabpreview.mjs b/browser/components/tabpreview/tabpreview.mjs
index 5256ab22ff..2409c3fa7a 100644
--- a/browser/components/tabpreview/tabpreview.mjs
+++ b/browser/components/tabpreview/tabpreview.mjs
@@ -11,7 +11,6 @@ var { XPCOMUtils } = ChromeUtils.importESModule(
const TAB_PREVIEW_USE_THUMBNAILS_PREF =
"browser.tabs.cardPreview.showThumbnails";
-const TAB_PREVIEW_DELAY_PREF = "browser.tabs.cardPreview.delayMs";
/**
* Detailed preview card that displays when hovering a tab
@@ -37,8 +36,7 @@ export default class TabPreview extends MozLitElement {
XPCOMUtils.defineLazyPreferenceGetter(
this,
"_prefPreviewDelay",
- TAB_PREVIEW_DELAY_PREF,
- 1000
+ "ui.tooltip.delay_ms"
);
XPCOMUtils.defineLazyPreferenceGetter(
this,
@@ -62,8 +60,8 @@ export default class TabPreview extends MozLitElement {
this.panel.setAttribute("noautofocus", true);
this.panel.setAttribute("norolluponanchor", true);
this.panel.setAttribute("consumeoutsideclicks", "never");
+ this.panel.setAttribute("rolluponmousewheel", "true");
this.panel.setAttribute("level", "parent");
- this.panel.setAttribute("type", "arrow");
this.shadowRoot.append(this.panel);
return this.panel;
}
@@ -84,9 +82,9 @@ export default class TabPreview extends MozLitElement {
getPrettyURI(uri) {
try {
const url = new URL(uri);
- return `${url.hostname}${url.pathname}`.replace(/\/+$/, "");
+ return `${url.hostname}`.replace(/^w{3}\./, "");
} catch {
- return this.pageURI;
+ return uri;
}
}
@@ -96,10 +94,6 @@ export default class TabPreview extends MozLitElement {
this.requestUpdate();
break;
}
- case "wheel": {
- this.hidePreview();
- break;
- }
case "popuphidden": {
this.previewHidden();
break;
@@ -113,29 +107,23 @@ export default class TabPreview extends MozLitElement {
y: -2,
isContextMenu: false,
});
- window.addEventListener("wheel", this, {
- capture: true,
- passive: true,
- });
window.addEventListener("TabSelect", this);
this.panel.addEventListener("popuphidden", this);
}
hidePreview() {
this.panel.hidePopup();
- this.updateComplete.then(() => {
- /**
- * @event TabPreview#previewhidden
- * @type {CustomEvent}
- */
- this.dispatchEvent(new CustomEvent("previewhidden"));
- });
}
previewHidden() {
- window.removeEventListener("wheel", this, { capture: true, passive: true });
window.removeEventListener("TabSelect", this);
this.panel.removeEventListener("popuphidden", this);
+
+ /**
+ * @event TabPreview#previewhidden
+ * @type {CustomEvent}
+ */
+ this.dispatchEvent(new CustomEvent("previewhidden"));
}
// compute values derived from tab element
diff --git a/browser/components/tests/browser/browser.toml b/browser/components/tests/browser/browser.toml
index ffb3012e72..c754191b8b 100644
--- a/browser/components/tests/browser/browser.toml
+++ b/browser/components/tests/browser/browser.toml
@@ -20,6 +20,9 @@ reason = "test depends on update channel"
["browser_default_browser_prompt.js"]
+["browser_default_webprotocol_handler_mailto.js"]
+run-if = ["os == 'win'"]
+
["browser_initial_tab_remoteType.js"]
https_first_disabled = true
@@ -33,8 +36,5 @@ skip-if = ["os == 'mac'"]
["browser_startup_homepage.js"]
-["browser_system_notification_telemetry.js"]
-run-if = ["os == 'win'"]
-
["browser_to_handle_telemetry.js"]
run-if = ["os == 'win'"]
diff --git a/browser/components/tests/browser/browser_default_webprotocol_handler_mailto.js b/browser/components/tests/browser/browser_default_webprotocol_handler_mailto.js
new file mode 100644
index 0000000000..d061d84b23
--- /dev/null
+++ b/browser/components/tests/browser/browser_default_webprotocol_handler_mailto.js
@@ -0,0 +1,117 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const WebProtocolHandlerRegistrar = ChromeUtils.importESModule(
+ "resource:///modules/WebProtocolHandlerRegistrar.sys.mjs"
+).WebProtocolHandlerRegistrar.prototype;
+
+add_setup(function add_setup() {
+ Services.prefs.setBoolPref("browser.mailto.dualPrompt", true);
+});
+
+// site specific settings
+const protocol = "mailto";
+const sss_domain = "test.example.com";
+const ss_setting = "system.under.test";
+
+add_task(async function check_null_value() {
+ Assert.equal(
+ null,
+ await WebProtocolHandlerRegistrar._getSiteSpecificSetting(
+ sss_domain,
+ ss_setting
+ ),
+ "site specific setting should initially not exist and return null."
+ );
+});
+
+add_task(async function check_default_value() {
+ Assert.equal(
+ true,
+ await WebProtocolHandlerRegistrar._getSiteSpecificSetting(
+ sss_domain,
+ ss_setting,
+ null,
+ true
+ ),
+ "site specific setting with a fallback/default value set to true."
+ );
+});
+
+add_task(async function check_save_value() {
+ WebProtocolHandlerRegistrar._saveSiteSpecificSetting(
+ sss_domain,
+ ss_setting,
+ ss_setting
+ );
+ Assert.equal(
+ ss_setting,
+ await WebProtocolHandlerRegistrar._getSiteSpecificSetting(
+ sss_domain,
+ ss_setting
+ ),
+ "site specific setting save and retrieve test."
+ );
+});
+
+add_task(async function check_installHash() {
+ Assert.notEqual(
+ null,
+ WebProtocolHandlerRegistrar._getInstallHash(),
+ "test to check the installHash"
+ );
+});
+
+add_task(async function check_addLocal() {
+ let currentHandler = WebProtocolHandlerRegistrar._addLocal(
+ protocol,
+ sss_domain,
+ sss_domain
+ );
+
+ Assert.equal(
+ sss_domain,
+ currentHandler.name,
+ "does the handler have the right name?"
+ );
+ Assert.equal(
+ sss_domain,
+ currentHandler.uriTemplate,
+ "does the handler have the right uri?"
+ );
+
+ WebProtocolHandlerRegistrar._setLocalDefault(currentHandler);
+
+ WebProtocolHandlerRegistrar.removeProtocolHandler(
+ protocol,
+ currentHandler.uriTemplate
+ );
+});
+
+add_task(async function check_bar_is_shown() {
+ let browserWindow = Services.wm.getMostRecentWindow("navigator:browser");
+ browserWindow.windowUtils.disableNonTestMouseEvents(true);
+ browserWindow.document
+ .getElementById("main-window")
+ .removeAttribute("remotecontrol");
+ let browser = browserWindow.gBrowser.selectedBrowser;
+
+ await WebProtocolHandlerRegistrar._askUserToSetMailtoHandler(
+ browser,
+ protocol,
+ Services.io.newURI("https://" + sss_domain),
+ sss_domain
+ );
+
+ let button_yes = browserWindow.document.querySelector(
+ "[data-l10n-id='protocolhandler-mailto-os-handler-yes-button']"
+ );
+ Assert.notEqual(null, button_yes, "is the yes-button there?");
+
+ let button_no = browserWindow.document.querySelector(
+ "[data-l10n-id='protocolhandler-mailto-os-handler-no-button']"
+ );
+ Assert.notEqual(null, button_no, "is the no-button there?");
+});
diff --git a/browser/components/tests/browser/browser_system_notification_telemetry.js b/browser/components/tests/browser/browser_system_notification_telemetry.js
deleted file mode 100644
index 6cc8d12165..0000000000
--- a/browser/components/tests/browser/browser_system_notification_telemetry.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-async function handleCommandLine(args, state) {
- let newWinPromise;
- let target = Services.urlFormatter.formatURLPref(
- "browser.shell.defaultBrowserAgent.thanksURL"
- );
-
- const EXISTING_FILE = Cc["@mozilla.org/file/local;1"].createInstance(
- Ci.nsIFile
- );
- EXISTING_FILE.initWithPath(getTestFilePath("dummy.pdf"));
-
- if (state == Ci.nsICommandLine.STATE_INITIAL_LAUNCH) {
- newWinPromise = BrowserTestUtils.waitForNewWindow({
- url: target, // N.b.: trailing slashes matter when matching.
- });
- }
-
- let cmdLineHandler = Cc["@mozilla.org/browser/final-clh;1"].getService(
- Ci.nsICommandLineHandler
- );
-
- let fakeCmdLine = Cu.createCommandLine(args, EXISTING_FILE.parent, state);
- cmdLineHandler.handle(fakeCmdLine);
-
- if (newWinPromise) {
- let newWin = await newWinPromise;
- await BrowserTestUtils.closeWindow(newWin);
- } else {
- BrowserTestUtils.removeTab(gBrowser.selectedTab);
- }
-}
-
-// Launching from the WDBA should open the "thanks" page and should send a
-// telemetry event.
-add_task(async function test_launched_to_handle_default_browser_agent() {
- await handleCommandLine(
- ["-to-handle-default-browser-agent"],
- Ci.nsICommandLine.STATE_INITIAL_LAUNCH
- );
-
- TelemetryTestUtils.assertEvents(
- [{ extra: { name: "default-browser-agent" } }],
- {
- category: "browser.launched_to_handle",
- method: "system_notification",
- object: "toast",
- }
- );
-});
diff --git a/browser/components/tests/browser/whats_new_page/browser.toml b/browser/components/tests/browser/whats_new_page/browser.toml
index b8b9b93d4a..51426ea851 100644
--- a/browser/components/tests/browser/whats_new_page/browser.toml
+++ b/browser/components/tests/browser/whats_new_page/browser.toml
@@ -19,3 +19,5 @@ prefs = [
]
["browser_whats_new_page.js"]
+
+["include:./browser_whats_new_page_nimbus.toml"]
diff --git a/browser/components/tests/browser/whats_new_page/browser_whats_new_page_nimbus.js b/browser/components/tests/browser/whats_new_page/browser_whats_new_page_nimbus.js
new file mode 100644
index 0000000000..a46e4fec34
--- /dev/null
+++ b/browser/components/tests/browser/whats_new_page/browser_whats_new_page_nimbus.js
@@ -0,0 +1,109 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(async function nimbus_whats_new_page() {
+ // The test harness will use the current tab and remove the tab's history.
+ // Since the page that is tested is opened prior to the test harness taking
+ // over the current tab the active-update.xml specifies two pages to open by
+ // having 'https://example.com/|https://example.com/' for the value of openURL
+ // and then uses the first tab for the test.
+ gBrowser.selectedTab = gBrowser.tabs[0];
+ // The test harness also changes the page to about:blank so go back to the
+ // page that was originally opened.
+ gBrowser.goBack();
+ // Wait for the page to go back to the original page.
+ await TestUtils.waitForCondition(
+ () =>
+ gBrowser.selectedBrowser &&
+ gBrowser.selectedBrowser.currentURI &&
+ gBrowser.selectedBrowser.currentURI.spec ==
+ "https://www.mozilla.org/en-US/projects/firefox/whatsnew/",
+ `Waiting for the expected page to reopen, ${gBrowser.selectedBrowser.currentURI.spec}`
+ );
+ is(
+ gBrowser.selectedBrowser.currentURI.spec,
+ "https://www.mozilla.org/en-US/projects/firefox/whatsnew/",
+ "The what's new page's url should equal https://www.mozilla.org/en-US/projects/firefox/whatsnew/"
+ );
+ gBrowser.removeTab(gBrowser.selectedTab);
+
+ let um = Cc["@mozilla.org/updates/update-manager;1"].getService(
+ Ci.nsIUpdateManager
+ );
+ await TestUtils.waitForCondition(
+ () => !um.readyUpdate,
+ "Waiting for the ready update to be removed"
+ );
+ ok(!um.readyUpdate, "There should not be a ready update");
+ await TestUtils.waitForCondition(
+ () => !!um.getUpdateAt(0),
+ "Waiting for the ready update to be moved to the update history"
+ );
+ ok(!!um.getUpdateAt(0), "There should be an update in the update history");
+
+ // Leave no trace. Since this test modifies its support files put them back in
+ // their original state.
+ let alternatePath = Services.prefs.getCharPref("app.update.altUpdateDirPath");
+ let testRoot = Services.prefs.getCharPref("mochitest.testRoot");
+ let relativePath = alternatePath.substring("<test-root>".length);
+ if (AppConstants.platform == "win") {
+ relativePath = relativePath.replace(/\//g, "\\");
+ }
+ alternatePath = testRoot + relativePath;
+ let updateDir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
+ updateDir.initWithPath(alternatePath);
+
+ let activeUpdateFile = updateDir.clone();
+ activeUpdateFile.append("active-update.xml");
+ await TestUtils.waitForCondition(
+ () => !activeUpdateFile.exists(),
+ "Waiting until the active-update.xml file does not exist"
+ );
+
+ let updatesFile = updateDir.clone();
+ updatesFile.append("updates.xml");
+ await TestUtils.waitForCondition(
+ () => updatesFile.exists(),
+ "Waiting until the updates.xml file exists"
+ );
+
+ let fos = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(
+ Ci.nsIFileOutputStream
+ );
+ let flags =
+ FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE | FileUtils.MODE_TRUNCATE;
+
+ let stateSucceeded = "succeeded\n";
+ let updateStatusFile = updateDir.clone();
+ updateStatusFile.append("updates");
+ updateStatusFile.append("0");
+ updateStatusFile.append("update.status");
+ updateStatusFile.create(Ci.nsIFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE);
+ fos.init(updateStatusFile, flags, FileUtils.PERMS_FILE, 0);
+ fos.write(stateSucceeded, stateSucceeded.length);
+ fos.close();
+
+ let xmlContents =
+ '<?xml version="1.0"?><updates xmlns="http://www.mozilla.org/2005/' +
+ 'app-update"><update xmlns="http://www.mozilla.org/2005/app-update" ' +
+ 'appVersion="99999999.0" buildID="20990101111111" channel="test" ' +
+ 'detailsURL="https://127.0.0.1/" displayVersion="1.0" installDate="' +
+ '1555716429454" isCompleteUpdate="true" name="What\'s New Page Test" ' +
+ 'previousAppVersion="60.0" serviceURL="https://127.0.0.1/update.xml" ' +
+ 'type="minor" platformVersion="99999999.0" actions="showURL" ' +
+ 'openURL="https://example.com/|https://example.com/"><patch size="1" ' +
+ 'type="complete" URL="https://127.0.0.1/complete.mar" ' +
+ 'selected="true" state="pending"/></update></updates>\n';
+ activeUpdateFile.create(Ci.nsIFile.NORMAL_FILE_TYPE, FileUtils.PERMS_FILE);
+ fos.init(activeUpdateFile, flags, FileUtils.PERMS_FILE, 0);
+ fos.write(xmlContents, xmlContents.length);
+ fos.close();
+
+ updatesFile.remove(false);
+ Cc["@mozilla.org/updates/update-manager;1"]
+ .getService(Ci.nsIUpdateManager)
+ .QueryInterface(Ci.nsIObserver)
+ .observe(null, "um-reload-update-data", "");
+});
diff --git a/browser/components/tests/browser/whats_new_page/browser_whats_new_page_nimbus.toml b/browser/components/tests/browser/whats_new_page/browser_whats_new_page_nimbus.toml
new file mode 100644
index 0000000000..fafe08af36
--- /dev/null
+++ b/browser/components/tests/browser/whats_new_page/browser_whats_new_page_nimbus.toml
@@ -0,0 +1,6 @@
+[DEFAULT]
+
+["browser_whats_new_page_nimbus.js"]
+# This is a pref set by nimbus to be used for What's new pages
+prefs = ["startup.homepage_override_url_nimbus='https://www.mozilla.org/en-US/projects/firefox/whatsnew/|https://www.mozilla.org/en-US/projects/firefox/whatsnew/'",
+"startup.homepage_override_nimbus_maxVersion='99999999.0'"]
diff --git a/browser/components/translations/content/TranslationsPanelShared.sys.mjs b/browser/components/translations/content/TranslationsPanelShared.sys.mjs
new file mode 100644
index 0000000000..570528df3f
--- /dev/null
+++ b/browser/components/translations/content/TranslationsPanelShared.sys.mjs
@@ -0,0 +1,122 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+const lazy = {};
+
+ChromeUtils.defineESModuleGetters(lazy, {
+ TranslationsParent: "resource://gre/actors/TranslationsParent.sys.mjs",
+});
+
+/**
+ * A class containing static functionality that is shared by both
+ * the FullPageTranslationsPanel and SelectTranslationsPanel classes.
+ */
+export class TranslationsPanelShared {
+ static #langListsInitState = new Map();
+
+ /**
+ * Defines lazy getters for accessing elements in the document based on provided entries.
+ *
+ * @param {Document} document - The document object.
+ * @param {object} lazyElements - An object where lazy getters will be defined.
+ * @param {object} entries - An object of key/value pairs for which to define lazy getters.
+ */
+ static defineLazyElements(document, lazyElements, entries) {
+ for (const [name, discriminator] of Object.entries(entries)) {
+ let element;
+ Object.defineProperty(lazyElements, name, {
+ get: () => {
+ if (!element) {
+ if (discriminator[0] === ".") {
+ // Lookup by class
+ element = document.querySelector(discriminator);
+ } else {
+ // Lookup by id
+ element = document.getElementById(discriminator);
+ }
+ }
+ if (!element) {
+ throw new Error(`Could not find "${name}" at "#${discriminator}".`);
+ }
+ return element;
+ },
+ });
+ }
+ }
+
+ /**
+ * Retrieves the initialization state of language lists for the specified panel.
+ *
+ * @param {FullPageTranslationsPanel | SelectTranslationsPanel} panel
+ * - The panel for which to look up the state.
+ */
+ static getLangListsInitState(panel) {
+ return TranslationsPanelShared.#langListsInitState.get(panel.id);
+ }
+
+ /**
+ * Builds the <menulist> of languages for both the "from" and "to". This can be
+ * called every time the popup is shown, as it will retry when there is an error
+ * (such as a network error) or be a noop if it's already initialized.
+ *
+ * @param {Document} document - The document object.
+ * @param {FullPageTranslationsPanel | SelectTranslationsPanel} panel
+ * - The panel for which to ensure language lists are built.
+ */
+ static async ensureLangListsBuilt(document, panel, innerWindowId) {
+ const { id } = panel;
+ switch (
+ TranslationsPanelShared.#langListsInitState.get(`${id}-${innerWindowId}`)
+ ) {
+ case "initialized":
+ // This has already been initialized.
+ return;
+ case "error":
+ case undefined:
+ // attempt to initialize
+ break;
+ default:
+ throw new Error(
+ `Unknown langList phase ${
+ TranslationsPanelShared.#langListsInitState
+ }`
+ );
+ }
+ /** @type {SupportedLanguages} */
+ const { languagePairs, fromLanguages, toLanguages } =
+ await lazy.TranslationsParent.getSupportedLanguages();
+
+ // Verify that we are in a proper state.
+ if (languagePairs.length === 0) {
+ throw new Error("No translation languages were retrieved.");
+ }
+
+ const fromPopups = panel.querySelectorAll(
+ ".translations-panel-language-menupopup-from"
+ );
+ const toPopups = panel.querySelectorAll(
+ ".translations-panel-language-menupopup-to"
+ );
+
+ for (const popup of fromPopups) {
+ for (const { langTag, displayName } of fromLanguages) {
+ const fromMenuItem = document.createXULElement("menuitem");
+ fromMenuItem.setAttribute("value", langTag);
+ fromMenuItem.setAttribute("label", displayName);
+ popup.appendChild(fromMenuItem);
+ }
+ }
+
+ for (const popup of toPopups) {
+ for (const { langTag, displayName } of toLanguages) {
+ const toMenuItem = document.createXULElement("menuitem");
+ toMenuItem.setAttribute("value", langTag);
+ toMenuItem.setAttribute("label", displayName);
+ popup.appendChild(toMenuItem);
+ }
+ }
+
+ TranslationsPanelShared.#langListsInitState.set(id, "initialized");
+ }
+}
diff --git a/browser/components/translations/content/translationsPanel.inc.xhtml b/browser/components/translations/content/fullPageTranslationsPanel.inc.xhtml
index 18769eec83..bc0c5b319f 100644
--- a/browser/components/translations/content/translationsPanel.inc.xhtml
+++ b/browser/components/translations/content/fullPageTranslationsPanel.inc.xhtml
@@ -3,68 +3,69 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<html:template id="template-translations-panel">
-<panel id="translations-panel"
+<panel id="full-page-translations-panel"
class="panel-no-padding translations-panel"
type="arrow"
role="alertdialog"
noautofocus="true"
- aria-labelledby="translations-panel-header"
+ aria-labelledby="full-page-translations-panel-header"
orient="vertical"
- onclick="TranslationsPanel.handlePanelButtonEvent(event)"
- onpopupshown="TranslationsPanel.handlePanelPopupShownEvent(event)"
- onpopuphidden="TranslationsPanel.handlePanelPopupHiddenEvent(event)">
- <panelmultiview id="translations-panel-multiview"
- mainViewId="translations-panel-view-default">
- <panelview id="translations-panel-view-default"
+ onclick="FullPageTranslationsPanel.handlePanelButtonEvent(event)"
+ onpopupshown="FullPageTranslationsPanel.handlePanelPopupShownEvent(event)"
+ onpopuphidden="FullPageTranslationsPanel.handlePanelPopupHiddenEvent(event)">
+ <panelmultiview id="full-page-translations-panel-multiview"
+ mainViewId="full-page-translations-panel-view-default">
+ <panelview id="full-page-translations-panel-view-default"
class="PanelUI-subView translations-panel-view"
role="document"
mainview-with-header="true"
has-custom-header="true">
<hbox class="panel-header translations-panel-header">
<html:h1 class="translations-panel-header-wrapper">
- <html:span id="translations-panel-header"></html:span>
+ <html:span id="full-page-translations-panel-header"></html:span>
</html:h1>
<hbox class="translations-panel-beta">
<image class="translations-panel-beta-icon"></image>
</hbox>
- <toolbarbutton id="translations-panel-settings" class="panel-info-button"
+ <toolbarbutton id="translations-panel-settings"
+ class="panel-info-button translations-panel-settings-gear-icon"
data-l10n-id="translations-panel-settings-button"
closemenu="none"
- oncommand="TranslationsPanel.openSettingsPopup(this)"/>
+ oncommand="FullPageTranslationsPanel.openSettingsPopup(this)"/>
</hbox>
<vbox class="translations-panel-content">
- <html:div id="translations-panel-intro">
+ <html:div id="full-page-translations-panel-intro">
<html:span data-l10n-id="translations-panel-intro-description"></html:span>
- <html:a id="translations-panel-intro-learn-more-link"
+ <html:a id="full-page-translations-panel-intro-learn-more-link"
is="moz-support-link"
data-l10n-id="translations-panel-learn-more-link"
support-page="website-translation"
- onclick="TranslationsPanel.onLearnMoreLink()" />
+ onclick="FullPageTranslationsPanel.onLearnMoreLink()" />
</html:div>
- <vbox id="translations-panel-lang-selection">
- <label data-l10n-id="translations-panel-from-label" id="translations-panel-from-label"></label>
- <menulist id="translations-panel-from"
+ <vbox id="full-page-translations-panel-lang-selection">
+ <label data-l10n-id="translations-panel-from-label" id="full-page-translations-panel-from-label"></label>
+ <menulist id="full-page-translations-panel-from"
flex="1"
value="detect"
size="large"
aria-labelledby="translations-panel-from-label"
- oncommand="TranslationsPanel.onChangeFromLanguage(event)">
- <menupopup id="translations-panel-from-menupopup"
+ oncommand="FullPageTranslationsPanel.onChangeFromLanguage(event)">
+ <menupopup id="full-page-translations-panel-from-menupopup"
class="translations-panel-language-menupopup-from">
<menuitem data-l10n-id="translations-panel-choose-language" value=""></menuitem>
<!-- The list of <menuitem> will be dynamically inserted. -->
</menupopup>
</menulist>
- <label data-l10n-id="translations-panel-to-label" id="translations-panel-to-label"></label>
- <menulist id="translations-panel-to"
+ <label data-l10n-id="translations-panel-to-label" id="full-page-translations-panel-to-label"></label>
+ <menulist id="full-page-translations-panel-to"
flex="1"
value="detect"
size="large"
aria-labelledby="translations-panel-to-label"
- oncommand="TranslationsPanel.onChangeToLanguage(event)">
- <menupopup id="translations-panel-to-menupopup"
+ oncommand="FullPageTranslationsPanel.onChangeToLanguage(event)">
+ <menupopup id="full-page-translations-panel-to-menupopup"
class="translations-panel-language-menupopup-to">
<menuitem data-l10n-id="translations-panel-choose-language" value=""></menuitem>
<!-- The list of <menuitem> will be dynamically inserted. -->
@@ -72,69 +73,69 @@
</menulist>
</vbox>
- <vbox id="translations-panel-error" hidden="true">
+ <vbox id="full-page-translations-panel-error" hidden="true">
<hbox class="translations-panel-error-header">
<image class="translations-panel-error-icon translations-panel-error-header-icon" />
- <description id="translations-panel-error-message"></description>
+ <description id="full-page-translations-panel-error-message"></description>
</hbox>
- <hbox id="translations-panel-error-message-hint"></hbox>
+ <hbox id="full-page-translations-panel-error-message-hint"></hbox>
<hbox pack="end">
- <button id="translations-panel-translate-hint-action" />
+ <button id="full-page-translations-panel-translate-hint-action" />
</hbox>
</vbox>
</vbox>
<html:moz-button-group class="panel-footer translations-panel-footer">
- <button id="translations-panel-restore-button"
+ <button id="full-page-translations-panel-restore-button"
class="footer-button"
- oncommand="TranslationsPanel.onRestore(event);"
+ oncommand="FullPageTranslationsPanel.onRestore(event);"
data-l10n-id="translations-panel-restore-button">
</button>
- <button id="translations-panel-cancel"
+ <button id="full-page-translations-panel-cancel"
class="footer-button"
- oncommand="TranslationsPanel.onCancel(event);"
+ oncommand="FullPageTranslationsPanel.onCancel(event);"
data-l10n-id="translations-panel-translate-cancel">
</button>
- <button id="translations-panel-translate"
+ <button id="full-page-translations-panel-translate"
class="footer-button"
- oncommand="TranslationsPanel.onTranslate(event);"
+ oncommand="FullPageTranslationsPanel.onTranslate(event);"
data-l10n-id="translations-panel-translate-button"
default="true">
</button>
</html:moz-button-group>
</panelview>
- <panelview id="translations-panel-view-unsupported-language"
+ <panelview id="full-page-translations-panel-view-unsupported-language"
class="PanelUI-subView translations-panel-view"
role="document"
has-custom-header="true">
<hbox class="panel-header translations-panel-header">
<image class="translations-panel-error-icon" />
- <html:h1 id="translations-panel-unsupported-language-header">
+ <html:h1 id="full-page-translations-panel-unsupported-language-header">
<html:span data-l10n-id="translations-panel-error-unsupported"></html:span>
</html:h1>
</hbox>
<vbox class="translations-panel-content">
<html:div>
- <html:span id="translations-panel-error-unsupported-hint"></html:span>
- <html:a id="translations-panel-unsupported-learn-more-link"
+ <html:span id="full-page-translations-panel-error-unsupported-hint"></html:span>
+ <html:a id="full-page-translations-panel-unsupported-learn-more-link"
is="moz-support-link"
data-l10n-id="translations-panel-learn-more-link"
support-page="website-translation"
- onclick="TranslationsPanel.onLearnMoreLink()" />
+ onclick="FullPageTranslationsPanel.onLearnMoreLink()" />
</html:div>
</vbox>
<html:moz-button-group class="panel-footer translations-panel-footer">
- <button id="translations-panel-change-source-language"
+ <button id="full-page-translations-panel-change-source-language"
class="footer-button"
- oncommand="TranslationsPanel.onChangeSourceLanguage(event);"
+ oncommand="FullPageTranslationsPanel.onChangeSourceLanguage(event);"
data-l10n-id="translations-panel-error-change-button">
</button>
- <button id="translations-panel-dismiss-error"
+ <button id="full-page-translations-panel-dismiss-error"
class="footer-button"
- oncommand="TranslationsPanel.onCancel(event);"
+ oncommand="FullPageTranslationsPanel.onCancel(event);"
data-l10n-id="translations-panel-error-dismiss-button"
default="true">
</button>
diff --git a/browser/components/translations/content/translationsPanel.js b/browser/components/translations/content/fullPageTranslationsPanel.js
index 71aaacac4f..2e35440160 100644
--- a/browser/components/translations/content/translationsPanel.js
+++ b/browser/components/translations/content/fullPageTranslationsPanel.js
@@ -14,6 +14,8 @@ ChromeUtils.defineESModuleGetters(this, {
PageActions: "resource:///modules/PageActions.sys.mjs",
TranslationsTelemetry:
"chrome://browser/content/translations/TranslationsTelemetry.sys.mjs",
+ TranslationsPanelShared:
+ "chrome://browser/content/translations/TranslationsPanelShared.sys.mjs",
});
/**
@@ -193,7 +195,7 @@ class CheckboxPageAction {
* (the Translations actor). This class reacts to state changes coming from the
* Translations actor.
*/
-var TranslationsPanel = new (class {
+var FullPageTranslationsPanel = new (class {
/** @type {Console?} */
#console;
@@ -272,77 +274,38 @@ var TranslationsPanel = new (class {
// The rest of the elements are set by the getter below.
};
- /**
- * Define a getter on #lazyElements that gets the element by an id
- * or class name.
- */
- const getter = (name, discriminator) => {
- let element;
- Object.defineProperty(this.#lazyElements, name, {
- get: () => {
- if (!element) {
- if (discriminator[0] === ".") {
- // Lookup by class
- element = document.querySelector(discriminator);
- } else {
- // Lookup by id
- element = document.getElementById(discriminator);
- }
- }
- if (!element) {
- throw new Error(
- `Could not find "${name}" at "#${discriminator}".`
- );
- }
- return element;
- },
- });
- };
-
- // Getters by id
- getter("appMenuButton", "PanelUI-menu-button");
- getter("cancelButton", "translations-panel-cancel");
- getter(
- "changeSourceLanguageButton",
- "translations-panel-change-source-language"
- );
- getter("dismissErrorButton", "translations-panel-dismiss-error");
- getter("error", "translations-panel-error");
- getter("errorMessage", "translations-panel-error-message");
- getter("errorMessageHint", "translations-panel-error-message-hint");
- getter("errorHintAction", "translations-panel-translate-hint-action");
- getter("fromMenuList", "translations-panel-from");
- getter("fromLabel", "translations-panel-from-label");
- getter("header", "translations-panel-header");
- getter("intro", "translations-panel-intro");
- getter("introLearnMoreLink", "translations-panel-intro-learn-more-link");
- getter("langSelection", "translations-panel-lang-selection");
- getter("multiview", "translations-panel-multiview");
- getter("restoreButton", "translations-panel-restore-button");
- getter("toLabel", "translations-panel-to-label");
- getter("toMenuList", "translations-panel-to");
- getter("translateButton", "translations-panel-translate");
- getter(
- "unsupportedHeader",
- "translations-panel-unsupported-language-header"
- );
- getter("unsupportedHint", "translations-panel-error-unsupported-hint");
- getter(
- "unsupportedLearnMoreLink",
- "translations-panel-unsupported-learn-more-link"
- );
-
- // Getters by class
- getter(
- "alwaysTranslateLanguageMenuItem",
- ".always-translate-language-menuitem"
- );
- getter("manageLanguagesMenuItem", ".manage-languages-menuitem");
- getter(
- "neverTranslateLanguageMenuItem",
- ".never-translate-language-menuitem"
- );
- getter("neverTranslateSiteMenuItem", ".never-translate-site-menuitem");
+ TranslationsPanelShared.defineLazyElements(document, this.#lazyElements, {
+ alwaysTranslateLanguageMenuItem: ".always-translate-language-menuitem",
+ appMenuButton: "PanelUI-menu-button",
+ cancelButton: "full-page-translations-panel-cancel",
+ changeSourceLanguageButton:
+ "full-page-translations-panel-change-source-language",
+ dismissErrorButton: "full-page-translations-panel-dismiss-error",
+ error: "full-page-translations-panel-error",
+ errorMessage: "full-page-translations-panel-error-message",
+ errorMessageHint: "full-page-translations-panel-error-message-hint",
+ errorHintAction: "full-page-translations-panel-translate-hint-action",
+ fromMenuList: "full-page-translations-panel-from",
+ fromLabel: "full-page-translations-panel-from-label",
+ header: "full-page-translations-panel-header",
+ intro: "full-page-translations-panel-intro",
+ introLearnMoreLink:
+ "full-page-translations-panel-intro-learn-more-link",
+ langSelection: "full-page-translations-panel-lang-selection",
+ manageLanguagesMenuItem: ".manage-languages-menuitem",
+ multiview: "full-page-translations-panel-multiview",
+ neverTranslateLanguageMenuItem: ".never-translate-language-menuitem",
+ neverTranslateSiteMenuItem: ".never-translate-site-menuitem",
+ restoreButton: "full-page-translations-panel-restore-button",
+ toLabel: "full-page-translations-panel-to-label",
+ toMenuList: "full-page-translations-panel-to",
+ translateButton: "full-page-translations-panel-translate",
+ unsupportedHeader:
+ "full-page-translations-panel-unsupported-language-header",
+ unsupportedHint: "full-page-translations-panel-error-unsupported-hint",
+ unsupportedLearnMoreLink:
+ "full-page-translations-panel-unsupported-learn-more-link",
+ });
}
return this.#lazyElements;
@@ -452,74 +415,19 @@ var TranslationsPanel = new (class {
}
/**
- * @type {"initialized" | "error" | "uninitialized"}
- */
- #langListsPhase = "uninitialized";
-
- /**
* Builds the <menulist> of languages for both the "from" and "to". This can be
* called every time the popup is shown, as it will retry when there is an error
* (such as a network error) or be a noop if it's already initialized.
- *
- * TODO(Bug 1813796) This needs to be updated when the supported languages change
- * via RemoteSettings.
*/
async #ensureLangListsBuilt() {
- switch (this.#langListsPhase) {
- case "initialized":
- // This has already been initialized.
- return;
- case "error":
- // Attempt to re-initialize.
- this.#langListsPhase = "uninitialized";
- break;
- case "uninitialized":
- // Ready to initialize.
- break;
- default:
- this.console?.error("Unknown langList phase", this.#langListsPhase);
- }
-
try {
- /** @type {SupportedLanguages} */
- const { languagePairs, fromLanguages, toLanguages } =
- await TranslationsParent.getSupportedLanguages();
-
- // Verify that we are in a proper state.
- if (languagePairs.length === 0) {
- throw new Error("No translation languages were retrieved.");
- }
-
- const { panel } = this.elements;
- const fromPopups = panel.querySelectorAll(
- ".translations-panel-language-menupopup-from"
- );
- const toPopups = panel.querySelectorAll(
- ".translations-panel-language-menupopup-to"
+ await TranslationsPanelShared.ensureLangListsBuilt(
+ document,
+ this.elements.panel,
+ gBrowser.selectedBrowser.innerWindowID
);
-
- for (const popup of fromPopups) {
- for (const { langTag, displayName } of fromLanguages) {
- const fromMenuItem = document.createXULElement("menuitem");
- fromMenuItem.setAttribute("value", langTag);
- fromMenuItem.setAttribute("label", displayName);
- popup.appendChild(fromMenuItem);
- }
- }
-
- for (const popup of toPopups) {
- for (const { langTag, displayName } of toLanguages) {
- const toMenuItem = document.createXULElement("menuitem");
- toMenuItem.setAttribute("value", langTag);
- toMenuItem.setAttribute("label", displayName);
- popup.appendChild(toMenuItem);
- }
- }
-
- this.#langListsPhase = "initialized";
} catch (error) {
this.console?.error(error);
- this.#langListsPhase = "error";
}
}
@@ -616,7 +524,8 @@ var TranslationsPanel = new (class {
}
const { multiview } = this.elements;
return (
- multiview.getAttribute("mainViewId") === "translations-panel-view-default"
+ multiview.getAttribute("mainViewId") ===
+ "full-page-translations-panel-view-default"
);
}
@@ -644,7 +553,7 @@ var TranslationsPanel = new (class {
// Unconditionally hide the intro text in case the panel is re-shown.
intro.hidden = true;
- if (this.#langListsPhase === "error") {
+ if (TranslationsPanelShared.getLangListsInitState(panel) === "error") {
// There was an error, display it in the view rather than the language
// dropdowns.
const { cancelButton, errorHintAction } = this.elements;
@@ -686,7 +595,10 @@ var TranslationsPanel = new (class {
this.updateUIForReTranslation(false /* isReTranslation */);
cancelButton.hidden = false;
- multiview.setAttribute("mainViewId", "translations-panel-view-default");
+ multiview.setAttribute(
+ "mainViewId",
+ "full-page-translations-panel-view-default"
+ );
if (!this._hasShownPanel) {
actor.firstShowUriSpec = gBrowser.currentURI.spec;
@@ -709,7 +621,7 @@ var TranslationsPanel = new (class {
const { unsupportedHint } = this.elements;
multiview.setAttribute(
"mainViewId",
- "translations-panel-view-unsupported-language"
+ "full-page-translations-panel-view-unsupported-language"
);
let language;
if (langTags?.docLangTag) {
@@ -952,7 +864,7 @@ var TranslationsPanel = new (class {
*/
onLearnMoreLink() {
TranslationsParent.telemetry().panel().onLearnMoreLink();
- TranslationsPanel.close();
+ FullPageTranslationsPanel.close();
}
/*
@@ -1166,7 +1078,7 @@ var TranslationsPanel = new (class {
#openPromise = null;
/**
- * Opens the TranslationsPanel.
+ * Opens the FullPageTranslationsPanel.
*
* @param {Event} event
* @param {boolean} reportAsAutoShow
@@ -1185,7 +1097,7 @@ var TranslationsPanel = new (class {
}
/**
- * Implementation function for opening the panel. Prefer TranslationsPanel.open.
+ * Implementation function for opening the panel. Prefer FullPageTranslationsPanel.open.
*
* @param {Event} event
*/
@@ -1441,7 +1353,7 @@ var TranslationsPanel = new (class {
}
/**
- * An event handler that allows the TranslationsPanel object
+ * An event handler that allows the FullPageTranslationsPanel object
* to be compatible with the addTabsProgressListener function.
*
* @param {tabbrowser} browser
@@ -1513,7 +1425,7 @@ var TranslationsPanel = new (class {
if (detectedLanguages) {
// Ensure the cached detected languages are up to date, for instance whenever
// the user switches tabs.
- TranslationsPanel.detectedLanguages = detectedLanguages;
+ FullPageTranslationsPanel.detectedLanguages = detectedLanguages;
}
if (this.#isPopupOpen) {
@@ -1623,7 +1535,7 @@ var TranslationsPanel = new (class {
})();
XPCOMUtils.defineLazyPreferenceGetter(
- TranslationsPanel,
+ FullPageTranslationsPanel,
"_hasShownPanel",
"browser.translations.panelShown",
false
diff --git a/browser/components/translations/content/selectTranslationsPanel.inc.xhtml b/browser/components/translations/content/selectTranslationsPanel.inc.xhtml
new file mode 100644
index 0000000000..72e2bd7095
--- /dev/null
+++ b/browser/components/translations/content/selectTranslationsPanel.inc.xhtml
@@ -0,0 +1,102 @@
+<!-- This Source Code Form is subject to the terms of the Mozilla Public
+ - License, v. 2.0. If a copy of the MPL was not distributed with this
+ - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
+
+<html:template id="template-select-translations-panel">
+ <panel id="select-translations-panel"
+ class="panel-no-padding translations-panel"
+ type="arrow"
+ role="alertdialog"
+ noautofocus="true"
+ aria-labelledby="translations-panel-header"
+ orient="vertical">
+ <panelmultiview id="select-translations-panel-multiview" mainViewId="select-translations-panel-view-default">
+ <panelview id="select-translations-panel-view-default"
+ class="PanelUI-subView translations-panel-view"
+ role="document"
+ mainview-with-header="true"
+ has-custom-header="true">
+ <hbox class="panel-header select-translations-panel-header">
+ <html:h1 class="translations-panel-header-wrapper">
+ <html:span id="select-translations-panel-header" data-l10n-id="select-translations-panel-header">
+ </html:span>
+ </html:h1>
+ <hbox class="translations-panel-beta">
+ <image id="select-translations-panel-beta-icon"
+ class="translations-panel-beta-icon">
+ </image>
+ </hbox>
+ <toolbarbutton id="select-translations-panel-settings"
+ class="panel-info-button translations-panel-settings-gear-icon"
+ data-l10n-id="translations-panel-settings-button"
+ closemenu="none" />
+ </hbox>
+ <vbox class="select-translations-panel-content">
+ <hbox id="select-translations-panel-lang-selection">
+ <vbox flex="1">
+ <label id="select-translations-panel-from-label"
+ class="select-translations-panel-label"
+ data-l10n-id="select-translations-panel-from-label">
+ </label>
+ <menulist id="select-translations-panel-from"
+ flex="1"
+ value="detect"
+ size="large"
+ data-l10n-id="translations-panel-choose-language"
+ aria-labelledby="translations-panel-from-label">
+ <menupopup id="select-translations-panel-from-menupopup"
+ class="translations-panel-language-menupopup-from">
+ <!-- The list of <menuitem> will be dynamically inserted. -->
+ </menupopup>
+ </menulist>
+ </vbox>
+ <vbox flex="1">
+ <label id="select-translations-panel-to-label"
+ class="select-translations-panel-label"
+ data-l10n-id="select-translations-panel-to-label">
+ </label>
+ <menulist id="select-translations-panel-to"
+ flex="1"
+ value="detect"
+ size="large"
+ data-l10n-id="translations-panel-choose-language"
+ aria-labelledby="translations-panel-to-label">
+ <menupopup id="select-translations-panel-to-menupopup"
+ class="translations-panel-language-menupopup-to">
+ <!-- The list of <menuitem> will be dynamically inserted. -->
+ </menupopup>
+ </menulist>
+ </vbox>
+ </hbox>
+ </vbox>
+ <vbox class="select-translations-panel-content">
+ <html:textarea id="select-translations-panel-translation-area"
+ data-l10n-id="select-translations-panel-placeholder-text"
+ readonly="true"
+ tabindex="0">
+ </html:textarea>
+ </vbox>
+
+ <hbox class="select-translations-panel-content">
+ <button id="select-translations-panel-copy-button"
+ class="footer-button select-translations-panel-button select-translations-panel-copy-button"
+ data-l10n-id="select-translations-panel-copy-button">
+ </button>
+ </hbox>
+
+ <html:moz-button-group class="panel-footer translations-panel-footer">
+ <button id="select-translations-panel-translate-full-page-button"
+ class="footer-button select-translations-panel-button"
+ data-l10n-id="select-translations-panel-translate-full-page-button">
+ </button>
+ <button id="select-translations-panel-done-button"
+ class="footer-button select-translations-panel-button"
+ data-l10n-id="select-translations-panel-done-button"
+ default="true"
+ oncommand = "SelectTranslationsPanel.close()">
+ </button>
+ </html:moz-button-group>
+ </panelview>
+ </panelmultiview>
+ </panel>
+</html:template>
diff --git a/browser/components/translations/content/selectTranslationsPanel.js b/browser/components/translations/content/selectTranslationsPanel.js
new file mode 100644
index 0000000000..b4fe3e9735
--- /dev/null
+++ b/browser/components/translations/content/selectTranslationsPanel.js
@@ -0,0 +1,220 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/* eslint-env mozilla/browser-window */
+
+ChromeUtils.defineESModuleGetters(this, {
+ LanguageDetector:
+ "resource://gre/modules/translation/LanguageDetector.sys.mjs",
+ TranslationsPanelShared:
+ "chrome://browser/content/translations/TranslationsPanelShared.sys.mjs",
+});
+
+/**
+ * This singleton class controls the Translations popup panel.
+ */
+var SelectTranslationsPanel = new (class {
+ /** @type {Console?} */
+ #console;
+
+ /**
+ * Lazily get a console instance. Note that this script is loaded in very early to
+ * the browser loading process, and may run before the console is available. In
+ * this case the console will return as `undefined`.
+ *
+ * @returns {Console | void}
+ */
+ get console() {
+ if (!this.#console) {
+ try {
+ this.#console = console.createInstance({
+ maxLogLevelPref: "browser.translations.logLevel",
+ prefix: "Translations",
+ });
+ } catch {
+ // The console may not be initialized yet.
+ }
+ }
+ return this.#console;
+ }
+
+ /**
+ * Where the lazy elements are stored.
+ *
+ * @type {Record<string, Element>?}
+ */
+ #lazyElements;
+
+ /**
+ * Lazily creates the dom elements, and lazily selects them.
+ *
+ * @returns {Record<string, Element>}
+ */
+ get elements() {
+ if (!this.#lazyElements) {
+ // Lazily turn the template into a DOM element.
+ /** @type {HTMLTemplateElement} */
+ const wrapper = document.getElementById(
+ "template-select-translations-panel"
+ );
+
+ const panel = wrapper.content.firstElementChild;
+ const settingsButton = document.getElementById(
+ "translations-panel-settings"
+ );
+ wrapper.replaceWith(wrapper.content);
+
+ // Lazily select the elements.
+ this.#lazyElements = {
+ panel,
+ settingsButton,
+ };
+
+ TranslationsPanelShared.defineLazyElements(document, this.#lazyElements, {
+ betaIcon: "select-translations-panel-beta-icon",
+ copyButton: "select-translations-panel-copy-button",
+ doneButton: "select-translations-panel-done-button",
+ fromLabel: "select-translations-panel-from-label",
+ fromMenuList: "select-translations-panel-from",
+ header: "select-translations-panel-header",
+ multiview: "select-translations-panel-multiview",
+ textArea: "select-translations-panel-translation-area",
+ toLabel: "select-translations-panel-to-label",
+ toMenuList: "select-translations-panel-to",
+ translateFullPageButton:
+ "select-translations-panel-translate-full-page-button",
+ });
+ }
+
+ return this.#lazyElements;
+ }
+
+ /**
+ * Detects the language of the provided text and retrieves a language pair for translation
+ * based on user settings.
+ *
+ * @param {string} textToTranslate - The text for which the language detection and target language retrieval are performed.
+ * @returns {Promise<{fromLang?: string, toLang?: string}>} - An object containing the language pair for the translation.
+ * The `fromLang` property is omitted if it is a language that is not currently supported by Firefox Translations.
+ * The `toLang` property is omitted if it is the same as `fromLang`.
+ */
+ async getLangPairPromise(textToTranslate) {
+ const [fromLang, toLang] = await Promise.all([
+ LanguageDetector.detectLanguage(textToTranslate).then(
+ ({ language }) => language
+ ),
+ TranslationsParent.getTopPreferredSupportedToLang(),
+ ]);
+
+ return {
+ fromLang,
+ // If the fromLang and toLang are the same, discard the toLang.
+ toLang: fromLang === toLang ? undefined : toLang,
+ };
+ }
+
+ /**
+ * Close the Select Translations Panel.
+ */
+ close() {
+ PanelMultiView.hidePopup(this.elements.panel);
+ }
+
+ /**
+ * Builds the <menulist> of languages for both the "from" and "to". This can be
+ * called every time the popup is shown, as it will retry when there is an error
+ * (such as a network error) or be a noop if it's already initialized.
+ */
+ async #ensureLangListsBuilt() {
+ try {
+ await TranslationsPanelShared.ensureLangListsBuilt(
+ document,
+ this.elements.panel
+ );
+ } catch (error) {
+ this.console?.error(error);
+ }
+ }
+
+ /**
+ * Updates the language dropdown based on the provided language tag.
+ *
+ * @param {string} langTag - A BCP-47 language tag.
+ * @param {Element} menuList - The dropdown menu element that will be updated based on language support.
+ * @returns {Promise<void>}
+ */
+ async #updateLanguageDropdown(langTag, menuList) {
+ const langTagIsSupported =
+ menuList.id === this.elements.fromMenuList.id
+ ? await TranslationsParent.isSupportedAsFromLang(langTag)
+ : await TranslationsParent.isSupportedAsToLang(langTag);
+
+ if (langTagIsSupported) {
+ // Remove the data-l10n-id because the menulist label will
+ // be populated from the supported language's display name.
+ menuList.value = langTag;
+ menuList.removeAttribute("data-l10n-id");
+ } else {
+ // Set the data-l10n-id placeholder because no valid
+ // language will be selected when the panel opens.
+ menuList.value = undefined;
+ document.l10n.setAttributes(
+ menuList,
+ "translations-panel-choose-language"
+ );
+ await document.l10n.translateElements([menuList]);
+ }
+ }
+
+ /**
+ * Updates the language selection dropdowns based on the given langPairPromise.
+ *
+ * @param {Promise<{fromLang?: string, toLang?: string}>} langPairPromise
+ * @returns {Promise<void>}
+ */
+ async #updateLanguageDropdowns(langPairPromise) {
+ const { fromLang, toLang } = await langPairPromise;
+
+ this.console?.debug(`fromLang(${fromLang})`);
+ this.console?.debug(`toLang(${toLang})`);
+
+ const { fromMenuList, toMenuList } = this.elements;
+
+ await Promise.all([
+ this.#updateLanguageDropdown(fromLang, fromMenuList),
+ this.#updateLanguageDropdown(toLang, toMenuList),
+ ]);
+ }
+
+ /**
+ * Opens the panel and populates the currently selected fromLang and toLang based
+ * on the result of the langPairPromise.
+ *
+ * @param {Event} event - The triggering event for opening the panel.
+ * @param {Promise} langPairPromise - Promise resolving to language pair data for initializing dropdowns.
+ * @returns {Promise<void>}
+ */
+ async open(event, langPairPromise) {
+ this.console?.log("Showing a translation panel.");
+
+ await this.#ensureLangListsBuilt();
+ await this.#updateLanguageDropdowns(langPairPromise);
+
+ // TODO(Bug 1878721) Rework the logic of where to open the panel.
+ //
+ // For the moment, the Select Translations panel opens at the
+ // AppMenu Button, but it will eventually need to open near
+ // to the selected content.
+ const appMenuButton = document.getElementById("PanelUI-menu-button");
+ const { panel, textArea } = this.elements;
+
+ panel.addEventListener("popupshown", () => textArea.focus(), {
+ once: true,
+ });
+ await PanelMultiView.openPopup(panel, appMenuButton, {
+ position: "bottomright topright",
+ triggerEvent: event,
+ }).catch(error => this.console?.error(error));
+ }
+})();
diff --git a/browser/components/translations/jar.mn b/browser/components/translations/jar.mn
index 5f30e6f73f..fe552d2c9a 100644
--- a/browser/components/translations/jar.mn
+++ b/browser/components/translations/jar.mn
@@ -3,4 +3,6 @@
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
browser.jar:
- content/browser/translations/translationsPanel.js (content/translationsPanel.js)
+ content/browser/translations/selectTranslationsPanel.js (content/selectTranslationsPanel.js)
+ content/browser/translations/fullPageTranslationsPanel.js (content/fullPageTranslationsPanel.js)
+ content/browser/translations/TranslationsPanelShared.sys.mjs (content/TranslationsPanelShared.sys.mjs)
diff --git a/browser/components/translations/tests/browser/browser.toml b/browser/components/translations/tests/browser/browser.toml
index bc617bf2fd..a9d36363da 100644
--- a/browser/components/translations/tests/browser/browser.toml
+++ b/browser/components/translations/tests/browser/browser.toml
@@ -15,96 +15,100 @@ support-files = [
["browser_translations_about_preferences_settings_ui.js"]
-["browser_translations_panel_a11y_focus.js"]
+["browser_translations_full_page_panel_a11y_focus.js"]
-["browser_translations_panel_always_translate_language_bad_data.js"]
+["browser_translations_full_page_panel_always_translate_language_bad_data.js"]
-["browser_translations_panel_always_translate_language_basic.js"]
+["browser_translations_full_page_panel_always_translate_language_basic.js"]
-["browser_translations_panel_always_translate_language_manual.js"]
+["browser_translations_full_page_panel_always_translate_language_manual.js"]
-["browser_translations_panel_always_translate_language_restore.js"]
+["browser_translations_full_page_panel_always_translate_language_restore.js"]
-["browser_translations_panel_app_menu_never_translate_language.js"]
+["browser_translations_full_page_panel_app_menu_never_translate_language.js"]
-["browser_translations_panel_app_menu_never_translate_site.js"]
+["browser_translations_full_page_panel_app_menu_never_translate_site.js"]
-["browser_translations_panel_auto_translate_error_view.js"]
+["browser_translations_full_page_panel_auto_translate_error_view.js"]
-["browser_translations_panel_auto_translate_revisit_view.js"]
+["browser_translations_full_page_panel_auto_translate_revisit_view.js"]
-["browser_translations_panel_basics.js"]
+["browser_translations_full_page_panel_basics.js"]
-["browser_translations_panel_button.js"]
+["browser_translations_full_page_panel_button.js"]
-["browser_translations_panel_cancel.js"]
+["browser_translations_full_page_panel_cancel.js"]
-["browser_translations_panel_close_panel_never_translate_language_with_translations_active.js"]
+["browser_translations_full_page_panel_close_panel_never_translate_language_with_translations_active.js"]
-["browser_translations_panel_close_panel_never_translate_language_with_translations_inactive.js"]
+["browser_translations_full_page_panel_close_panel_never_translate_language_with_translations_inactive.js"]
-["browser_translations_panel_close_panel_never_translate_site.js"]
+["browser_translations_full_page_panel_close_panel_never_translate_site.js"]
-["browser_translations_panel_engine_destroy.js"]
+["browser_translations_full_page_panel_engine_destroy.js"]
-["browser_translations_panel_engine_destroy_pending.js"]
+["browser_translations_full_page_panel_engine_destroy_pending.js"]
-["browser_translations_panel_engine_unsupported.js"]
+["browser_translations_full_page_panel_engine_unsupported.js"]
-["browser_translations_panel_engine_unsupported_lang.js"]
+["browser_translations_full_page_panel_engine_unsupported_lang.js"]
-["browser_translations_panel_firstrun.js"]
+["browser_translations_full_page_panel_firstrun.js"]
-["browser_translations_panel_firstrun_revisit.js"]
+["browser_translations_full_page_panel_firstrun_revisit.js"]
-["browser_translations_panel_fuzzing.js"]
+["browser_translations_full_page_panel_fuzzing.js"]
skip-if = ["true"]
-["browser_translations_panel_gear.js"]
+["browser_translations_full_page_panel_gear.js"]
-["browser_translations_panel_never_translate_language.js"]
+["browser_translations_full_page_panel_never_translate_language.js"]
-["browser_translations_panel_never_translate_site_auto.js"]
+["browser_translations_full_page_panel_never_translate_site_auto.js"]
-["browser_translations_panel_never_translate_site_basic.js"]
+["browser_translations_full_page_panel_never_translate_site_basic.js"]
-["browser_translations_panel_never_translate_site_manual.js"]
+["browser_translations_full_page_panel_never_translate_site_manual.js"]
-["browser_translations_panel_retry.js"]
+["browser_translations_full_page_panel_retry.js"]
skip-if = ["os == 'linux' && !debug"] # Bug 1863227
-["browser_translations_panel_settings_unsupported_lang.js"]
+["browser_translations_full_page_panel_settings_unsupported_lang.js"]
-["browser_translations_panel_switch_languages.js"]
+["browser_translations_full_page_panel_switch_languages.js"]
-["browser_translations_reader_mode.js"]
+["browser_translations_full_page_reader_mode.js"]
-["browser_translations_select_context_menu_feature_disabled.js"]
+["browser_translations_full_page_telemetry_firstrun_auto_translate.js"]
-["browser_translations_select_context_menu_with_full_page_translations_active.js"]
+["browser_translations_full_page_telemetry_firstrun_basics.js"]
-["browser_translations_select_context_menu_with_hyperlink.js"]
+["browser_translations_full_page_telemetry_firstrun_translation_failure.js"]
-["browser_translations_select_context_menu_with_no_text_selected.js"]
+["browser_translations_full_page_telemetry_firstrun_unsupported_lang.js"]
-["browser_translations_select_context_menu_with_text_selected.js"]
+["browser_translations_full_page_telemetry_open_panel.js"]
+
+["browser_translations_full_page_telemetry_panel_auto_offer.js"]
-["browser_translations_telemetry_firstrun_auto_translate.js"]
+["browser_translations_full_page_telemetry_panel_auto_offer_settings.js"]
-["browser_translations_telemetry_firstrun_basics.js"]
+["browser_translations_full_page_telemetry_switch_languages.js"]
-["browser_translations_telemetry_firstrun_translation_failure.js"]
+["browser_translations_full_page_telemetry_translation_failure.js"]
-["browser_translations_telemetry_firstrun_unsupported_lang.js"]
+["browser_translations_full_page_telemetry_translation_request.js"]
-["browser_translations_telemetry_open_panel.js"]
+["browser_translations_select_context_menu_feature_disabled.js"]
+
+["browser_translations_select_context_menu_with_full_page_translations_active.js"]
-["browser_translations_telemetry_panel_auto_offer.js"]
+["browser_translations_select_context_menu_with_hyperlink.js"]
-["browser_translations_telemetry_panel_auto_offer_settings.js"]
+["browser_translations_select_context_menu_with_no_text_selected.js"]
-["browser_translations_telemetry_switch_languages.js"]
+["browser_translations_select_context_menu_with_text_selected.js"]
-["browser_translations_telemetry_translation_failure.js"]
+["browser_translations_select_panel_language_selectors.js"]
-["browser_translations_telemetry_translation_request.js"]
+["browser_translations_select_panel_mainview_ui.js"]
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_a11y_focus.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_a11y_focus.js
index e2e8663f6d..433861c05a 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_a11y_focus.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_a11y_focus.js
@@ -17,7 +17,7 @@ add_task(async function test_translations_panel_a11y_focus() {
"The button is available."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openWithKeyboard: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_bad_data.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_bad_data.js
index ac026fb78f..144488ac7b 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_bad_data.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_bad_data.js
@@ -13,7 +13,7 @@ add_task(async function test_always_translate_with_bad_data() {
prefs: [["browser.translations.alwaysTranslateLanguages", "en,fr"]],
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
openFromAppMenu: true,
});
@@ -23,8 +23,7 @@ add_task(async function test_always_translate_with_bad_data() {
checked: false,
disabled: true,
});
- await closeSettingsMenuIfOpen();
- await closeTranslationsPanelIfOpen();
+ await closeAllOpenPanelsAndMenus();
info("Checking that the page is untranslated");
await runInPage(async TranslationsTest => {
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_basic.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_basic.js
index 2644d78f33..bd9a8a7756 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_basic.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_basic.js
@@ -21,7 +21,7 @@ add_task(async function test_toggle_always_translate_language_menuitem() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -55,7 +55,7 @@ add_task(async function test_toggle_always_translate_language_menuitem() {
"The page should be automatically translated."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_manual.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_manual.js
index 8456b4cc08..d47732aa5c 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_manual.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_manual.js
@@ -22,7 +22,7 @@ add_task(
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -36,7 +36,7 @@ add_task(
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -55,7 +55,7 @@ add_task(
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_restore.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_restore.js
index 6cf89d2a03..cd3fe76c58 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_always_translate_language_restore.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_always_translate_language_restore.js
@@ -22,7 +22,7 @@ add_task(
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -56,7 +56,7 @@ add_task(
"The page should be automatically translated."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
@@ -69,7 +69,7 @@ add_task(
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_app_menu_never_translate_language.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_app_menu_never_translate_language.js
index ee2905ab99..14eb88f71f 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_app_menu_never_translate_language.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_app_menu_never_translate_language.js
@@ -22,7 +22,7 @@ add_task(async function test_uncheck_never_translate_language_shows_button() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_app_menu_never_translate_site.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_app_menu_never_translate_site.js
index 50fff4dff8..3670bb7ba1 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_app_menu_never_translate_site.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_app_menu_never_translate_site.js
@@ -21,7 +21,7 @@ add_task(async function test_uncheck_never_translate_site_shows_button() {
"The translations button is visible."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -36,7 +36,7 @@ add_task(async function test_uncheck_never_translate_site_shows_button() {
{ checked: true }
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -80,7 +80,7 @@ add_task(
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -105,7 +105,7 @@ add_task(
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_auto_translate_error_view.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_auto_translate_error_view.js
index e71ee1392b..9470133dd0 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_auto_translate_error_view.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_auto_translate_error_view.js
@@ -34,7 +34,7 @@ add_task(
"The translations button is visible."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -64,14 +64,14 @@ add_task(
"The translations button should be unavailable."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel:
FullPageTranslationsTestUtils.assertPanelViewUnsupportedLanguage,
});
info("Destroy the engine process so that an error will happen.");
- await TranslationsParent.destroyEngineProcess();
+ await EngineProcess.destroyTranslationsEngine();
await navigate("Navigate back to a Spanish page.", {
url: SPANISH_PAGE_URL_DOT_ORG,
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_auto_translate_revisit_view.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_auto_translate_revisit_view.js
index dd4ffcecfd..f898300038 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_auto_translate_revisit_view.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_auto_translate_revisit_view.js
@@ -29,7 +29,7 @@ add_task(
"The translations button is visible."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -59,7 +59,7 @@ add_task(
"The translations button should be unavailable."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel:
FullPageTranslationsTestUtils.assertPanelViewUnsupportedLanguage,
@@ -76,7 +76,7 @@ add_task(
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_basics.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_basics.js
index ef2e2c4708..30880553f0 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_basics.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_basics.js
@@ -22,11 +22,11 @@ add_task(async function test_translations_panel_basics() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
- const panel = document.getElementById("translations-panel");
+ const panel = document.getElementById("full-page-translations-panel");
const label = document.getElementById(panel.getAttribute("aria-labelledby"));
ok(label, "The a11y label for the panel can be found.");
assertVisibility({ visible: { label } });
@@ -38,7 +38,7 @@ add_task(async function test_translations_panel_basics() {
"The icon presents the loading indicator."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewLoading,
});
@@ -52,7 +52,7 @@ add_task(async function test_translations_panel_basics() {
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_button.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_button.js
index 209cfc18a6..209cfc18a6 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_button.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_button.js
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_cancel.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_cancel.js
index 17e680dd87..9a0a3ebccb 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_cancel.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_cancel.js
@@ -17,7 +17,7 @@ add_task(async function test_translations_panel_cancel() {
"The button is available."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_close_panel_never_translate_language_with_translations_active.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_close_panel_never_translate_language_with_translations_active.js
index 0fbffd891a..e76c771ed9 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_close_panel_never_translate_language_with_translations_active.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_close_panel_never_translate_language_with_translations_active.js
@@ -17,7 +17,7 @@ add_task(
"The translations button is available"
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -39,7 +39,7 @@ add_task(
"The page should be automatically translated."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -49,7 +49,7 @@ add_task(
await FullPageTranslationsTestUtils.assertIsNeverTranslateLanguage("es", {
checked: false,
});
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popuphidden",
async () => {
await FullPageTranslationsTestUtils.clickNeverTranslateLanguage();
@@ -79,7 +79,7 @@ add_task(
"The translations button is available"
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -101,7 +101,7 @@ add_task(
"The page should be automatically translated."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -119,7 +119,7 @@ add_task(
);
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -136,7 +136,7 @@ add_task(
await FullPageTranslationsTestUtils.assertIsNeverTranslateLanguage("es", {
checked: false,
});
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popuphidden",
async () => {
await FullPageTranslationsTestUtils.clickNeverTranslateLanguage();
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_close_panel_never_translate_language_with_translations_inactive.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_close_panel_never_translate_language_with_translations_inactive.js
index 5df2468646..95ff86ba7f 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_close_panel_never_translate_language_with_translations_inactive.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_close_panel_never_translate_language_with_translations_inactive.js
@@ -16,7 +16,7 @@ add_task(async function test_panel_closes_on_toggle_never_translate_language() {
"The translations button is available"
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -26,7 +26,7 @@ add_task(async function test_panel_closes_on_toggle_never_translate_language() {
await FullPageTranslationsTestUtils.assertIsNeverTranslateLanguage("es", {
checked: false,
});
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popuphidden",
async () => {
await FullPageTranslationsTestUtils.clickNeverTranslateLanguage();
@@ -52,7 +52,7 @@ add_task(
"The translations button is available"
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -69,7 +69,7 @@ add_task(
{ checked: true }
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -82,7 +82,7 @@ add_task(
await FullPageTranslationsTestUtils.assertIsNeverTranslateLanguage("es", {
checked: false,
});
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popuphidden",
async () => {
await FullPageTranslationsTestUtils.clickNeverTranslateLanguage();
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_close_panel_never_translate_site.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_close_panel_never_translate_site.js
index 78679a046a..c3d1458525 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_close_panel_never_translate_site.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_close_panel_never_translate_site.js
@@ -16,7 +16,7 @@ add_task(async function test_panel_closes_on_toggle_never_translate_site() {
"The translations button is available"
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -27,7 +27,7 @@ add_task(async function test_panel_closes_on_toggle_never_translate_site() {
SPANISH_PAGE_URL,
{ checked: false }
);
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popuphidden",
async () => {
await FullPageTranslationsTestUtils.clickNeverTranslateSite();
@@ -54,7 +54,7 @@ add_task(
"The translations button is available"
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -78,7 +78,7 @@ add_task(
"The page should be automatically translated."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -91,7 +91,7 @@ add_task(
{ checked: false }
);
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popuphidden",
async () => {
await FullPageTranslationsTestUtils.clickNeverTranslateSite();
@@ -119,7 +119,7 @@ add_task(
"The translations button is available"
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -134,7 +134,7 @@ add_task(
checked: true,
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -147,7 +147,7 @@ add_task(
SPANISH_PAGE_URL,
{ checked: false }
);
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popuphidden",
async () => {
await FullPageTranslationsTestUtils.clickNeverTranslateSite();
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_engine_destroy.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_destroy.js
index 0a58dd7fa6..1b498f9b07 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_engine_destroy.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_destroy.js
@@ -16,7 +16,7 @@ add_task(async function test_translations_engine_destroy() {
{ button: true },
"The button is available."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -31,7 +31,7 @@ add_task(async function test_translations_engine_destroy() {
);
info("Destroy the engine process");
- await TranslationsParent.destroyEngineProcess();
+ await EngineProcess.destroyTranslationsEngine();
info("Mutate the page's content to re-trigger a translation.");
await runInPage(async TranslationsTest => {
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_engine_destroy_pending.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_destroy_pending.js
index ace1a845df..cfe1997093 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_engine_destroy_pending.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_destroy_pending.js
@@ -22,7 +22,7 @@ add_task(async function test_translations_engine_destroy_pending() {
{ button: true },
"The button is available."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -42,7 +42,7 @@ add_task(async function test_translations_engine_destroy_pending() {
);
info("Destroy the engine process");
- await TranslationsParent.destroyEngineProcess();
+ await EngineProcess.destroyTranslationsEngine();
info("Mutate the page's content to re-trigger a translation.");
await runInPage(async TranslationsTest => {
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_engine_unsupported.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_unsupported.js
index f0804f35aa..f0804f35aa 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_engine_unsupported.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_unsupported.js
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_engine_unsupported_lang.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_unsupported_lang.js
index 79e5c6b119..21f7e8fdb7 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_engine_unsupported_lang.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_engine_unsupported_lang.js
@@ -16,7 +16,7 @@ add_task(async function test_unsupported_lang() {
],
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel:
FullPageTranslationsTestUtils.assertPanelViewUnsupportedLanguage,
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_firstrun.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_firstrun.js
index 0c248a7837..ef807b9ac6 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_firstrun.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_firstrun.js
@@ -13,7 +13,7 @@ add_task(async function test_translations_panel_firstrun() {
prefs: [["browser.translations.panelShown", false]],
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewFirstShow,
});
@@ -23,7 +23,7 @@ add_task(async function test_translations_panel_firstrun() {
url: SPANISH_PAGE_URL_2,
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_firstrun_revisit.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_firstrun_revisit.js
index 02c2d94db9..998a7653c8 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_firstrun_revisit.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_firstrun_revisit.js
@@ -21,13 +21,13 @@ add_task(async function test_translations_panel_firstrun() {
"The button is available."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewFirstShow,
});
await FullPageTranslationsTestUtils.clickCancelButton();
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewFirstShow,
});
@@ -37,7 +37,7 @@ add_task(async function test_translations_panel_firstrun() {
url: SPANISH_PAGE_URL_DOT_ORG,
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -47,7 +47,7 @@ add_task(async function test_translations_panel_firstrun() {
url: SPANISH_PAGE_URL,
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_fuzzing.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_fuzzing.js
index 2f5285ac46..0accc3db60 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_fuzzing.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_fuzzing.js
@@ -96,7 +96,7 @@ add_task(async function test_translations_panel_fuzzing() {
{ button: true },
"The button is available."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -131,7 +131,7 @@ add_task(async function test_translations_panel_fuzzing() {
hasVerifiedMutation
) {
reportOperation("destroyEngineProcess");
- await TranslationsParent.destroyEngineProcess();
+ await EngineProcess.destroyTranslationsEngine();
isEngineMaybeDestroyed = true;
}
return true;
@@ -195,7 +195,7 @@ add_task(async function test_translations_panel_fuzzing() {
async restoreSpanishPage() {
if (activeTab === "spanish" && isSpanishPageTranslated) {
reportOperation("restoreSpanishPage");
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_gear.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_gear.js
index c24fc61e3d..0b9ce3ad3b 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_gear.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_gear.js
@@ -12,7 +12,7 @@ add_task(async function test_translations_panel_manage_languages() {
languagePairs: LANGUAGE_PAIRS,
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_never_translate_language.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_language.js
index 6c1fea7754..52cab172e7 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_never_translate_language.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_language.js
@@ -21,7 +21,7 @@ add_task(async function test_toggle_never_translate_language_menuitem() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -69,7 +69,7 @@ add_task(
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -83,7 +83,7 @@ add_task(
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -125,7 +125,7 @@ add_task(
"The button is available."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -154,7 +154,7 @@ add_task(
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_never_translate_site.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site.js
index 858aa297df..9d64da5b38 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_never_translate_site.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site.js
@@ -22,7 +22,7 @@ add_task(async function test_toggle_never_translate_site_menuitem() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -82,7 +82,7 @@ add_task(
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -96,7 +96,7 @@ add_task(
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -161,7 +161,7 @@ add_task(
"The button is available."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -192,7 +192,7 @@ add_task(
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_never_translate_site_auto.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site_auto.js
index 28f3b570c3..faa425c403 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_never_translate_site_auto.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site_auto.js
@@ -23,7 +23,7 @@ add_task(
"The button is available."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -54,7 +54,7 @@ add_task(
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_never_translate_site_basic.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site_basic.js
index 098ff54d6e..048e002f45 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_never_translate_site_basic.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site_basic.js
@@ -22,7 +22,7 @@ add_task(async function test_toggle_never_translate_site_menuitem() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_never_translate_site_manual.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site_manual.js
index d916342c33..425e202546 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_never_translate_site_manual.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_never_translate_site_manual.js
@@ -24,7 +24,7 @@ add_task(
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -38,7 +38,7 @@ add_task(
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_retry.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_retry.js
index 76a6bd9429..74d92381b9 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_retry.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_retry.js
@@ -19,7 +19,7 @@ add_task(async function test_translations_panel_retry() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -33,7 +33,7 @@ add_task(async function test_translations_panel_retry() {
runInPage
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_settings_unsupported_lang.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_settings_unsupported_lang.js
index 18fcf484dd..d371e9ed22 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_settings_unsupported_lang.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_settings_unsupported_lang.js
@@ -26,7 +26,7 @@ add_task(async function test_unsupported_language_settings_menu_checkboxes() {
"The translations button is visible."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -56,7 +56,7 @@ add_task(async function test_unsupported_language_settings_menu_checkboxes() {
"The translations button should be unavailable."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel:
FullPageTranslationsTestUtils.assertPanelViewUnsupportedLanguage,
diff --git a/browser/components/translations/tests/browser/browser_translations_panel_switch_languages.js b/browser/components/translations/tests/browser/browser_translations_full_page_panel_switch_languages.js
index 3652c61d83..0c5db67b20 100644
--- a/browser/components/translations/tests/browser/browser_translations_panel_switch_languages.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_panel_switch_languages.js
@@ -19,16 +19,16 @@ add_task(async function test_translations_panel_switch_language() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
- const { translateButton } = TranslationsPanel.elements;
+ const { translateButton } = FullPageTranslationsPanel.elements;
ok(!translateButton.disabled, "The translate button starts as enabled");
- FullPageTranslationsTestUtils.assertSelectedFromLanguage("es");
- FullPageTranslationsTestUtils.assertSelectedToLanguage("en");
+ FullPageTranslationsTestUtils.assertSelectedFromLanguage({ langTag: "es" });
+ FullPageTranslationsTestUtils.assertSelectedToLanguage({ langTag: "en" });
FullPageTranslationsTestUtils.switchSelectedFromLanguage("en");
diff --git a/browser/components/translations/tests/browser/browser_translations_reader_mode.js b/browser/components/translations/tests/browser/browser_translations_full_page_reader_mode.js
index d066257998..1a6ea9d2ec 100644
--- a/browser/components/translations/tests/browser/browser_translations_reader_mode.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_reader_mode.js
@@ -72,7 +72,7 @@ add_task(async function test_translations_persist_in_reader_mode() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_auto_translate.js b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_auto_translate.js
index abfc3dc32e..d26bcad77b 100644
--- a/browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_auto_translate.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_auto_translate.js
@@ -21,7 +21,7 @@ add_task(async function test_translations_telemetry_firstrun_auto_translate() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewFirstShow,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -74,7 +74,7 @@ add_task(async function test_translations_telemetry_firstrun_auto_translate() {
}
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_basics.js b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_basics.js
index 200e06b9ce..db6d2e3b6c 100644
--- a/browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_basics.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_basics.js
@@ -23,7 +23,7 @@ add_task(async function test_translations_telemetry_firstrun_basics() {
"The button is available."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewFirstShow,
});
@@ -56,7 +56,7 @@ add_task(async function test_translations_telemetry_firstrun_basics() {
expectFirstInteraction: true,
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewFirstShow,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_translation_failure.js b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_translation_failure.js
index 5397175039..75f58ab229 100644
--- a/browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_translation_failure.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_translation_failure.js
@@ -25,7 +25,7 @@ add_task(async function test_translations_telemetry_firstrun_failure() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewFirstShow,
});
@@ -113,7 +113,7 @@ add_task(async function test_translations_telemetry_firstrun_failure() {
expectFirstInteraction: true,
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewFirstShow,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_unsupported_lang.js b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_unsupported_lang.js
index fa9c67ee37..86ae21e9ed 100644
--- a/browser/components/translations/tests/browser/browser_translations_telemetry_firstrun_unsupported_lang.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_firstrun_unsupported_lang.js
@@ -19,7 +19,7 @@ add_task(
prefs: [["browser.translations.panelShown", false]],
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel:
FullPageTranslationsTestUtils.assertPanelViewUnsupportedLanguage,
@@ -83,7 +83,7 @@ add_task(
expectFirstInteraction: true,
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
openFromAppMenu: true,
onOpenPanel:
FullPageTranslationsTestUtils.assertPanelViewUnsupportedLanguage,
diff --git a/browser/components/translations/tests/browser/browser_translations_telemetry_open_panel.js b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_open_panel.js
index 64a02287e8..a49059f78f 100644
--- a/browser/components/translations/tests/browser/browser_translations_telemetry_open_panel.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_open_panel.js
@@ -21,7 +21,7 @@ add_task(async function test_translations_telemetry_open_panel() {
"The button is available."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -51,7 +51,7 @@ add_task(async function test_translations_telemetry_open_panel() {
expectNewFlowId: false,
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_telemetry_panel_auto_offer.js b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_panel_auto_offer.js
index 93ff473851..93ff473851 100644
--- a/browser/components/translations/tests/browser/browser_translations_telemetry_panel_auto_offer.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_panel_auto_offer.js
diff --git a/browser/components/translations/tests/browser/browser_translations_telemetry_panel_auto_offer_settings.js b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_panel_auto_offer_settings.js
index 9eae81904d..4a2959f58e 100644
--- a/browser/components/translations/tests/browser/browser_translations_telemetry_panel_auto_offer_settings.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_panel_auto_offer_settings.js
@@ -24,7 +24,7 @@ add_task(async function test_translations_panel_auto_offer_settings() {
expectedEventCount: 0,
});
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.openTranslationsSettingsMenu();
@@ -54,7 +54,7 @@ add_task(async function test_translations_panel_auto_offer_settings() {
}
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
await FullPageTranslationsTestUtils.assertIsAlwaysOfferTranslationsEnabled(
diff --git a/browser/components/translations/tests/browser/browser_translations_telemetry_switch_languages.js b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_switch_languages.js
index 6c06abab95..ef13940b3f 100644
--- a/browser/components/translations/tests/browser/browser_translations_telemetry_switch_languages.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_switch_languages.js
@@ -19,11 +19,11 @@ add_task(async function test_translations_telemetry_switch_from_language() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
- FullPageTranslationsTestUtils.assertSelectedFromLanguage("es");
+ FullPageTranslationsTestUtils.assertSelectedFromLanguage({ langTag: "es" });
FullPageTranslationsTestUtils.switchSelectedFromLanguage("en");
await TestTranslationsTelemetry.assertEvent(Glean.translationsPanel.open, {
@@ -95,11 +95,11 @@ add_task(async function test_translations_telemetry_switch_to_language() {
await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
- FullPageTranslationsTestUtils.assertSelectedToLanguage("en");
+ FullPageTranslationsTestUtils.assertSelectedToLanguage({ langTag: "en" });
FullPageTranslationsTestUtils.switchSelectedToLanguage("fr");
await TestTranslationsTelemetry.assertEvent(Glean.translationsPanel.open, {
diff --git a/browser/components/translations/tests/browser/browser_translations_telemetry_translation_failure.js b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_translation_failure.js
index e7d0cfb4f4..7a9f58970a 100644
--- a/browser/components/translations/tests/browser/browser_translations_telemetry_translation_failure.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_translation_failure.js
@@ -44,7 +44,7 @@ add_task(
}
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_telemetry_translation_request.js b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_translation_request.js
index 90bd81a8ed..e671f5e0da 100644
--- a/browser/components/translations/tests/browser/browser_translations_telemetry_translation_request.js
+++ b/browser/components/translations/tests/browser/browser_translations_full_page_telemetry_translation_request.js
@@ -39,7 +39,7 @@ add_task(async function test_translations_telemetry_manual_translation() {
}
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_select_context_menu_with_full_page_translations_active.js b/browser/components/translations/tests/browser/browser_translations_select_context_menu_with_full_page_translations_active.js
index 58cb655e38..99cff2b4ec 100644
--- a/browser/components/translations/tests/browser/browser_translations_select_context_menu_with_full_page_translations_active.js
+++ b/browser/components/translations/tests/browser/browser_translations_select_context_menu_with_full_page_translations_active.js
@@ -35,7 +35,7 @@ add_task(
"The translate-selection context menu item should be available while full-page translations is inactive."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -59,7 +59,7 @@ add_task(
"The translate-selection context menu item should be unavailable while full-page translations is active."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
@@ -114,7 +114,7 @@ add_task(
"The translate-selection context menu item should be available while full-page translations is inactive."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewDefault,
});
@@ -138,7 +138,7 @@ add_task(
"The translate-selection context menu item should be unavailable while full-page translations is active."
);
- await FullPageTranslationsTestUtils.openTranslationsPanel({
+ await FullPageTranslationsTestUtils.openPanel({
onOpenPanel: FullPageTranslationsTestUtils.assertPanelViewRevisit,
});
diff --git a/browser/components/translations/tests/browser/browser_translations_select_panel_language_selectors.js b/browser/components/translations/tests/browser/browser_translations_select_panel_language_selectors.js
new file mode 100644
index 0000000000..1dcc76450f
--- /dev/null
+++ b/browser/components/translations/tests/browser/browser_translations_select_panel_language_selectors.js
@@ -0,0 +1,54 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(
+ async function test_select_translations_panel_open_spanish_language_selectors() {
+ const { cleanup, runInPage } = await loadTestPage({
+ page: SPANISH_PAGE_URL,
+ languagePairs: LANGUAGE_PAIRS,
+ prefs: [["browser.translations.select.enable", true]],
+ });
+
+ await SelectTranslationsTestUtils.openPanel(runInPage, {
+ selectSpanishParagraph: true,
+ openAtSpanishParagraph: true,
+ expectedTargetLanguage: "en",
+ onOpenPanel: SelectTranslationsTestUtils.assertPanelViewDefault,
+ });
+
+ SelectTranslationsTestUtils.assertSelectedFromLanguage({ langTag: "es" });
+ SelectTranslationsTestUtils.assertSelectedToLanguage({ langTag: "en" });
+
+ await SelectTranslationsTestUtils.clickDoneButton();
+
+ await cleanup();
+ }
+);
+
+add_task(
+ async function test_select_translations_panel_open_english_language_selectors() {
+ const { cleanup, runInPage } = await loadTestPage({
+ page: ENGLISH_PAGE_URL,
+ languagePairs: LANGUAGE_PAIRS,
+ prefs: [["browser.translations.select.enable", true]],
+ });
+
+ await SelectTranslationsTestUtils.openPanel(runInPage, {
+ selectFirstParagraph: true,
+ openAtFirstParagraph: true,
+ expectedTargetLanguage: "en",
+ onOpenPanel: SelectTranslationsTestUtils.assertPanelViewDefault,
+ });
+
+ SelectTranslationsTestUtils.assertSelectedFromLanguage({ langTag: "en" });
+ SelectTranslationsTestUtils.assertSelectedToLanguage({
+ l10nId: "translations-panel-choose-language",
+ });
+
+ await SelectTranslationsTestUtils.clickDoneButton();
+
+ await cleanup();
+ }
+);
diff --git a/browser/components/translations/tests/browser/browser_translations_select_panel_mainview_ui.js b/browser/components/translations/tests/browser/browser_translations_select_panel_mainview_ui.js
new file mode 100644
index 0000000000..79d21e57d0
--- /dev/null
+++ b/browser/components/translations/tests/browser/browser_translations_select_panel_mainview_ui.js
@@ -0,0 +1,36 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * This test case verifies the visibility and initial state of UI elements within the
+ * Select Translations Panel's main-view UI.
+ */
+add_task(
+ async function test_select_translations_panel_mainview_ui_element_visibility() {
+ const { cleanup, runInPage } = await loadTestPage({
+ page: SPANISH_PAGE_URL,
+ languagePairs: LANGUAGE_PAIRS,
+ prefs: [["browser.translations.select.enable", true]],
+ });
+
+ await FullPageTranslationsTestUtils.assertTranslationsButton(
+ { button: true, circleArrows: false, locale: false, icon: true },
+ "The button is available."
+ );
+
+ await FullPageTranslationsTestUtils.assertPageIsUntranslated(runInPage);
+
+ await SelectTranslationsTestUtils.openPanel(runInPage, {
+ selectSpanishParagraph: true,
+ openAtSpanishParagraph: true,
+ expectedTargetLanguage: "es",
+ onOpenPanel: SelectTranslationsTestUtils.assertPanelViewDefault,
+ });
+
+ await SelectTranslationsTestUtils.clickDoneButton();
+
+ await cleanup();
+ }
+);
diff --git a/browser/components/translations/tests/browser/head.js b/browser/components/translations/tests/browser/head.js
index bc9968308c..200ed08719 100644
--- a/browser/components/translations/tests/browser/head.js
+++ b/browser/components/translations/tests/browser/head.js
@@ -206,7 +206,7 @@ async function navigate(
// it doesn't close on navigate the way that it does when it's
// open from the translations button, so ensure that we always
// close it when we navigate to a new page.
- await closeTranslationsPanelIfOpen();
+ await closeAllOpenPanelsAndMenus();
info(message);
@@ -230,7 +230,7 @@ async function navigate(
info(`Loading url: "${url}"`);
if (onOpenPanel) {
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popupshown",
loadTargetPage,
onOpenPanel
@@ -277,6 +277,146 @@ async function toggleReaderMode() {
}
/**
+ * A collection of shared functionality utilized by
+ * FullPageTranslationsTestUtils and SelectTranslationsTestUtils.
+ *
+ * Using functions from the aforementioned classes is preferred over
+ * using functions from this class directly.
+ */
+class SharedTranslationsTestUtils {
+ /**
+ * Asserts that the mainViewId of the panel matches the given string.
+ *
+ * @param {FullPageTranslationsPanel | SelectTranslationsPanel} panel
+ * @param {string} expectedId - The expected id that mainViewId is set to.
+ */
+ static _assertPanelMainViewId(panel, expectedId) {
+ const mainViewId = panel.elements.multiview.getAttribute("mainViewId");
+ is(
+ mainViewId,
+ expectedId,
+ "The mainViewId should match its expected value"
+ );
+ }
+
+ /**
+ * Asserts that the selected from-language matches the provided arguments.
+ *
+ * @param {FullPageTranslationsPanel | SelectTranslationsPanel} panel
+ * - The UI component or panel whose selected from-language is being asserted.
+ * @param {object} options - An object containing assertion parameters.
+ * @param {string} [options.langTag] - A BCP-47 language tag.
+ * @param {string} [options.l10nId] - A localization identifier.
+ */
+ static _assertSelectedFromLanguage(panel, { langTag, l10nId }) {
+ const { fromMenuList } = panel.elements;
+ is(
+ fromMenuList.value,
+ langTag,
+ "Expected selected from-language to match the given language tag"
+ );
+ if (l10nId) {
+ is(
+ fromMenuList.getAttribute("data-l10n-id"),
+ l10nId,
+ "Expected selected from-language to match the given l10n id"
+ );
+ }
+ }
+
+ /**
+ * Asserts that the selected to-language matches the provided arguments.
+ *
+ * @param {FullPageTranslationsPanel | SelectTranslationsPanel} panel
+ * - The UI component or panel whose selected from-language is being asserted.
+ * @param {object} options - An object containing assertion parameters.
+ * @param {string} [options.langTag] - A BCP-47 language tag.
+ * @param {string} [options.l10nId] - A localization identifier.
+ */
+ static _assertSelectedToLanguage(panel, { langTag, l10nId }) {
+ const { toMenuList } = panel.elements;
+ if (langTag) {
+ is(
+ toMenuList.value,
+ langTag,
+ "Expected selected to-language to match the given language tag"
+ );
+ }
+ if (l10nId) {
+ is(
+ toMenuList.getAttribute("data-l10n-id"),
+ l10nId,
+ "Expected selected to-language to match the given l10n id"
+ );
+ }
+ }
+
+ /**
+ * Asserts the visibility of the given elements based on the given expectations.
+ *
+ * @param {object} elements - An object containing the elements to be checked for visibility.
+ * @param {object} expectations - An object where each property corresponds to a property in elements,
+ * and its value is a boolean indicating whether the element should
+ * be visible (true) or hidden (false).
+ * @throws Throws if elements does not contain a property for each property in expectations.
+ */
+ static _assertPanelElementVisibility(elements, expectations) {
+ const hidden = {};
+ const visible = {};
+
+ for (const propertyName in expectations) {
+ ok(
+ elements.hasOwnProperty(propertyName),
+ `Expected panel elements to have property ${propertyName}`
+ );
+ if (expectations[propertyName]) {
+ visible[propertyName] = elements[propertyName];
+ } else {
+ hidden[propertyName] = elements[propertyName];
+ }
+ }
+
+ assertVisibility({ hidden, visible });
+ }
+
+ /**
+ * Executes the provided callback before waiting for the event and then waits for the given event
+ * to be fired for the element corresponding to the provided elementId.
+ *
+ * Optionally executes a postEventAssertion function once the event occurs.
+ *
+ * @param {string} elementId - The Id of the element to wait for the event on.
+ * @param {string} eventName - The name of the event to wait for.
+ * @param {Function} callback - A callback function to execute immediately before waiting for the event.
+ * This is often used to trigger the event on the expected element.
+ * @param {Function|null} [postEventAssertion=null] - An optional callback function to execute after
+ * the event has occurred.
+ * @throws Throws if the element with the specified `elementId` does not exist.
+ * @returns {Promise<void>}
+ */
+ static async _waitForPopupEvent(
+ elementId,
+ eventName,
+ callback,
+ postEventAssertion = null
+ ) {
+ const element = document.getElementById(elementId);
+ if (!element) {
+ throw new Error("Unable to find the translations panel element.");
+ }
+ const promise = BrowserTestUtils.waitForEvent(element, eventName);
+ await callback();
+ info("Waiting for the translations panel popup to be shown");
+ await promise;
+ if (postEventAssertion) {
+ postEventAssertion();
+ }
+ // Wait a single tick on the event loop.
+ await new Promise(resolve => setTimeout(resolve, 0));
+ }
+}
+
+/**
* A class containing test utility functions specific to testing full-page translations.
*/
class FullPageTranslationsTestUtils {
@@ -515,61 +655,45 @@ class FullPageTranslationsTestUtils {
/**
* Asserts that for each provided expectation, the visible state of the corresponding
- * element in TranslationsPanel.elements both exists and matches the visibility expectation.
+ * element in FullPageTranslationsPanel.elements both exists and matches the visibility expectation.
*
* @param {object} expectations
- * A list of expectations for the visibility of any subset of TranslationsPanel.elements
+ * A list of expectations for the visibility of any subset of FullPageTranslationsPanel.elements
*/
static #assertPanelElementVisibility(expectations = {}) {
- // Assume nothing is visible by default, and overwrite them
- // with any specific expectations provided in the argument.
- const finalExpectations = {
- cancelButton: false,
- changeSourceLanguageButton: false,
- dismissErrorButton: false,
- error: false,
- fromMenuList: false,
- fromLabel: false,
- header: false,
- intro: false,
- introLearnMoreLink: false,
- langSelection: false,
- restoreButton: false,
- toLabel: false,
- toMenuList: false,
- translateButton: false,
- unsupportedHeader: false,
- unsupportedHint: false,
- unsupportedLearnMoreLink: false,
- ...expectations,
- };
-
- const elements = TranslationsPanel.elements;
- const hidden = {};
- const visible = {};
-
- for (const propertyName in finalExpectations) {
- ok(
- elements.hasOwnProperty(propertyName),
- `Expected translations panel elements to have property ${propertyName}`
- );
- if (finalExpectations[propertyName]) {
- visible[propertyName] = elements[propertyName];
- } else {
- hidden[propertyName] = elements[propertyName];
+ SharedTranslationsTestUtils._assertPanelElementVisibility(
+ FullPageTranslationsPanel.elements,
+ {
+ cancelButton: false,
+ changeSourceLanguageButton: false,
+ dismissErrorButton: false,
+ error: false,
+ fromMenuList: false,
+ fromLabel: false,
+ header: false,
+ intro: false,
+ introLearnMoreLink: false,
+ langSelection: false,
+ restoreButton: false,
+ toLabel: false,
+ toMenuList: false,
+ translateButton: false,
+ unsupportedHeader: false,
+ unsupportedHint: false,
+ unsupportedLearnMoreLink: false,
+ // Overwrite any of the above defaults with the passed in expectations.
+ ...expectations,
}
- }
-
- assertVisibility({ hidden, visible });
+ );
}
/**
- * Asserts that the TranslationsPanel header has the expected l10nId.
+ * Asserts that the FullPageTranslationsPanel header has the expected l10nId.
*
* @param {string} l10nId - The expected data-l10n-id of the header.
*/
static #assertPanelHeaderL10nId(l10nId) {
- const { header } = TranslationsPanel.elements;
+ const { header } = FullPageTranslationsPanel.elements;
is(
header.getAttribute("data-l10n-id"),
l10nId,
@@ -578,17 +702,28 @@ class FullPageTranslationsTestUtils {
}
/**
+ * Asserts that the FullPageTranslationsPanel error has the expected l10nId.
+ *
+ * @param {string} l10nId - The expected data-l10n-id of the error.
+ */
+ static #assertPanelErrorL10nId(l10nId) {
+ const { errorMessage } = FullPageTranslationsPanel.elements;
+ is(
+ errorMessage.getAttribute("data-l10n-id"),
+ l10nId,
+ "The translations panel error message should match the expected data-l10n-id"
+ );
+ }
+
+ /**
* Asserts that the mainViewId of the panel matches the given string.
*
* @param {string} expectedId
*/
static #assertPanelMainViewId(expectedId) {
- const mainViewId =
- TranslationsPanel.elements.multiview.getAttribute("mainViewId");
- is(
- mainViewId,
- expectedId,
- "The full-page Translations panel mainViewId should match its expected value"
+ SharedTranslationsTestUtils._assertPanelMainViewId(
+ FullPageTranslationsPanel,
+ expectedId
);
}
@@ -598,7 +733,7 @@ class FullPageTranslationsTestUtils {
static assertPanelViewDefault() {
info("Checking that the panel shows the default view");
FullPageTranslationsTestUtils.#assertPanelMainViewId(
- "translations-panel-view-default"
+ "full-page-translations-panel-view-default"
);
FullPageTranslationsTestUtils.#assertPanelElementVisibility({
...FullPageTranslationsTestUtils.#defaultViewVisibilityExpectations,
@@ -614,7 +749,7 @@ class FullPageTranslationsTestUtils {
static assertPanelViewError() {
info("Checking that the panel shows the error view");
FullPageTranslationsTestUtils.#assertPanelMainViewId(
- "translations-panel-view-default"
+ "full-page-translations-panel-view-default"
);
FullPageTranslationsTestUtils.#assertPanelElementVisibility({
error: true,
@@ -623,6 +758,9 @@ class FullPageTranslationsTestUtils {
FullPageTranslationsTestUtils.#assertPanelHeaderL10nId(
"translations-panel-header"
);
+ FullPageTranslationsTestUtils.#assertPanelErrorL10nId(
+ "translations-panel-error-translating"
+ );
}
/**
@@ -644,7 +782,7 @@ class FullPageTranslationsTestUtils {
static assertPanelViewFirstShow() {
info("Checking that the panel shows the first-show view");
FullPageTranslationsTestUtils.#assertPanelMainViewId(
- "translations-panel-view-default"
+ "full-page-translations-panel-view-default"
);
FullPageTranslationsTestUtils.#assertPanelElementVisibility({
intro: true,
@@ -662,7 +800,7 @@ class FullPageTranslationsTestUtils {
static assertPanelViewFirstShowError() {
info("Checking that the panel shows the first-show error view");
FullPageTranslationsTestUtils.#assertPanelMainViewId(
- "translations-panel-view-default"
+ "full-page-translations-panel-view-default"
);
FullPageTranslationsTestUtils.#assertPanelElementVisibility({
error: true,
@@ -681,7 +819,7 @@ class FullPageTranslationsTestUtils {
static assertPanelViewRevisit() {
info("Checking that the panel shows the revisit view");
FullPageTranslationsTestUtils.#assertPanelMainViewId(
- "translations-panel-view-default"
+ "full-page-translations-panel-view-default"
);
FullPageTranslationsTestUtils.#assertPanelElementVisibility({
header: true,
@@ -702,7 +840,7 @@ class FullPageTranslationsTestUtils {
static assertPanelViewUnsupportedLanguage() {
info("Checking that the panel shows the unsupported-language view");
FullPageTranslationsTestUtils.#assertPanelMainViewId(
- "translations-panel-view-unsupported-language"
+ "full-page-translations-panel-view-unsupported-language"
);
FullPageTranslationsTestUtils.#assertPanelElementVisibility({
changeSourceLanguageButton: true,
@@ -718,13 +856,10 @@ class FullPageTranslationsTestUtils {
*
* @param {string} langTag - A BCP-47 language tag.
*/
- static assertSelectedFromLanguage(langTag) {
- info(`Checking that the selected from-language matches ${langTag}`);
- const { fromMenuList } = TranslationsPanel.elements;
- is(
- fromMenuList.value,
- langTag,
- "Expected selected from-language to match the given language tag"
+ static assertSelectedFromLanguage({ langTag, l10nId }) {
+ SharedTranslationsTestUtils._assertSelectedFromLanguage(
+ FullPageTranslationsPanel,
+ { langTag, l10nId }
);
}
@@ -733,13 +868,10 @@ class FullPageTranslationsTestUtils {
*
* @param {string} langTag - A BCP-47 language tag.
*/
- static assertSelectedToLanguage(langTag) {
- info(`Checking that the selected to-language matches ${langTag}`);
- const { toMenuList } = TranslationsPanel.elements;
- is(
- toMenuList.value,
- langTag,
- "Expected selected to-language to match the given language tag"
+ static assertSelectedToLanguage({ langTag, l10nId }) {
+ SharedTranslationsTestUtils._assertSelectedToLanguage(
+ FullPageTranslationsPanel,
+ { langTag, l10nId }
);
}
@@ -827,9 +959,9 @@ class FullPageTranslationsTestUtils {
*/
static async clickCancelButton() {
logAction();
- const { cancelButton } = TranslationsPanel.elements;
+ const { cancelButton } = FullPageTranslationsPanel.elements;
assertVisibility({ visible: { cancelButton } });
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popuphidden",
() => {
click(cancelButton, "Clicking the cancel button");
@@ -847,9 +979,9 @@ class FullPageTranslationsTestUtils {
*/
static async clickChangeSourceLanguageButton({ firstShow = false } = {}) {
logAction();
- const { changeSourceLanguageButton } = TranslationsPanel.elements;
+ const { changeSourceLanguageButton } = FullPageTranslationsPanel.elements;
assertVisibility({ visible: { changeSourceLanguageButton } });
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popupshown",
() => {
click(
@@ -868,9 +1000,9 @@ class FullPageTranslationsTestUtils {
*/
static async clickDismissErrorButton() {
logAction();
- const { dismissErrorButton } = TranslationsPanel.elements;
+ const { dismissErrorButton } = FullPageTranslationsPanel.elements;
assertVisibility({ visible: { dismissErrorButton } });
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popuphidden",
() => {
click(dismissErrorButton, "Click the dismiss-error button");
@@ -919,9 +1051,9 @@ class FullPageTranslationsTestUtils {
*/
static async clickRestoreButton() {
logAction();
- const { restoreButton } = TranslationsPanel.elements;
+ const { restoreButton } = FullPageTranslationsPanel.elements;
assertVisibility({ visible: { restoreButton } });
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popuphidden",
() => {
click(restoreButton, "Click the restore-page button");
@@ -957,9 +1089,9 @@ class FullPageTranslationsTestUtils {
pivotTranslation = false,
} = {}) {
logAction();
- const { translateButton } = TranslationsPanel.elements;
+ const { translateButton } = FullPageTranslationsPanel.elements;
assertVisibility({ visible: { translateButton } });
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popuphidden",
() => {
click(translateButton);
@@ -986,25 +1118,23 @@ class FullPageTranslationsTestUtils {
* @param {boolean} config.openWithKeyboard
* - Open the panel by synthesizing the keyboard. If false, synthesizes the mouse.
*/
- static async openTranslationsPanel({
+ static async openPanel({
onOpenPanel = null,
openFromAppMenu = false,
openWithKeyboard = false,
}) {
logAction();
- await closeTranslationsPanelIfOpen();
+ await closeAllOpenPanelsAndMenus();
if (openFromAppMenu) {
- await FullPageTranslationsTestUtils.#openTranslationsPanelViaAppMenu({
+ await FullPageTranslationsTestUtils.#openPanelViaAppMenu({
onOpenPanel,
openWithKeyboard,
});
} else {
- await FullPageTranslationsTestUtils.#openTranslationsPanelViaTranslationsButton(
- {
- onOpenPanel,
- openWithKeyboard,
- }
- );
+ await FullPageTranslationsTestUtils.#openPanelViaTranslationsButton({
+ onOpenPanel,
+ openWithKeyboard,
+ });
}
}
@@ -1017,7 +1147,7 @@ class FullPageTranslationsTestUtils {
* @param {boolean} config.openWithKeyboard
* - Open the panel by synthesizing the keyboard. If false, synthesizes the mouse.
*/
- static async #openTranslationsPanelViaAppMenu({
+ static async #openPanelViaAppMenu({
onOpenPanel = null,
openWithKeyboard = false,
}) {
@@ -1038,7 +1168,7 @@ class FullPageTranslationsTestUtils {
"The app-menu translate button should be enabled"
);
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popupshown",
() => {
if (openWithKeyboard) {
@@ -1060,7 +1190,7 @@ class FullPageTranslationsTestUtils {
* @param {boolean} config.openWithKeyboard
* - Open the panel by synthesizing the keyboard. If false, synthesizes the mouse.
*/
- static async #openTranslationsPanelViaTranslationsButton({
+ static async #openPanelViaTranslationsButton({
onOpenPanel = null,
openWithKeyboard = false,
}) {
@@ -1070,7 +1200,7 @@ class FullPageTranslationsTestUtils {
{ button: true },
"The translations button is visible."
);
- await FullPageTranslationsTestUtils.waitForTranslationsPopupEvent(
+ await FullPageTranslationsTestUtils.waitForPanelPopupEvent(
"popupshown",
() => {
if (openWithKeyboard) {
@@ -1091,7 +1221,7 @@ class FullPageTranslationsTestUtils {
logAction();
const gearIcons = getAllByL10nId("translations-panel-settings-button");
for (const gearIcon of gearIcons) {
- if (gearIcon.hidden) {
+ if (BrowserTestUtils.isHidden(gearIcon)) {
continue;
}
click(gearIcon, "Open the settings menu");
@@ -1114,7 +1244,7 @@ class FullPageTranslationsTestUtils {
*/
static switchSelectedFromLanguage(langTag) {
logAction(langTag);
- const { fromMenuList } = TranslationsPanel.elements;
+ const { fromMenuList } = FullPageTranslationsPanel.elements;
fromMenuList.value = langTag;
fromMenuList.dispatchEvent(new Event("command"));
}
@@ -1126,7 +1256,7 @@ class FullPageTranslationsTestUtils {
*/
static switchSelectedToLanguage(langTag) {
logAction(langTag);
- const { toMenuList } = TranslationsPanel.elements;
+ const { toMenuList } = FullPageTranslationsPanel.elements;
toMenuList.value = langTag;
toMenuList.dispatchEvent(new Event("command"));
}
@@ -1142,26 +1272,19 @@ class FullPageTranslationsTestUtils {
* An optional assertion to be made immediately after the event occurs.
* @returns {Promise<void>}
*/
- static async waitForTranslationsPopupEvent(
+ static async waitForPanelPopupEvent(
eventName,
callback,
postEventAssertion = null
) {
// De-lazify the panel elements.
- TranslationsPanel.elements;
- const panel = document.getElementById("translations-panel");
- if (!panel) {
- throw new Error("Unable to find the translations panel element.");
- }
- const promise = BrowserTestUtils.waitForEvent(panel, eventName);
- await callback();
- info("Waiting for the translations panel popup to be shown");
- await promise;
- if (postEventAssertion) {
- postEventAssertion();
- }
- // Wait a single tick on the event loop.
- await new Promise(resolve => setTimeout(resolve, 0));
+ FullPageTranslationsPanel.elements;
+ await SharedTranslationsTestUtils._waitForPopupEvent(
+ "full-page-translations-panel",
+ eventName,
+ callback,
+ postEventAssertion
+ );
}
}
@@ -1210,8 +1333,7 @@ class SelectTranslationsTestUtils {
info(message);
}
- await closeTranslationsPanelIfOpen();
- await closeContextMenuIfOpen();
+ await closeAllOpenPanelsAndMenus();
await SelectTranslationsTestUtils.openContextMenu(runInPage, {
selectFirstParagraph,
@@ -1274,8 +1396,106 @@ class SelectTranslationsTestUtils {
);
}
}
+ }
+
+ /**
+ * Asserts that for each provided expectation, the visible state of the corresponding
+ * element in FullPageTranslationsPanel.elements both exists and matches the visibility expectation.
+ *
+ * @param {object} expectations
+ * A list of expectations for the visibility of any subset of SelectTranslationsPanel.elements
+ */
+ static #assertPanelElementVisibility(expectations = {}) {
+ SharedTranslationsTestUtils._assertPanelElementVisibility(
+ SelectTranslationsPanel.elements,
+ {
+ betaIcon: false,
+ copyButton: false,
+ doneButton: false,
+ fromLabel: false,
+ fromMenuList: false,
+ header: false,
+ textArea: false,
+ toLabel: false,
+ toMenuList: false,
+ translateFullPageButton: false,
+ // Overwrite any of the above defaults with the passed in expectations.
+ ...expectations,
+ }
+ );
+ }
- await closeContextMenuIfOpen();
+ /**
+ * Asserts that the mainViewId of the panel matches the given string.
+ *
+ * @param {string} expectedId
+ */
+ static #assertPanelMainViewId(expectedId) {
+ SharedTranslationsTestUtils._assertPanelMainViewId(
+ SelectTranslationsPanel,
+ expectedId
+ );
+ }
+
+ /**
+ * Asserts that panel element visibility matches the default panel view.
+ */
+ static assertPanelViewDefault() {
+ info("Checking that the select-translations panel shows the default view");
+ SelectTranslationsTestUtils.#assertPanelMainViewId(
+ "select-translations-panel-view-default"
+ );
+ SelectTranslationsTestUtils.#assertPanelElementVisibility({
+ betaIcon: true,
+ fromLabel: true,
+ fromMenuList: true,
+ header: true,
+ textArea: true,
+ toLabel: true,
+ toMenuList: true,
+ copyButton: true,
+ doneButton: true,
+ translateFullPageButton: true,
+ });
+ }
+
+ /**
+ * Asserts that the selected from-language matches the provided language tag.
+ *
+ * @param {string} langTag - A BCP-47 language tag.
+ */
+ static assertSelectedFromLanguage({ langTag, l10nId }) {
+ SharedTranslationsTestUtils._assertSelectedFromLanguage(
+ SelectTranslationsPanel,
+ { langTag, l10nId }
+ );
+ }
+
+ /**
+ * Asserts that the selected to-language matches the provided language tag.
+ *
+ * @param {string} langTag - A BCP-47 language tag.
+ */
+ static assertSelectedToLanguage({ langTag, l10nId }) {
+ SharedTranslationsTestUtils._assertSelectedToLanguage(
+ SelectTranslationsPanel,
+ { langTag, l10nId }
+ );
+ }
+
+ /**
+ * Simulates clicking the done button and waits for the panel to close.
+ */
+ static async clickDoneButton() {
+ logAction();
+ const { doneButton } = SelectTranslationsPanel.elements;
+ assertVisibility({ visible: { doneButton } });
+ await SelectTranslationsTestUtils.waitForPanelPopupEvent(
+ "popuphidden",
+ () => {
+ click(doneButton, "Clicking the done button");
+ }
+ );
}
/**
@@ -1325,38 +1545,62 @@ class SelectTranslationsTestUtils {
}
if (openAtFirstParagraph === true) {
- await runInPage(async TranslationsTest => {
- const { getFirstParagraph } = TranslationsTest.getSelectors();
- const paragraph = getFirstParagraph();
- await TranslationsTest.rightClickContentElement(paragraph);
- });
+ await SharedTranslationsTestUtils._waitForPopupEvent(
+ "contentAreaContextMenu",
+ "popupshown",
+ async () => {
+ await runInPage(async TranslationsTest => {
+ const { getFirstParagraph } = TranslationsTest.getSelectors();
+ const paragraph = getFirstParagraph();
+ await TranslationsTest.rightClickContentElement(paragraph);
+ });
+ }
+ );
return;
}
if (openAtSpanishParagraph === true) {
- await runInPage(async TranslationsTest => {
- const { getSpanishParagraph } = TranslationsTest.getSelectors();
- const paragraph = getSpanishParagraph();
- await TranslationsTest.rightClickContentElement(paragraph);
- });
+ await SharedTranslationsTestUtils._waitForPopupEvent(
+ "contentAreaContextMenu",
+ "popupshown",
+ async () => {
+ await runInPage(async TranslationsTest => {
+ const { getSpanishParagraph } = TranslationsTest.getSelectors();
+ const paragraph = getSpanishParagraph();
+ await TranslationsTest.rightClickContentElement(paragraph);
+ });
+ }
+ );
return;
}
if (openAtEnglishHyperlink === true) {
- await runInPage(async TranslationsTest => {
- const { getEnglishHyperlink } = TranslationsTest.getSelectors();
- const hyperlink = getEnglishHyperlink();
- await TranslationsTest.rightClickContentElement(hyperlink);
- });
+ await SharedTranslationsTestUtils._waitForPopupEvent(
+ "contentAreaContextMenu",
+ "popupshown",
+ async () => {
+ await runInPage(async TranslationsTest => {
+ const { getEnglishHyperlink } = TranslationsTest.getSelectors();
+ const hyperlink = getEnglishHyperlink();
+ await TranslationsTest.rightClickContentElement(hyperlink);
+ });
+ }
+ );
return;
}
if (openAtSpanishHyperlink === true) {
- await runInPage(async TranslationsTest => {
- const { getSpanishHyperlink } = TranslationsTest.getSelectors();
- const hyperlink = getSpanishHyperlink();
- await TranslationsTest.rightClickContentElement(hyperlink);
- });
+ await SharedTranslationsTestUtils._waitForPopupEvent(
+ "contentAreaContextMenu",
+ "popupshown",
+ async () => {
+ await runInPage(async TranslationsTest => {
+ const { getSpanishHyperlink } = TranslationsTest.getSelectors();
+ const hyperlink = getSpanishHyperlink();
+ await TranslationsTest.rightClickContentElement(hyperlink);
+ });
+ }
+ );
return;
}
@@ -1364,6 +1608,96 @@ class SelectTranslationsTestUtils {
"openContextMenu() was not provided a declaration for which element to open the menu at."
);
}
+
+ /**
+ * Opens the Select Translations panel via the context menu based on specified options.
+ *
+ * @param {Function} runInPage - A content-exposed function to run within the context of the page.
+ * @param {object} options - Options for selecting paragraphs and opening the context menu.
+ * @param {boolean} options.selectFirstParagraph - Selects the first paragraph before opening the context menu.
+ * @param {boolean} options.selectSpanishParagraph - Selects the Spanish paragraph before opening the context menu.
+ * This is only available in SPANISH_TEST_PAGE.
+ * @param {string} options.expectedTargetLanguage - The target language for translation.
+ * @param {boolean} options.openAtFirstParagraph - Opens the context menu at the first paragraph.
+ * @param {boolean} options.openAtSpanishParagraph - Opens at the Spanish paragraph.
+ * This is only available in SPANISH_TEST_PAGE.
+ * @param {boolean} options.openAtEnglishHyperlink - Opens at the English hyperlink.
+ * This is only available in SPANISH_TEST_PAGE.
+ * @param {boolean} options.openAtSpanishHyperlink - Opens at the Spanish hyperlink.
+ * This is only available in SPANISH_TEST_PAGE.
+ * @param {Function|null} [options.onOpenPanel=null] - An optional callback function to execute after the panel opens.
+ * @param {string|null} [message=null] - An optional message to log to info.
+ * @throws Throws an error if the context menu could not be opened with the provided options.
+ * @returns {Promise<void>}
+ */
+ static async openPanel(
+ runInPage,
+ {
+ selectFirstParagraph,
+ selectSpanishParagraph,
+ expectedTargetLanguage,
+ openAtFirstParagraph,
+ openAtSpanishParagraph,
+ openAtEnglishHyperlink,
+ openAtSpanishHyperlink,
+ onOpenPanel,
+ },
+ message
+ ) {
+ logAction();
+
+ if (message) {
+ info(message);
+ }
+
+ await SelectTranslationsTestUtils.assertContextMenuTranslateSelectionItem(
+ runInPage,
+ {
+ selectFirstParagraph,
+ selectSpanishParagraph,
+ expectedTargetLanguage,
+ openAtFirstParagraph,
+ openAtSpanishParagraph,
+ openAtEnglishHyperlink,
+ openAtSpanishHyperlink,
+ },
+ message
+ );
+
+ const menuItem = getById("context-translate-selection");
+
+ await SelectTranslationsTestUtils.waitForPanelPopupEvent(
+ "popupshown",
+ () => click(menuItem),
+ onOpenPanel
+ );
+ }
+
+ /**
+ * XUL popups will fire the popupshown and popuphidden events. These will fire for
+ * any type of popup in the browser. This function waits for one of those events, and
+ * checks that the viewId of the popup is PanelUI-profiler
+ *
+ * @param {"popupshown" | "popuphidden"} eventName
+ * @param {Function} callback
+ * @param {Function} postEventAssertion
+ * An optional assertion to be made immediately after the event occurs.
+ * @returns {Promise<void>}
+ */
+ static async waitForPanelPopupEvent(
+ eventName,
+ callback,
+ postEventAssertion = null
+ ) {
+ // De-lazify the panel elements.
+ SelectTranslationsPanel.elements;
+ await SharedTranslationsTestUtils._waitForPopupEvent(
+ "select-translations-panel",
+ eventName,
+ callback,
+ postEventAssertion
+ );
+ }
}
class TranslationsSettingsTestUtils {
diff --git a/browser/components/uitour/test/browser.toml b/browser/components/uitour/test/browser.toml
index 2fb9cfa025..d5027d910f 100644
--- a/browser/components/uitour/test/browser.toml
+++ b/browser/components/uitour/test/browser.toml
@@ -9,7 +9,7 @@ support-files = [
["browser_UITour.js"]
skip-if = [
- "os == 'linux'", # Intermittent failures, bug 951965
+ "os == 'linux' && os_version == '18.04'", # Intermittent failures, bug 951965
"verify",
]
@@ -35,7 +35,7 @@ fail-if = ["a11y_checks"] # Bug 1854526 clicked UITourTooltipClose may not be fo
["browser_UITour_forceReaderMode.js"]
["browser_UITour_modalDialog.js"]
-skip-if = ["os != 'mac'"] # modal dialog disabling only working on OS X.
+run-if = ["os == 'mac'"] # modal dialog disabling only working on OS X.
["browser_UITour_observe.js"]
@@ -48,26 +48,30 @@ skip-if = ["true"] # Disabled pending removal of pocket UI Tour
["browser_UITour_private_browsing.js"]
["browser_UITour_resetProfile.js"]
-skip-if = ["verify && !debug && (os == 'linux')"]
+skip-if = ["os == 'linux' && os_version == '18.04' && !debug && verify"]
["browser_UITour_showNewTab.js"]
-skip-if = ["verify && !debug && (os == 'linux')"]
+skip-if = ["os == 'linux' && os_version == '18.04' && !debug && verify"]
["browser_UITour_showProtectionReport.js"]
-skip-if = ["os == 'linux' && (asan || debug || tsan)"] # Bug 1697217
+skip-if = [
+ "os == 'linux' && os_version == '18.04' && asan", # Bug 1697217
+ "os == 'linux' && os_version == '18.04' && debug", # Bug 1697217
+ "os == 'linux' && os_version == '18.04' && tsan", # Bug 1697217
+]
["browser_UITour_sync.js"]
skip-if = [
- "os == 'linux'", # Bug 1678417
+ "os == 'linux' && os_version == '18.04'", # Bug 1678417
]
["browser_UITour_toggleReaderMode.js"]
-skip-if = ["verify && !debug && (os == 'linux')"]
+skip-if = ["os == 'linux' && os_version == '18.04' && !debug && verify"]
["browser_backgroundTab.js"]
["browser_closeTab.js"]
-skip-if = ["verify && !debug && (os == 'linux')"]
+skip-if = ["os == 'linux' && os_version == '18.04' && !debug && verify"]
["browser_fxa.js"]
diff --git a/browser/components/urlbar/QuickActionsLoaderDefault.sys.mjs b/browser/components/urlbar/QuickActionsLoaderDefault.sys.mjs
index 12a4a43a1b..0ab9c4c83e 100644
--- a/browser/components/urlbar/QuickActionsLoaderDefault.sys.mjs
+++ b/browser/components/urlbar/QuickActionsLoaderDefault.sys.mjs
@@ -303,6 +303,9 @@ function shuffle(array, seed) {
* Loads the default QuickActions.
*/
export class QuickActionsLoaderDefault {
+ // Track the loading of the QuickActions to ensure they aren't loaded multiple times.
+ static #loadedPromise = null;
+
static async load() {
let keys = Object.keys(DEFAULT_ACTIONS);
if (lazy.UrlbarPrefs.get("quickactions.randomOrderActions")) {
@@ -328,4 +331,10 @@ export class QuickActionsLoaderDefault {
lazy.UrlbarProviderQuickActions.addAction(key, actionData);
}
}
+ static async ensureLoaded() {
+ if (!this.#loadedPromise) {
+ this.#loadedPromise = this.load();
+ }
+ await this.#loadedPromise;
+ }
}
diff --git a/browser/components/urlbar/UrlbarController.sys.mjs b/browser/components/urlbar/UrlbarController.sys.mjs
index 8a17bc16ae..9bfc3a645d 100644
--- a/browser/components/urlbar/UrlbarController.sys.mjs
+++ b/browser/components/urlbar/UrlbarController.sys.mjs
@@ -12,8 +12,6 @@ ChromeUtils.defineESModuleGetters(lazy, {
UrlbarProvidersManager: "resource:///modules/UrlbarProvidersManager.sys.mjs",
UrlbarTokenizer: "resource:///modules/UrlbarTokenizer.sys.mjs",
UrlbarUtils: "resource:///modules/UrlbarUtils.sys.mjs",
- clearTimeout: "resource://gre/modules/Timer.sys.mjs",
- setTimeout: "resource://gre/modules/Timer.sys.mjs",
});
const TELEMETRY_1ST_RESULT = "PLACES_AUTOCOMPLETE_1ST_RESULT_TIME_MS";
@@ -154,10 +152,6 @@ export class UrlbarController {
* can't be cancelled.
*/
cancelQuery() {
- // We must clear the pause impression timer in any case, even if the query
- // already finished.
- this.engagementEvent.clearPauseImpressionTimer();
-
// If the query finished already, don't handle cancel.
if (!this._lastQueryContextWrapper || this._lastQueryContextWrapper.done) {
return;
@@ -186,11 +180,6 @@ export class UrlbarController {
TelemetryStopwatch.finish(TELEMETRY_6_FIRST_RESULTS, queryContext);
}
- this.engagementEvent.startPauseImpressionTimer(
- queryContext,
- this.input.getSearchSource()
- );
-
if (queryContext.firstResultChanged) {
// Notify the input so it can make adjustments based on the first result.
if (this.input.onFirstResult(queryContext.results[0])) {
@@ -719,7 +708,6 @@ class TelemetryEvent {
constructor(controller, category) {
this._controller = controller;
this._category = category;
- this.#exposureResultTypes = new Set();
this.#beginObservingPingPrefs();
}
@@ -833,8 +821,6 @@ class TelemetryEvent {
* @param {DOMElement} [details.element] The picked view element.
*/
record(event, details) {
- this.clearPauseImpressionTimer();
-
// This should never throw, or it may break the urlbar.
try {
this._internalRecord(event, details);
@@ -853,52 +839,6 @@ class TelemetryEvent {
}
}
- /**
- * Clear the pause impression timer started by startPauseImpressionTimer().
- */
- clearPauseImpressionTimer() {
- lazy.clearTimeout(this._pauseImpressionTimer);
- }
-
- /**
- * Start a timer that records the pause impression telemetry for given context.
- * The telemetry will be recorded after
- * "browser.urlbar.searchEngagementTelemetry.pauseImpressionIntervalMs" ms.
- * If want to clear this timer, please use clearPauseImpressionTimer().
- *
- * @param {UrlbarQueryContext} queryContext
- * The query details that will be recorded as pause impression telemetry.
- * @param {string} searchSource
- * The seach source that will be recorded as pause impression telemetry.
- */
- startPauseImpressionTimer(queryContext, searchSource) {
- if (this._impressionStartEventInfo === this._startEventInfo) {
- // Already took an impression telemetry for this session.
- return;
- }
-
- this.clearPauseImpressionTimer();
- this._pauseImpressionTimer = lazy.setTimeout(() => {
- let { numChars, numWords, searchWords } = this._parseSearchString(
- queryContext.searchString
- );
- this._recordSearchEngagementTelemetry(
- queryContext,
- "impression",
- this._startEventInfo,
- {
- reason: "pause",
- numChars,
- numWords,
- searchWords,
- searchSource,
- }
- );
-
- this._impressionStartEventInfo = this._startEventInfo;
- }, lazy.UrlbarPrefs.get("searchEngagementTelemetry.pauseImpressionIntervalMs"));
- }
-
_internalRecord(event, details) {
const startEventInfo = this._startEventInfo;
@@ -933,6 +873,8 @@ class TelemetryEvent {
startEventInfo.interactionType == "dropped" ? "drop_go" : "paste_go";
} else if (event.type == "blur") {
action = "blur";
+ } else if (event.type == "tabswitch") {
+ action = "tab_switch";
} else if (
details.element?.dataset.command &&
// The "help" selType is recognized by legacy telemetry, and `action`
@@ -951,7 +893,8 @@ class TelemetryEvent {
action = "enter";
}
- let method = action == "blur" ? "abandonment" : "engagement";
+ let method =
+ action == "blur" || action == "tab_switch" ? "abandonment" : "engagement";
if (method == "engagement") {
// Not all engagements end the search session. The session remains ongoing
@@ -1119,6 +1062,7 @@ class TelemetryEvent {
};
} else if (method === "abandonment") {
eventInfo = {
+ abandonment_type: action,
sap,
interaction,
search_mode,
@@ -1148,18 +1092,20 @@ class TelemetryEvent {
}
// First check to see if we can record an exposure event
- if (
- (method === "abandonment" || method === "engagement") &&
- this.#exposureResultTypes.size
- ) {
- const exposureResults = Array.from(this.#exposureResultTypes).join(",");
- this._controller.logger.debug(
- `exposure event: ${JSON.stringify({ results: exposureResults })}`
- );
- Glean.urlbar.exposure.record({ results: exposureResults });
+ if (method === "abandonment" || method === "engagement") {
+ if (this.#exposureResultTypes.size) {
+ let exposure = {
+ results: [...this.#exposureResultTypes].sort().join(","),
+ };
+ this._controller.logger.debug(
+ `exposure event: ${JSON.stringify(exposure)}`
+ );
+ Glean.urlbar.exposure.record(exposure);
+ }
// reset the provider list on the controller
this.#exposureResultTypes.clear();
+ this.#tentativeExposureResultTypes.clear();
}
this._controller.logger.info(
@@ -1170,9 +1116,13 @@ class TelemetryEvent {
}
/**
- * Add result type to engagementEvent instance exposureResultTypes Set.
+ * Registers an exposure for a result in the current urlbar session. All
+ * exposures that are added during a session are recorded in an exposure event
+ * at the end of the session. Exposures are cleared at the end of each session
+ * and do not carry over to the next session.
*
- * @param {UrlbarResult} result UrlbarResult to have exposure recorded.
+ * @param {UrlbarResult} result An exposure will be added for this result if
+ * exposures are enabled for its result type.
*/
addExposure(result) {
if (result.exposureResultType) {
@@ -1180,6 +1130,40 @@ class TelemetryEvent {
}
}
+ /**
+ * Registers a tentative exposure for a result in the current urlbar session.
+ * Exposures that remain tentative at the end of the session are discarded and
+ * are not recorded in the exposure event.
+ *
+ * @param {UrlbarResult} result A tentative exposure will be added for this
+ * result if exposures are enabled for its result type.
+ */
+ addTentativeExposure(result) {
+ if (result.exposureResultType) {
+ this.#tentativeExposureResultTypes.add(result.exposureResultType);
+ }
+ }
+
+ /**
+ * Converts all tentative exposures that were added and not yet discarded
+ * during the current urlbar session into actual exposures that will be
+ * recorded at the end of the session.
+ */
+ acceptTentativeExposures() {
+ for (let type of this.#tentativeExposureResultTypes) {
+ this.#exposureResultTypes.add(type);
+ }
+ this.#tentativeExposureResultTypes.clear();
+ }
+
+ /**
+ * Discards all tentative exposures that were added and not yet accepted
+ * during the current urlbar session.
+ */
+ discardTentativeExposures() {
+ this.#tentativeExposureResultTypes.clear();
+ }
+
#getInteractionType(
method,
startEventInfo,
@@ -1306,7 +1290,6 @@ class TelemetryEvent {
* no-op.
*/
discard() {
- this.clearPauseImpressionTimer();
if (this._startEventInfo) {
this._startEventInfo = null;
this._discarded = true;
@@ -1369,5 +1352,6 @@ class TelemetryEvent {
#previousSearchWordsSet = null;
- #exposureResultTypes;
+ #exposureResultTypes = new Set();
+ #tentativeExposureResultTypes = new Set();
}
diff --git a/browser/components/urlbar/UrlbarEventBufferer.sys.mjs b/browser/components/urlbar/UrlbarEventBufferer.sys.mjs
index 81092151d0..4b654386dc 100644
--- a/browser/components/urlbar/UrlbarEventBufferer.sys.mjs
+++ b/browser/components/urlbar/UrlbarEventBufferer.sys.mjs
@@ -102,11 +102,11 @@ export class UrlbarEventBufferer {
}
}
- onQueryCancelled(queryContext) {
+ onQueryCancelled() {
this._lastQuery.status = QUERY_STATUS.COMPLETE;
}
- onQueryFinished(queryContext) {
+ onQueryFinished() {
this._lastQuery.status = QUERY_STATUS.COMPLETE;
}
diff --git a/browser/components/urlbar/UrlbarInput.sys.mjs b/browser/components/urlbar/UrlbarInput.sys.mjs
index 3053e32ca2..6aefd18f9c 100644
--- a/browser/components/urlbar/UrlbarInput.sys.mjs
+++ b/browser/components/urlbar/UrlbarInput.sys.mjs
@@ -627,7 +627,7 @@ export class UrlbarInput {
handleNavigation({ event, oneOffParams, triggeringPrincipal }) {
let element = this.view.selectedElement;
let result = this.view.getResultFromElement(element);
- let openParams = oneOffParams?.openParams || {};
+ let openParams = oneOffParams?.openParams || { triggeringPrincipal };
// If the value was submitted during composition, the result may not have
// been updated yet, because the input event happens after composition end.
@@ -794,7 +794,7 @@ export class UrlbarInput {
this.pickResult(newResult, event, null, browser);
}
})
- .catch(ex => {
+ .catch(() => {
if (url) {
// Something went wrong, we should always have a heuristic result,
// otherwise it means we're not able to search at all, maybe because
@@ -923,25 +923,9 @@ export class UrlbarInput {
return;
}
- let urlOverride;
if (element?.dataset.command) {
- this.controller.engagementEvent.record(event, {
- result,
- element,
- searchString: this._lastSearchString,
- selType:
- element.dataset.command == "help" &&
- result.type == lazy.UrlbarUtils.RESULT_TYPE.TIP
- ? "tiphelp"
- : element.dataset.command,
- });
- if (element.dataset.command == "help") {
- urlOverride = result.payload.helpUrl;
- }
- urlOverride ||= element.dataset.url;
- if (!urlOverride) {
- return;
- }
+ this.#pickMenuResult(result, event, element, browser);
+ return;
}
// When a one-off is selected, we restyle heuristic results to look like
@@ -976,9 +960,13 @@ export class UrlbarInput {
return;
}
- urlOverride ||= element?.dataset.url;
+ let resultUrl = element?.dataset.url;
let originalUntrimmedValue = this.untrimmedValue;
- let isCanonized = this.setValueFromResult({ result, event, urlOverride });
+ let isCanonized = this.setValueFromResult({
+ result,
+ event,
+ urlOverride: resultUrl,
+ });
let where = this._whereToOpen(event);
let openParams = {
allowInheritPrincipal: false,
@@ -992,7 +980,7 @@ export class UrlbarInput {
};
if (
- urlOverride &&
+ resultUrl &&
result.type != lazy.UrlbarUtils.RESULT_TYPE.TIP &&
where == "current"
) {
@@ -1018,8 +1006,8 @@ export class UrlbarInput {
return;
}
- let { url, postData } = urlOverride
- ? { url: urlOverride, postData: null }
+ let { url, postData } = resultUrl
+ ? { url: resultUrl, postData: null }
: lazy.UrlbarUtils.getUrlFromResult(result);
openParams.postData = postData;
@@ -1162,7 +1150,7 @@ export class UrlbarInput {
// to the list that we use to make decisions.
// Because we are directly asking for a search here, bypassing the
// docShell, we need to do the same ourselves.
- // See also URIFixupChild.jsm and keyword-uri-fixup.
+ // See also URIFixupChild.sys.mjs and keyword-uri-fixup.
let fixupInfo = this._getURIFixupInfo(originalUntrimmedValue.trim());
if (fixupInfo) {
this.window.gKeywordURIFixup.check(
@@ -1196,10 +1184,7 @@ export class UrlbarInput {
break;
}
case lazy.UrlbarUtils.RESULT_TYPE.TIP: {
- let scalarName =
- element.dataset.command == "help"
- ? `${result.payload.type}-help`
- : `${result.payload.type}-picked`;
+ let scalarName = `${result.payload.type}-picked`;
Services.telemetry.keyedScalarAdd("urlbar.tips", scalarName, 1);
if (url) {
break;
@@ -2219,11 +2204,24 @@ export class UrlbarInput {
this.formatValue();
this._resetSearchState();
- // Switching tabs doesn't always change urlbar focus, so we must try to
- // reopen here too, not just on focus.
// We don't use the original TabSelect event because caching it causes
// leaks on MacOS.
- if (this.view.autoOpen({ event: new CustomEvent("tabswitch") })) {
+ const event = new CustomEvent("tabswitch");
+ // If the urlbar is focused after a tab switch, record a potential
+ // engagement event. When switching from a focused to a non-focused urlbar,
+ // the blur event would record the abandonment. When switching from an
+ // unfocused to a focused urlbar, there should be no search session ongoing,
+ // so this will be a no-op.
+ if (this.focused) {
+ this.controller.engagementEvent.record(event, {
+ searchString: this._lastSearchString,
+ searchSource: this.getSearchSource(event),
+ });
+ }
+
+ // Switching tabs doesn't always change urlbar focus, so we must try to
+ // reopen here too, not just on focus.
+ if (this.view.autoOpen({ event })) {
return;
}
// The input may retain focus when switching tabs in which case we
@@ -2744,6 +2742,73 @@ export class UrlbarInput {
}
/**
+ * Called when a menu item from results menu is picked.
+ *
+ * @param {UrlbarResult} result The result that was picked.
+ * @param {Event} event The event that picked the result.
+ * @param {DOMElement} element the picked view element, if available.
+ * @param {object} browser The browser to use for the load.
+ */
+ #pickMenuResult(result, event, element, browser) {
+ this.controller.engagementEvent.record(event, {
+ result,
+ element,
+ searchString: this._lastSearchString,
+ selType:
+ element.dataset.command == "help" &&
+ result.type == lazy.UrlbarUtils.RESULT_TYPE.TIP
+ ? "tiphelp"
+ : element.dataset.command,
+ });
+
+ if (element.dataset.command == "manage") {
+ this.window.openPreferences("search-locationBar");
+ return;
+ }
+
+ let url =
+ element.dataset.command == "help"
+ ? result.payload.helpUrl
+ : element.dataset.url;
+ if (!url) {
+ return;
+ }
+
+ let where = this._whereToOpen(event);
+ if (
+ url &&
+ result.type != lazy.UrlbarUtils.RESULT_TYPE.TIP &&
+ where == "current"
+ ) {
+ // Open non-tip help links in a new tab unless the user held a modifier.
+ // TODO (bug 1696232): Do this for tip help links, too.
+ where = "tab";
+ }
+
+ this.view.close({ elementPicked: true });
+
+ if (result.type == lazy.UrlbarUtils.RESULT_TYPE.TIP) {
+ let scalarName = `${result.payload.type}-help`;
+ Services.telemetry.keyedScalarAdd("urlbar.tips", scalarName, 1);
+ }
+
+ this._loadURL(
+ url,
+ event,
+ where,
+ {
+ allowInheritPrincipal: false,
+ private: this.isPrivate,
+ },
+ {
+ source: result.source,
+ type: result.type,
+ },
+ browser
+ );
+ }
+
+ /**
* Loads the url in the appropriate place.
*
* @param {string} url
@@ -3465,11 +3530,11 @@ export class UrlbarInput {
Services.obs.notifyObservers(null, "urlbar-focus");
}
- _on_mouseover(event) {
+ _on_mouseover() {
this._updateUrlTooltip();
}
- _on_draggableregionleftmousedown(event) {
+ _on_draggableregionleftmousedown() {
if (!lazy.UrlbarPrefs.get("ui.popup.disable_autohide")) {
this.view.close();
}
@@ -3477,7 +3542,7 @@ export class UrlbarInput {
_on_mousedown(event) {
switch (event.currentTarget) {
- case this.textbox:
+ case this.textbox: {
this._mousedownOnUrlbarDescendant = true;
if (
@@ -3522,6 +3587,7 @@ export class UrlbarInput {
});
}
break;
+ }
case this.window:
if (this._mousedownOnUrlbarDescendant) {
this._mousedownOnUrlbarDescendant = false;
@@ -3643,7 +3709,7 @@ export class UrlbarInput {
});
}
- _on_selectionchange(event) {
+ _on_selectionchange() {
// Confirm placeholder as user text if it gets explicitly deselected. This
// happens when the user wants to modify the autofilled text by either
// clicking on it, or pressing HOME, END, RIGHT, …
@@ -3658,7 +3724,7 @@ export class UrlbarInput {
}
}
- _on_select(event) {
+ _on_select() {
// On certain user input, AutoCopyListener::OnSelectionChange() updates
// the primary selection with user-selected text (when supported).
// Selection::NotifySelectionListeners() then dispatches a "select" event
@@ -3827,8 +3893,9 @@ export class UrlbarInput {
isPrivate: this.isPrivate,
maxResults: lazy.UrlbarPrefs.get("maxRichResults"),
searchString,
- userContextId:
- this.window.gBrowser.selectedBrowser.getAttribute("usercontextid"),
+ userContextId: parseInt(
+ this.window.gBrowser.selectedBrowser.getAttribute("usercontextid") || 0
+ ),
currentPage: this.window.gBrowser.currentURI.spec,
formHistoryName: this.formHistoryName,
prohibitRemoteResults:
@@ -3848,11 +3915,11 @@ export class UrlbarInput {
return new lazy.UrlbarQueryContext(options);
}
- _on_scrollend(event) {
+ _on_scrollend() {
this.updateTextOverflow();
}
- _on_TabSelect(event) {
+ _on_TabSelect() {
this._gotTabSelect = true;
this._afterTabSelectAndFocusChange();
}
@@ -3927,7 +3994,7 @@ export class UrlbarInput {
}
}
- _on_compositionstart(event) {
+ _on_compositionstart() {
if (this._compositionState == lazy.UrlbarUtils.COMPOSITION.COMPOSING) {
throw new Error("Trying to start a nested composition?");
}
diff --git a/browser/components/urlbar/UrlbarPrefs.sys.mjs b/browser/components/urlbar/UrlbarPrefs.sys.mjs
index 6736ddfcd3..c521264fa5 100644
--- a/browser/components/urlbar/UrlbarPrefs.sys.mjs
+++ b/browser/components/urlbar/UrlbarPrefs.sys.mjs
@@ -317,9 +317,6 @@ const PREF_URLBAR_DEFAULTS = new Map([
// If true, we show tail suggestions when available.
["richSuggestions.tail", true],
- // Interval time until taking pause impression telemetry.
- ["searchEngagementTelemetry.pauseImpressionIntervalMs", 1000],
-
// Hidden pref. Disables checks that prevent search tips being shown, thus
// showing them every time the newtab page or the default search engine
// homepage is opened.
@@ -426,7 +423,7 @@ const PREF_URLBAR_DEFAULTS = new Map([
// Controls whether searching for open tabs returns tabs from any container
// or only from the current container.
- ["switchTabs.searchAllContainers", false],
+ ["switchTabs.searchAllContainers", true],
// The number of remaining times the user can interact with tab-to-search
// onboarding results before we stop showing them.
@@ -528,6 +525,7 @@ const NIMBUS_DEFAULTS = {
weatherKeywords: null,
weatherKeywordsMinimumLength: 0,
weatherKeywordsMinimumLengthCap: 0,
+ weatherSimpleUI: false,
};
// Maps preferences under browser.urlbar.suggest to behavior names, as defined
@@ -1271,7 +1269,7 @@ class Preferences {
}
}
- _migrateFirefoxSuggestPrefsTo_2(scenario) {
+ _migrateFirefoxSuggestPrefsTo_2() {
// In previous versions of the prefs for online, suggestions were disabled
// by default; in version 2, they're enabled by default. For users who were
// already in online and did not enable suggestions (because they did not
diff --git a/browser/components/urlbar/UrlbarProviderAboutPages.sys.mjs b/browser/components/urlbar/UrlbarProviderAboutPages.sys.mjs
index 9b471d26c4..62f85b2348 100644
--- a/browser/components/urlbar/UrlbarProviderAboutPages.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderAboutPages.sys.mjs
@@ -66,7 +66,7 @@ class ProviderAboutPages extends UrlbarProvider {
if (aboutUrl.startsWith(searchString)) {
let result = new lazy.UrlbarResult(
UrlbarUtils.RESULT_TYPE.URL,
- UrlbarUtils.RESULT_SOURCE.HISTORY,
+ UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
...lazy.UrlbarResult.payloadAndSimpleHighlights(queryContext.tokens, {
title: [aboutUrl, UrlbarUtils.HIGHLIGHT.TYPED],
url: [aboutUrl, UrlbarUtils.HIGHLIGHT.TYPED],
diff --git a/browser/components/urlbar/UrlbarProviderAliasEngines.sys.mjs b/browser/components/urlbar/UrlbarProviderAliasEngines.sys.mjs
index 77ed07f13c..d80f3e055d 100644
--- a/browser/components/urlbar/UrlbarProviderAliasEngines.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderAliasEngines.sys.mjs
@@ -72,6 +72,7 @@ class ProviderAliasEngines extends UrlbarProvider {
alias,
queryContext.searchString
);
+ let icon = await engine?.getIconURL();
if (!engine || instance != this.queryInstance) {
return;
}
@@ -83,7 +84,7 @@ class ProviderAliasEngines extends UrlbarProvider {
engine: engine.name,
keyword: alias,
query: query.trimStart(),
- icon: engine.getIconURL(),
+ icon,
})
);
result.heuristic = true;
diff --git a/browser/components/urlbar/UrlbarProviderAutofill.sys.mjs b/browser/components/urlbar/UrlbarProviderAutofill.sys.mjs
index b61376220c..32e605206e 100644
--- a/browser/components/urlbar/UrlbarProviderAutofill.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderAutofill.sys.mjs
@@ -38,15 +38,11 @@ const ORIGIN_FRECENCY_FIELD = ORIGIN_USE_ALT_FRECENCY
? "alt_frecency"
: "frecency";
-// `WITH` clause for the autofill queries. autofill_frecency_threshold.value is
-// the mean of all moz_origins.frecency values + stddevMultiplier * one standard
-// deviation. This is inlined directly in the SQL (as opposed to being a custom
-// Sqlite function for example) in order to be as efficient as possible.
-// For alternative frecency, a NULL frecency will be normalized to 0.0, and when
-// it will graduate, it will likely become 1 (official frecency is NOT NULL).
-// Thus we set a minimum threshold of 2.0, otherwise if all the visits are older
-// than the cutoff, we end up checking 0.0 (frecency) >= 0.0 (threshold) and
-// autofill everything instead of nothing.
+// `WITH` clause for the autofill queries.
+// A NULL frecency is normalized to 1.0, because the table doesn't support NULL.
+// Because of that, here we must set a minimum threshold of 2.0, otherwise when
+// all the visits are older than the cutoff, we'd check
+// 0.0 (frecency) >= 0.0 (threshold) and autofill everything instead of nothing.
const SQL_AUTOFILL_WITH = ORIGIN_USE_ALT_FRECENCY
? `
WITH
@@ -59,20 +55,11 @@ const SQL_AUTOFILL_WITH = ORIGIN_USE_ALT_FRECENCY
`
: `
WITH
- frecency_stats(count, sum, squares) AS (
- SELECT
- CAST((SELECT IFNULL(value, 0.0) FROM moz_meta WHERE key = 'origin_frecency_count') AS REAL),
- CAST((SELECT IFNULL(value, 0.0) FROM moz_meta WHERE key = 'origin_frecency_sum') AS REAL),
- CAST((SELECT IFNULL(value, 0.0) FROM moz_meta WHERE key = 'origin_frecency_sum_of_squares') AS REAL)
- ),
autofill_frecency_threshold(value) AS (
- SELECT
- CASE count
- WHEN 0 THEN 0.0
- WHEN 1 THEN sum
- ELSE (sum / count) + (:stddevMultiplier * sqrt((squares - ((sum * sum) / count)) / count))
- END
- FROM frecency_stats
+ SELECT IFNULL(
+ (SELECT value FROM moz_meta WHERE key = 'origin_frecency_threshold'),
+ 2.0
+ )
)
`;
@@ -405,10 +392,9 @@ class ProviderAutofill extends UrlbarProvider {
/**
* Gets the provider's priority.
*
- * @param {UrlbarQueryContext} queryContext The query context object
* @returns {number} The provider's priority for the given query.
*/
- getPriority(queryContext) {
+ getPriority() {
return 0;
}
@@ -439,10 +425,8 @@ class ProviderAutofill extends UrlbarProvider {
/**
* Cancels a running query.
- *
- * @param {object} queryContext The query context object
*/
- cancelQuery(queryContext) {
+ cancelQuery() {
if (this._autofillData?.instance == this.queryInstance) {
this._autofillData = null;
}
@@ -463,9 +447,6 @@ class ProviderAutofill extends UrlbarProvider {
let conditions = [];
// Pay attention to the order of params, since they are not named.
let params = [...hosts];
- if (!ORIGIN_USE_ALT_FRECENCY) {
- params.unshift(lazy.UrlbarPrefs.get("autoFill.stddevMultiplier"));
- }
let sources = queryContext.sources;
if (
sources.includes(UrlbarUtils.RESULT_SOURCE.HISTORY) &&
@@ -536,9 +517,6 @@ class ProviderAutofill extends UrlbarProvider {
query_type: QUERYTYPE.AUTOFILL_ORIGIN,
searchString: searchStr.toLowerCase(),
};
- if (!ORIGIN_USE_ALT_FRECENCY) {
- opts.stddevMultiplier = lazy.UrlbarPrefs.get("autoFill.stddevMultiplier");
- }
if (this._strippedPrefix) {
opts.prefix = this._strippedPrefix;
}
diff --git a/browser/components/urlbar/UrlbarProviderCalculator.sys.mjs b/browser/components/urlbar/UrlbarProviderCalculator.sys.mjs
index 72c64f9646..a55531167c 100644
--- a/browser/components/urlbar/UrlbarProviderCalculator.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderCalculator.sys.mjs
@@ -157,7 +157,7 @@ class ProviderCalculator extends UrlbarProvider {
return viewUpdate;
}
- onEngagement(state, queryContext, details, controller) {
+ onEngagement(state, queryContext, details) {
let { result } = details;
if (result?.providerName == this.name) {
lazy.ClipboardHelper.copyString(result.payload.value);
@@ -306,7 +306,7 @@ Parser.prototype = {
// This method returns an array of objects with these properties:
// - number: true/false
// - value: the token value
- parse(input) {
+ parse() {
// The input must be a "block" without any digit left.
if (!this._tokenizeBlock() || this._chars.length) {
throw new Error("Wrong input");
diff --git a/browser/components/urlbar/UrlbarProviderClipboard.sys.mjs b/browser/components/urlbar/UrlbarProviderClipboard.sys.mjs
index f1d0a0beb2..5337e610cc 100644
--- a/browser/components/urlbar/UrlbarProviderClipboard.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderClipboard.sys.mjs
@@ -51,7 +51,8 @@ class ProviderClipboard extends UrlbarProvider {
if (
!lazy.UrlbarPrefs.get("clipboard.featureGate") ||
!lazy.UrlbarPrefs.get("suggest.clipboard") ||
- queryContext.searchString
+ queryContext.searchString ||
+ queryContext.searchMode
) {
return false;
}
@@ -113,7 +114,7 @@ class ProviderClipboard extends UrlbarProvider {
return null;
}
- getPriority(queryContext) {
+ getPriority() {
// Zero-prefix suggestions have the same priority as top sites.
return 1;
}
diff --git a/browser/components/urlbar/UrlbarProviderContextualSearch.sys.mjs b/browser/components/urlbar/UrlbarProviderContextualSearch.sys.mjs
index f54afb8e70..63c94ee8f3 100644
--- a/browser/components/urlbar/UrlbarProviderContextualSearch.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderContextualSearch.sys.mjs
@@ -135,12 +135,17 @@ class ProviderContextualSearch extends UrlbarProvider {
engine = (
await lazy.UrlbarSearchUtils.enginesForDomainPrefix(host, {
matchAllDomainLevels: true,
- onlyEnabled: false,
})
)[0];
}
if (engine) {
+ let instance = this.queryInstance;
+ let icon = await engine.getIconURL();
+ if (instance != this.queryInstance) {
+ return;
+ }
+
this.engines.set(hostname, engine);
// Check to see if the engine that was found is the default engine.
// The default engine will often be used to populate the heuristic result,
@@ -156,7 +161,7 @@ class ProviderContextualSearch extends UrlbarProvider {
let result = this.makeResult({
url,
engine: engine.name,
- icon: engine.getIconURL(),
+ icon,
input: queryContext.searchString,
shouldNavigate: true,
});
@@ -215,12 +220,9 @@ class ProviderContextualSearch extends UrlbarProvider {
* See the base UrlbarProvider class for more.
*
* @param {UrlbarResult} result The result whose view will be updated.
- * @param {Map} idsByName
- * A Map from an element's name, as defined by the provider; to its ID in
- * the DOM, as defined by the browser.
* @returns {object} An object describing the view update.
*/
- getViewUpdate(result, idsByName) {
+ getViewUpdate(result) {
return {
icon: {
attributes: {
diff --git a/browser/components/urlbar/UrlbarProviderHeuristicFallback.sys.mjs b/browser/components/urlbar/UrlbarProviderHeuristicFallback.sys.mjs
index ee85fbffa8..052b121ab3 100644
--- a/browser/components/urlbar/UrlbarProviderHeuristicFallback.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderHeuristicFallback.sys.mjs
@@ -53,20 +53,18 @@ class ProviderHeuristicFallback extends UrlbarProvider {
* If this method returns false, the providers manager won't start a query
* with this provider, to save on resources.
*
- * @param {UrlbarQueryContext} queryContext The query context object
* @returns {boolean} Whether this provider should be invoked for the search.
*/
- isActive(queryContext) {
+ isActive() {
return true;
}
/**
* Gets the provider's priority.
*
- * @param {UrlbarQueryContext} queryContext The query context object
* @returns {number} The provider's priority for the given query.
*/
- getPriority(queryContext) {
+ getPriority() {
return 0;
}
@@ -99,7 +97,7 @@ class ProviderHeuristicFallback extends UrlbarProvider {
}) ||
lazy.UrlbarTokenizer.REGEXP_COMMON_EMAIL.test(str))
) {
- let searchResult = this._engineSearchResult(queryContext);
+ let searchResult = await this._engineSearchResult(queryContext);
if (instance != this.queryInstance) {
return;
}
@@ -109,13 +107,16 @@ class ProviderHeuristicFallback extends UrlbarProvider {
return;
}
- result = this._searchModeKeywordResult(queryContext);
+ result = await this._searchModeKeywordResult(queryContext);
+ if (instance != this.queryInstance) {
+ return;
+ }
if (result) {
addCallback(this, result);
return;
}
- result = this._engineSearchResult(queryContext);
+ result = await this._engineSearchResult(queryContext);
if (instance != this.queryInstance) {
return;
}
@@ -230,7 +231,7 @@ class ProviderHeuristicFallback extends UrlbarProvider {
return result;
}
- _searchModeKeywordResult(queryContext) {
+ async _searchModeKeywordResult(queryContext) {
if (!queryContext.tokens.length) {
return null;
}
@@ -268,7 +269,7 @@ class ProviderHeuristicFallback extends UrlbarProvider {
let result;
if (queryContext.restrictSource == UrlbarUtils.RESULT_SOURCE.SEARCH) {
- result = this._engineSearchResult(queryContext, firstToken);
+ result = await this._engineSearchResult(queryContext, firstToken);
} else {
result = new lazy.UrlbarResult(
UrlbarUtils.RESULT_TYPE.SEARCH,
@@ -283,7 +284,7 @@ class ProviderHeuristicFallback extends UrlbarProvider {
return result;
}
- _engineSearchResult(queryContext, keyword = null) {
+ async _engineSearchResult(queryContext, keyword = null) {
let engine;
if (queryContext.searchMode?.engineName) {
engine = lazy.UrlbarSearchUtils.getEngineByName(
@@ -317,7 +318,7 @@ class ProviderHeuristicFallback extends UrlbarProvider {
UrlbarUtils.RESULT_SOURCE.SEARCH,
...lazy.UrlbarResult.payloadAndSimpleHighlights(queryContext.tokens, {
engine: [engine.name, UrlbarUtils.HIGHLIGHT.TYPED],
- icon: engine.getIconURL(),
+ icon: await engine.getIconURL(),
query: [query, UrlbarUtils.HIGHLIGHT.NONE],
keyword: keyword ? [keyword, UrlbarUtils.HIGHLIGHT.NONE] : undefined,
})
diff --git a/browser/components/urlbar/UrlbarProviderInputHistory.sys.mjs b/browser/components/urlbar/UrlbarProviderInputHistory.sys.mjs
index c1f0cfb289..f929a1c003 100644
--- a/browser/components/urlbar/UrlbarProviderInputHistory.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderInputHistory.sys.mjs
@@ -23,16 +23,6 @@ ChromeUtils.defineESModuleGetters(lazy, {
UrlbarResult: "resource:///modules/UrlbarResult.sys.mjs",
});
-// Sqlite result row index constants.
-const QUERYINDEX = {
- URL: 0,
- TITLE: 1,
- BOOKMARKED: 2,
- BOOKMARKTITLE: 3,
- TAGS: 4,
- SWITCHTAB: 8,
-};
-
// Constants to support an alternative frecency algorithm.
const PAGES_USE_ALT_FRECENCY = Services.prefs.getBoolPref(
"places.frecency.pages.alternative.featureGate",
@@ -42,23 +32,20 @@ const PAGES_FRECENCY_FIELD = PAGES_USE_ALT_FRECENCY
? "alt_frecency"
: "frecency";
-// This SQL query fragment provides the following:
-// - whether the entry is bookmarked (QUERYINDEX_BOOKMARKED)
-// - the bookmark title, if it is a bookmark (QUERYINDEX_BOOKMARKTITLE)
-// - the tags associated with a bookmarked entry (QUERYINDEX_TAGS)
-const SQL_BOOKMARK_TAGS_FRAGMENT = `EXISTS(SELECT 1 FROM moz_bookmarks WHERE fk = h.id) AS bookmarked,
- ( SELECT title FROM moz_bookmarks WHERE fk = h.id AND title NOTNULL
- ORDER BY lastModified DESC LIMIT 1
- ) AS btitle,
- ( SELECT GROUP_CONCAT(t.title ORDER BY t.title)
- FROM moz_bookmarks b
- JOIN moz_bookmarks t ON t.id = +b.parent AND t.parent = :parent
- WHERE b.fk = h.id
- ) AS tags`;
-
const SQL_ADAPTIVE_QUERY = `/* do not warn (bug 487789) */
- SELECT h.url, h.title, ${SQL_BOOKMARK_TAGS_FRAGMENT}, h.visit_count,
- h.typed, h.id, t.open_count, ${PAGES_FRECENCY_FIELD}
+ SELECT h.url,
+ h.title,
+ EXISTS(SELECT 1 FROM moz_bookmarks WHERE fk = h.id) AS bookmarked,
+ ( SELECT title FROM moz_bookmarks WHERE fk = h.id AND title NOTNULL
+ ORDER BY lastModified DESC LIMIT 1
+ ) AS bookmark_title,
+ ( SELECT GROUP_CONCAT(t.title ORDER BY t.title)
+ FROM moz_bookmarks b
+ JOIN moz_bookmarks t ON t.id = +b.parent AND t.parent = :parent
+ WHERE b.fk = h.id
+ ) AS tags,
+ t.open_count,
+ t.userContextId
FROM (
SELECT ROUND(MAX(use_count) * (1 + (input = :search_string)), 1) AS rank,
place_id
@@ -71,7 +58,7 @@ const SQL_ADAPTIVE_QUERY = `/* do not warn (bug 487789) */
ON t.url = h.url
AND (t.userContextId = :userContextId OR (t.userContextId <> -1 AND :userContextId IS NULL))
WHERE AUTOCOMPLETE_MATCH(NULL, h.url,
- IFNULL(btitle, h.title), tags,
+ IFNULL(bookmark_title, h.title), tags,
h.visit_count, h.typed, bookmarked,
t.open_count,
:matchBehavior, :searchBehavior,
@@ -142,14 +129,14 @@ class ProviderInputHistory extends UrlbarProvider {
}
for (let row of rows) {
- const url = row.getResultByIndex(QUERYINDEX.URL);
- const openPageCount = row.getResultByIndex(QUERYINDEX.SWITCHTAB) || 0;
- const historyTitle = row.getResultByIndex(QUERYINDEX.TITLE) || "";
- const bookmarked = row.getResultByIndex(QUERYINDEX.BOOKMARKED);
+ const url = row.getResultByName("url");
+ const openPageCount = row.getResultByName("open_count") || 0;
+ const historyTitle = row.getResultByName("title") || "";
+ const bookmarked = row.getResultByName("bookmarked");
const bookmarkTitle = bookmarked
- ? row.getResultByIndex(QUERYINDEX.BOOKMARKTITLE)
+ ? row.getResultByName("bookmark_title")
: null;
- const tags = row.getResultByIndex(QUERYINDEX.TAGS) || "";
+ const tags = row.getResultByName("tags") || "";
let resultTitle = historyTitle;
if (openPageCount > 0 && lazy.UrlbarPrefs.get("suggest.openpage")) {
@@ -164,7 +151,7 @@ class ProviderInputHistory extends UrlbarProvider {
url: [url, UrlbarUtils.HIGHLIGHT.TYPED],
title: [resultTitle, UrlbarUtils.HIGHLIGHT.TYPED],
icon: UrlbarUtils.getIconForUrl(url),
- userContextId: queryContext.userContextId || 0,
+ userContextId: row.getResultByName("userContextId") || 0,
})
);
addCallback(this, result);
diff --git a/browser/components/urlbar/UrlbarProviderInterventions.sys.mjs b/browser/components/urlbar/UrlbarProviderInterventions.sys.mjs
index a8185b8bea..08b4ea36b7 100644
--- a/browser/components/urlbar/UrlbarProviderInterventions.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderInterventions.sys.mjs
@@ -544,7 +544,7 @@ class ProviderInterventions extends UrlbarProvider {
);
}
- async _setCurrentTipFromAppUpdaterStatus(waitForCheck) {
+ async _setCurrentTipFromAppUpdaterStatus() {
// The update tips depend on the app's update status, so check for updates
// now (if we haven't already checked within the update-check period). If
// we're running in an xpcshell test, then checkForBrowserUpdate's attempt
@@ -667,11 +667,8 @@ class ProviderInterventions extends UrlbarProvider {
/**
* Cancels a running query,
- *
- * @param {UrlbarQueryContext} queryContext the query context object to cancel
- * query for.
*/
- cancelQuery(queryContext) {
+ cancelQuery() {
// If we're waiting for appUpdater to finish its update check,
// this._appUpdaterListener will be defined. We can stop listening now.
if (this._appUpdaterListener) {
diff --git a/browser/components/urlbar/UrlbarProviderOmnibox.sys.mjs b/browser/components/urlbar/UrlbarProviderOmnibox.sys.mjs
index 1658101236..351e8ff60b 100644
--- a/browser/components/urlbar/UrlbarProviderOmnibox.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderOmnibox.sys.mjs
@@ -90,12 +90,10 @@ class ProviderOmnibox extends UrlbarProvider {
/**
* Gets the provider's priority.
*
- * @param {UrlbarQueryContext} queryContext
- * The query context object.
* @returns {number}
* The provider's priority for the given query.
*/
- getPriority(queryContext) {
+ getPriority() {
return 0;
}
diff --git a/browser/components/urlbar/UrlbarProviderOpenTabs.sys.mjs b/browser/components/urlbar/UrlbarProviderOpenTabs.sys.mjs
index a6941cbd0a..8e76ad53db 100644
--- a/browser/components/urlbar/UrlbarProviderOpenTabs.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderOpenTabs.sys.mjs
@@ -27,6 +27,12 @@ ChromeUtils.defineLazyGetter(lazy, "logger", () =>
const PRIVATE_USER_CONTEXT_ID = -1;
/**
+ * Maps the open tabs by userContextId.
+ * Each entry is a Map of url => count.
+ */
+var gOpenTabUrls = new Map();
+
+/**
* Class used to create the provider.
*/
export class UrlbarProviderOpenTabs extends UrlbarProvider {
@@ -57,10 +63,9 @@ export class UrlbarProviderOpenTabs extends UrlbarProvider {
* If this method returns false, the providers manager won't start a query
* with this provider, to save on resources.
*
- * @param {UrlbarQueryContext} queryContext The query context object
* @returns {boolean} Whether this provider should be invoked for the search.
*/
- isActive(queryContext) {
+ isActive() {
// For now we don't actually use this provider to query open tabs, instead
// we join the temp table in UrlbarProviderPlaces.
return false;
@@ -74,26 +79,59 @@ export class UrlbarProviderOpenTabs extends UrlbarProvider {
static memoryTableInitialized = false;
/**
- * Maps the open tabs by userContextId.
- * Each entry is a Map of url => count.
- */
- static _openTabs = new Map();
-
- /**
* Return unique urls that are open for given user context id.
*
- * @param {integer} userContextId Containers user context id
+ * @param {integer|string} userContextId Containers user context id
* @param {boolean} [isInPrivateWindow] In private browsing window or not
* @returns {Array} urls
*/
- static getOpenTabs(userContextId, isInPrivateWindow = false) {
+ static getOpenTabUrlsForUserContextId(
+ userContextId,
+ isInPrivateWindow = false
+ ) {
+ // It's fairly common to retrieve the value from an HTML attribute, that
+ // means we're getting sometimes a string, sometimes an integer. As we're
+ // using this as key of a Map, we must treat it consistently.
+ userContextId = parseInt(userContextId);
userContextId = UrlbarProviderOpenTabs.getUserContextIdForOpenPagesTable(
userContextId,
isInPrivateWindow
);
- return Array.from(
- UrlbarProviderOpenTabs._openTabs.get(userContextId)?.keys() ?? []
- );
+ return Array.from(gOpenTabUrls.get(userContextId)?.keys() ?? []);
+ }
+
+ /**
+ * Return unique urls that are open, along with their user context id.
+ *
+ * @param {boolean} [isInPrivateWindow] Whether it's for a private browsing window
+ * @returns {Map} { url => Set({userContextIds}) }
+ */
+ static getOpenTabUrls(isInPrivateWindow = false) {
+ let uniqueUrls = new Map();
+ if (isInPrivateWindow) {
+ let urls = UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId(
+ PRIVATE_USER_CONTEXT_ID,
+ true
+ );
+ for (let url of urls) {
+ uniqueUrls.set(url, new Set([PRIVATE_USER_CONTEXT_ID]));
+ }
+ } else {
+ for (let [userContextId, urls] of gOpenTabUrls) {
+ if (userContextId == PRIVATE_USER_CONTEXT_ID) {
+ continue;
+ }
+ for (let url of urls.keys()) {
+ let userContextIds = uniqueUrls.get(url);
+ if (!userContextIds) {
+ userContextIds = new Set();
+ uniqueUrls.set(url, userContextIds);
+ }
+ userContextIds.add(userContextId);
+ }
+ }
+ }
+ return uniqueUrls;
}
/**
@@ -155,7 +193,7 @@ export class UrlbarProviderOpenTabs extends UrlbarProvider {
// Must be set before populating.
UrlbarProviderOpenTabs.memoryTableInitialized = true;
// Populate the table with the current cached tabs.
- for (let [userContextId, entries] of UrlbarProviderOpenTabs._openTabs) {
+ for (let [userContextId, entries] of gOpenTabUrls) {
for (let [url, count] of entries) {
await addToMemoryTable(url, userContextId, count).catch(
console.error
@@ -168,10 +206,22 @@ export class UrlbarProviderOpenTabs extends UrlbarProvider {
* Registers a tab as open.
*
* @param {string} url Address of the tab
- * @param {integer} userContextId Containers user context id
+ * @param {integer|string} userContextId Containers user context id
* @param {boolean} isInPrivateWindow In private browsing window or not
*/
static async registerOpenTab(url, userContextId, isInPrivateWindow) {
+ // It's fairly common to retrieve the value from an HTML attribute, that
+ // means we're getting sometimes a string, sometimes an integer. As we're
+ // using this as key of a Map, we must treat it consistently.
+ userContextId = parseInt(userContextId);
+ if (!Number.isInteger(userContextId)) {
+ lazy.logger.error("Invalid userContextId while registering openTab: ", {
+ url,
+ userContextId,
+ isInPrivateWindow,
+ });
+ return;
+ }
lazy.logger.info("Registering openTab: ", {
url,
userContextId,
@@ -182,10 +232,10 @@ export class UrlbarProviderOpenTabs extends UrlbarProvider {
isInPrivateWindow
);
- let entries = UrlbarProviderOpenTabs._openTabs.get(userContextId);
+ let entries = gOpenTabUrls.get(userContextId);
if (!entries) {
entries = new Map();
- UrlbarProviderOpenTabs._openTabs.set(userContextId, entries);
+ gOpenTabUrls.set(userContextId, entries);
}
entries.set(url, (entries.get(url) ?? 0) + 1);
await addToMemoryTable(url, userContextId).catch(console.error);
@@ -195,10 +245,14 @@ export class UrlbarProviderOpenTabs extends UrlbarProvider {
* Unregisters a previously registered open tab.
*
* @param {string} url Address of the tab
- * @param {integer} userContextId Containers user context id
+ * @param {integer|string} userContextId Containers user context id
* @param {boolean} isInPrivateWindow In private browsing window or not
*/
static async unregisterOpenTab(url, userContextId, isInPrivateWindow) {
+ // It's fairly common to retrieve the value from an HTML attribute, that
+ // means we're getting sometimes a string, sometimes an integer. As we're
+ // using this as key of a Map, we must treat it consistently.
+ userContextId = parseInt(userContextId);
lazy.logger.info("Unregistering openTab: ", {
url,
userContextId,
@@ -209,7 +263,7 @@ export class UrlbarProviderOpenTabs extends UrlbarProvider {
isInPrivateWindow
);
- let entries = UrlbarProviderOpenTabs._openTabs.get(userContextId);
+ let entries = gOpenTabUrls.get(userContextId);
if (entries) {
let oldCount = entries.get(url);
if (oldCount == 0) {
@@ -218,6 +272,8 @@ export class UrlbarProviderOpenTabs extends UrlbarProvider {
}
if (oldCount == 1) {
entries.delete(url);
+ // Note: `entries` might be an empty Map now, though we don't remove it
+ // from `gOpenTabUrls` as it's likely to be reused later.
} else {
entries.set(url, oldCount - 1);
}
diff --git a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
index 3c54102abb..650acd1730 100644
--- a/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs
@@ -1472,10 +1472,8 @@ class ProviderPlaces extends UrlbarProvider {
/**
* Cancels a running query.
- *
- * @param {object} queryContext The query context object
*/
- cancelQuery(queryContext) {
+ cancelQuery() {
if (this._currentSearch) {
this._currentSearch.stop();
}
diff --git a/browser/components/urlbar/UrlbarProviderPrivateSearch.sys.mjs b/browser/components/urlbar/UrlbarProviderPrivateSearch.sys.mjs
index 9761053477..d672953248 100644
--- a/browser/components/urlbar/UrlbarProviderPrivateSearch.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderPrivateSearch.sys.mjs
@@ -110,6 +110,7 @@ class ProviderPrivateSearch extends UrlbarProvider {
logger: this.logger,
}).promise;
+ let icon = await engine.getIconURL();
if (instance != this.queryInstance) {
return;
}
@@ -120,7 +121,7 @@ class ProviderPrivateSearch extends UrlbarProvider {
...lazy.UrlbarResult.payloadAndSimpleHighlights(queryContext.tokens, {
engine: [engine.name, UrlbarUtils.HIGHLIGHT.TYPED],
query: [searchString, UrlbarUtils.HIGHLIGHT.NONE],
- icon: engine.getIconURL(),
+ icon,
inPrivateWindow: true,
isPrivateEngine,
})
diff --git a/browser/components/urlbar/UrlbarProviderQuickActions.sys.mjs b/browser/components/urlbar/UrlbarProviderQuickActions.sys.mjs
index 83eea9fcf6..f199b6b892 100644
--- a/browser/components/urlbar/UrlbarProviderQuickActions.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderQuickActions.sys.mjs
@@ -40,9 +40,6 @@ class ProviderQuickActions extends UrlbarProvider {
constructor() {
super();
lazy.UrlbarResult.addDynamicResultType(DYNAMIC_TYPE_NAME);
- Services.tm.idleDispatchToMainThread(() =>
- lazy.QuickActionsLoaderDefault.load()
- );
}
/**
@@ -97,6 +94,7 @@ class ProviderQuickActions extends UrlbarProvider {
* @returns {Promise}
*/
async startQuery(queryContext, addCallback) {
+ await lazy.QuickActionsLoaderDefault.ensureLoaded();
let input = queryContext.trimmedSearchString.toLowerCase();
if (
diff --git a/browser/components/urlbar/UrlbarProviderQuickSuggest.sys.mjs b/browser/components/urlbar/UrlbarProviderQuickSuggest.sys.mjs
index 202e51c9e5..78e254616e 100644
--- a/browser/components/urlbar/UrlbarProviderQuickSuggest.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderQuickSuggest.sys.mjs
@@ -128,11 +128,15 @@ class ProviderQuickSuggest extends UrlbarProvider {
// Trim only the start of the search string because a trailing space can
// affect the suggestions.
let trimmedSearchString = queryContext.searchString.trimStart();
- if (!trimmedSearchString) {
+
+ // Per product requirements, at least two characters must be typed to
+ // trigger a Suggest suggestion. Suggestion keywords should always be at
+ // least two characters long, but we check here anyway to be safe. Note we
+ // called `trimStart()` above, so we only call `trimEnd()` here.
+ if (trimmedSearchString.trimEnd().length < 2) {
return false;
}
this._trimmedSearchString = trimmedSearchString;
-
return true;
}
@@ -773,9 +777,6 @@ class ProviderQuickSuggest extends UrlbarProvider {
* @param {UrlbarResult} options.result
* The quick suggest result related to the engagement, or null if no result
* was present.
- * @param {string} options.resultSelType
- * If an element in the result's row was clicked, this should be its
- * `selType`. Otherwise it should be an empty string.
* @param {boolean} options.resultClicked
* True if the main part of the result's row was clicked; false if a button
* like help or dismiss was clicked or if no part of the row was clicked.
@@ -786,7 +787,6 @@ class ProviderQuickSuggest extends UrlbarProvider {
#recordNavSuggestionTelemetry({
queryContext,
result,
- resultSelType,
resultClicked,
details,
}) {
@@ -829,11 +829,8 @@ class ProviderQuickSuggest extends UrlbarProvider {
/**
* Cancels the current query.
- *
- * @param {UrlbarQueryContext} queryContext
- * The query context.
*/
- cancelQuery(queryContext) {
+ cancelQuery() {
// Cancel the Rust query.
let backend = lazy.QuickSuggest.getFeature("SuggestBackendRust");
if (backend?.isEnabled) {
diff --git a/browser/components/urlbar/UrlbarProviderQuickSuggestContextualOptIn.sys.mjs b/browser/components/urlbar/UrlbarProviderQuickSuggestContextualOptIn.sys.mjs
index 67a4e39a86..48006d09c0 100644
--- a/browser/components/urlbar/UrlbarProviderQuickSuggestContextualOptIn.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderQuickSuggestContextualOptIn.sys.mjs
@@ -129,7 +129,7 @@ class ProviderQuickSuggestContextualOptIn extends UrlbarProvider {
);
}
- getPriority(queryContext) {
+ getPriority() {
return lazy.UrlbarProviderTopSites.PRIORITY;
}
@@ -138,13 +138,9 @@ class ProviderQuickSuggestContextualOptIn extends UrlbarProvider {
* the view of one of the results of the provider. It should return an object
* describing the view update.
*
- * @param {UrlbarResult} result The result whose view will be updated.
- * @param {Map} idsByName
- * A Map from an element's name, as defined by the provider; to its ID in
- * the DOM, as defined by the browser.
* @returns {object} An object describing the view update.
*/
- getViewUpdate(result, idsByName) {
+ getViewUpdate() {
let alternativeCopy = lazy.UrlbarPrefs.get(
"quicksuggest.contextualOptIn.sayHello"
);
diff --git a/browser/components/urlbar/UrlbarProviderRemoteTabs.sys.mjs b/browser/components/urlbar/UrlbarProviderRemoteTabs.sys.mjs
index 1b84750b25..80614dcbe3 100644
--- a/browser/components/urlbar/UrlbarProviderRemoteTabs.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderRemoteTabs.sys.mjs
@@ -167,7 +167,7 @@ class ProviderRemoteTabs extends UrlbarProvider {
);
// We want to return the most relevant remote tabs and thus the most
- // recent ones. While SyncedTabs.jsm returns tabs that are sorted by
+ // recent ones. While SyncedTabs.sys.mjs returns tabs that are sorted by
// most recent client, then most recent tab, we can do better. For
// example, the most recent client might have one recent tab and then
// many very stale tabs. Those very stale tabs will push out more recent
diff --git a/browser/components/urlbar/UrlbarProviderSearchSuggestions.sys.mjs b/browser/components/urlbar/UrlbarProviderSearchSuggestions.sys.mjs
index 636524ea51..8cb3532d94 100644
--- a/browser/components/urlbar/UrlbarProviderSearchSuggestions.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderSearchSuggestions.sys.mjs
@@ -317,10 +317,8 @@ class ProviderSearchSuggestions extends UrlbarProvider {
/**
* Cancels a running query.
- *
- * @param {object} queryContext The query context object
*/
- cancelQuery(queryContext) {
+ cancelQuery() {
if (this._suggestionsController) {
this._suggestionsController.stop();
this._suggestionsController = null;
@@ -508,7 +506,7 @@ class ProviderSearchSuggestions extends UrlbarProvider {
trending: entry.trending,
description: entry.description || undefined,
query: [searchString.trim(), UrlbarUtils.HIGHLIGHT.NONE],
- icon: !entry.value ? engine.getIconURL() : entry.icon,
+ icon: !entry.value ? await engine.getIconURL() : entry.icon,
};
if (entry.trending) {
diff --git a/browser/components/urlbar/UrlbarProviderSearchTips.sys.mjs b/browser/components/urlbar/UrlbarProviderSearchTips.sys.mjs
index 209453263a..b19528619c 100644
--- a/browser/components/urlbar/UrlbarProviderSearchTips.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderSearchTips.sys.mjs
@@ -160,20 +160,18 @@ class ProviderSearchTips extends UrlbarProvider {
* If this method returns false, the providers manager won't start a query
* with this provider, to save on resources.
*
- * @param {UrlbarQueryContext} queryContext The query context object
* @returns {boolean} Whether this provider should be invoked for the search.
*/
- isActive(queryContext) {
+ isActive() {
return this.currentTip && lazy.cfrFeaturesUserPref;
}
/**
* Gets the provider's priority.
*
- * @param {UrlbarQueryContext} queryContext The query context object
* @returns {number} The provider's priority for the given query.
*/
- getPriority(queryContext) {
+ getPriority() {
return this.PRIORITY;
}
@@ -194,6 +192,7 @@ class ProviderSearchTips extends UrlbarProvider {
this.currentTip = TIPS.NONE;
let defaultEngine = await Services.search.getDefault();
+ let icon = await defaultEngine.getIconURL();
if (instance != this.queryInstance) {
return;
}
@@ -204,7 +203,7 @@ class ProviderSearchTips extends UrlbarProvider {
{
type: tip,
buttons: [{ l10n: { id: "urlbar-search-tips-confirm" } }],
- icon: defaultEngine.getIconURL(),
+ icon,
}
);
diff --git a/browser/components/urlbar/UrlbarProviderTabToSearch.sys.mjs b/browser/components/urlbar/UrlbarProviderTabToSearch.sys.mjs
index a328ea0922..9aabef3d19 100644
--- a/browser/components/urlbar/UrlbarProviderTabToSearch.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderTabToSearch.sys.mjs
@@ -143,10 +143,9 @@ class ProviderTabToSearch extends UrlbarProvider {
/**
* Gets the provider's priority.
*
- * @param {UrlbarQueryContext} queryContext The query context object
* @returns {number} The provider's priority for the given query.
*/
- getPriority(queryContext) {
+ getPriority() {
return 0;
}
@@ -156,12 +155,9 @@ class ProviderTabToSearch extends UrlbarProvider {
* describing the view update.
*
* @param {UrlbarResult} result The result whose view will be updated.
- * @param {Map} idsByName
- * A Map from an element's name, as defined by the provider; to its ID in
- * the DOM, as defined by the browser.
* @returns {object} An object describing the view update.
*/
- getViewUpdate(result, idsByName) {
+ getViewUpdate(result) {
return {
icon: {
attributes: {
@@ -202,10 +198,8 @@ class ProviderTabToSearch extends UrlbarProvider {
*
* @param {UrlbarResult} result
* The result that was selected.
- * @param {Element} element
- * The element in the result's view that was selected.
*/
- onSelection(result, element) {
+ onSelection(result) {
// We keep track of the number of times the user interacts with
// tab-to-search onboarding results so we stop showing them after
// `tabToSearch.onboard.interactionsLeft` interactions.
@@ -232,7 +226,7 @@ class ProviderTabToSearch extends UrlbarProvider {
}
}
- onEngagement(state, queryContext, details, controller) {
+ onEngagement(state, queryContext, details) {
let { result, element } = details;
if (
result?.providerName == this.name &&
@@ -354,7 +348,6 @@ class ProviderTabToSearch extends UrlbarProvider {
searchStr,
{
matchAllDomainLevels: true,
- onlyEnabled: true,
}
);
if (!engines.length) {
diff --git a/browser/components/urlbar/UrlbarProviderTokenAliasEngines.sys.mjs b/browser/components/urlbar/UrlbarProviderTokenAliasEngines.sys.mjs
index 8b71c2d8e5..b3a91bcbe4 100644
--- a/browser/components/urlbar/UrlbarProviderTokenAliasEngines.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderTokenAliasEngines.sys.mjs
@@ -98,8 +98,8 @@ class ProviderTokenAliasEngines extends UrlbarProvider {
// If the user is typing a potential engine name, autofill it.
if (lazy.UrlbarPrefs.get("autoFill") && queryContext.allowAutofill) {
- let result = this._getAutofillResult(queryContext);
- if (result) {
+ let result = await this._getAutofillResult(queryContext);
+ if (result && instance == this.queryInstance) {
this._autofillData = { result, instance };
return true;
}
@@ -127,6 +127,7 @@ class ProviderTokenAliasEngines extends UrlbarProvider {
addCallback(this, this._autofillData.result);
}
+ let instance = this.queryInstance;
for (let { engine, tokenAliases } of this._engines) {
if (
tokenAliases[0].startsWith(queryContext.trimmedSearchString) &&
@@ -139,10 +140,13 @@ class ProviderTokenAliasEngines extends UrlbarProvider {
engine: [engine.name, UrlbarUtils.HIGHLIGHT.TYPED],
keyword: [tokenAliases[0], UrlbarUtils.HIGHLIGHT.TYPED],
query: ["", UrlbarUtils.HIGHLIGHT.TYPED],
- icon: engine.getIconURL(),
+ icon: await engine.getIconURL(),
providesSearchMode: true,
})
);
+ if (instance != this.queryInstance) {
+ break;
+ }
addCallback(this, result);
}
}
@@ -153,25 +157,22 @@ class ProviderTokenAliasEngines extends UrlbarProvider {
/**
* Gets the provider's priority.
*
- * @param {UrlbarQueryContext} queryContext The query context object
* @returns {number} The provider's priority for the given query.
*/
- getPriority(queryContext) {
+ getPriority() {
return this.PRIORITY;
}
/**
* Cancels a running query.
- *
- * @param {object} queryContext The query context object
*/
- cancelQuery(queryContext) {
+ cancelQuery() {
if (this._autofillData?.instance == this.queryInstance) {
this._autofillData = null;
}
}
- _getAutofillResult(queryContext) {
+ async _getAutofillResult(queryContext) {
let lowerCaseSearchString = queryContext.searchString.toLowerCase();
// The user is typing a specific engine. We should show a heuristic result.
@@ -206,7 +207,7 @@ class ProviderTokenAliasEngines extends UrlbarProvider {
engine: [engine.name, UrlbarUtils.HIGHLIGHT.TYPED],
keyword: [aliasPreservingUserCase, UrlbarUtils.HIGHLIGHT.TYPED],
query: ["", UrlbarUtils.HIGHLIGHT.TYPED],
- icon: engine.getIconURL(),
+ icon: await engine.getIconURL(),
providesSearchMode: true,
}
)
diff --git a/browser/components/urlbar/UrlbarProviderTopSites.sys.mjs b/browser/components/urlbar/UrlbarProviderTopSites.sys.mjs
index fd178769c8..e9d968f20f 100644
--- a/browser/components/urlbar/UrlbarProviderTopSites.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderTopSites.sys.mjs
@@ -96,10 +96,9 @@ class ProviderTopSites extends UrlbarProvider {
/**
* Gets the provider's priority.
*
- * @param {UrlbarQueryContext} queryContext The query context object
* @returns {number} The provider's priority for the given query.
*/
- getPriority(queryContext) {
+ getPriority() {
return this.PRIORITY;
}
@@ -140,7 +139,7 @@ class ProviderTopSites extends UrlbarProvider {
}
// This is done here, rather than in the global scope, because
- // TOP_SITES_DEFAULT_ROWS causes the import of Reducers.jsm, and we want to
+ // TOP_SITES_DEFAULT_ROWS causes the import of Reducers.sys.mjs, and we want to
// do that only when actually querying for Top Sites.
if (this.topSitesRows === undefined) {
XPCOMUtils.defineLazyPreferenceGetter(
@@ -199,6 +198,24 @@ class ProviderTopSites extends UrlbarProvider {
this.sponsoredSites = sponsoredSites;
}
+ let tabUrlsToContextIds;
+ if (lazy.UrlbarPrefs.get("suggest.openpage")) {
+ if (lazy.UrlbarPrefs.get("switchTabs.searchAllContainers")) {
+ tabUrlsToContextIds = lazy.UrlbarProviderOpenTabs.getOpenTabUrls(
+ queryContext.isPrivate
+ );
+ } else {
+ // Build an object compatible with the output of getOpenTabs.
+ tabUrlsToContextIds = new Map();
+ for (let url of lazy.UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId(
+ queryContext.userContextId,
+ queryContext.isPrivate
+ )) {
+ tabUrlsToContextIds.set(url, new Set([queryContext.userContextId]));
+ }
+ }
+ }
+
for (let site of sites) {
switch (site.type) {
case "url": {
@@ -208,49 +225,60 @@ class ProviderTopSites extends UrlbarProvider {
icon: site.favicon,
isPinned: site.isPinned,
isSponsored: site.isSponsored,
- sendAttributionRequest: site.sendAttributionRequest,
};
- if (site.isSponsored) {
- payload = {
- ...payload,
- sponsoredTileId: site.sponsoredTileId,
- sponsoredClickUrl: site.sponsoredClickUrl,
- };
+
+ // Fuzzy match both the URL as-is, and the URL without ref, then
+ // generate a merged Set.
+ if (tabUrlsToContextIds) {
+ let tabUserContextIds = new Set([
+ ...(tabUrlsToContextIds.get(site.url) ?? []),
+ ...(tabUrlsToContextIds.get(site.url.replace(/#.*$/, "")) ?? []),
+ ]);
+ if (tabUserContextIds.size) {
+ for (let userContextId of tabUserContextIds) {
+ payload.userContextId = userContextId;
+ let result = new lazy.UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
+ UrlbarUtils.RESULT_SOURCE.TABS,
+ ...lazy.UrlbarResult.payloadAndSimpleHighlights(
+ queryContext.tokens,
+ payload
+ )
+ );
+ addCallback(this, result);
+ }
+ break;
+ }
}
- let result = new lazy.UrlbarResult(
- UrlbarUtils.RESULT_TYPE.URL,
- UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
- ...lazy.UrlbarResult.payloadAndSimpleHighlights(
- queryContext.tokens,
- payload
- )
- );
- let tabs;
- if (lazy.UrlbarPrefs.get("suggest.openpage")) {
- tabs = lazy.UrlbarProviderOpenTabs.getOpenTabs(
- queryContext.userContextId || 0,
- queryContext.isPrivate
- );
+ if (site.isSponsored) {
+ payload.sponsoredTileId = site.sponsoredTileId;
+ payload.sponsoredClickUrl = site.sponsoredClickUrl;
}
+ payload.sendAttributionRequest = site.sendAttributionRequest;
- if (tabs && tabs.includes(site.url.replace(/#.*$/, ""))) {
- result.type = UrlbarUtils.RESULT_TYPE.TAB_SWITCH;
- result.source = UrlbarUtils.RESULT_SOURCE.TABS;
- } else if (lazy.UrlbarPrefs.get("suggest.bookmark")) {
+ let resultSource = UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL;
+ if (lazy.UrlbarPrefs.get("suggest.bookmark")) {
let bookmark = await lazy.PlacesUtils.bookmarks.fetch({
- url: new URL(result.payload.url),
+ url: new URL(payload.url),
});
+ // Check if query has been cancelled.
+ if (instance != this.queryInstance) {
+ break;
+ }
if (bookmark) {
- result.source = UrlbarUtils.RESULT_SOURCE.BOOKMARKS;
+ resultSource = UrlbarUtils.RESULT_SOURCE.BOOKMARKS;
}
}
- // Our query has been cancelled.
- if (instance != this.queryInstance) {
- break;
- }
-
+ let result = new lazy.UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.URL,
+ resultSource,
+ ...lazy.UrlbarResult.payloadAndSimpleHighlights(
+ queryContext.tokens,
+ payload
+ )
+ );
addCallback(this, result);
break;
}
@@ -305,7 +333,7 @@ class ProviderTopSites extends UrlbarProvider {
}
}
- onEngagement(state, queryContext, details, controller) {
+ onEngagement(state, queryContext) {
if (
!queryContext.isPrivate &&
this.sponsoredSites &&
diff --git a/browser/components/urlbar/UrlbarProviderUnitConversion.sys.mjs b/browser/components/urlbar/UrlbarProviderUnitConversion.sys.mjs
index 02408a4c6b..98c4d025e4 100644
--- a/browser/components/urlbar/UrlbarProviderUnitConversion.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderUnitConversion.sys.mjs
@@ -169,7 +169,7 @@ class ProviderUnitConversion extends UrlbarProvider {
addCallback(this, result);
}
- onEngagement(state, queryContext, details, controller) {
+ onEngagement(state, queryContext, details) {
let { result, element } = details;
if (result?.providerName == this.name) {
const { textContent } = element.querySelector(
diff --git a/browser/components/urlbar/UrlbarProviderWeather.sys.mjs b/browser/components/urlbar/UrlbarProviderWeather.sys.mjs
index fc1b1ca86d..24342fecab 100644
--- a/browser/components/urlbar/UrlbarProviderWeather.sys.mjs
+++ b/browser/components/urlbar/UrlbarProviderWeather.sys.mjs
@@ -157,13 +157,9 @@ class ProviderWeather extends UrlbarProvider {
*
* @param {UrlbarResult} result
* The result whose view will be updated.
- * @param {Map} idsByName
- * A Map from an element's name, as defined by the provider; to its ID in
- * the DOM, as defined by the browser.This is useful if parts of the view
- * update depend on element IDs, as some ARIA attributes do.
* @returns {object} An object describing the view update.
*/
- getViewUpdate(result, idsByName) {
+ getViewUpdate(result) {
return lazy.QuickSuggest.weather.getViewUpdate(result);
}
diff --git a/browser/components/urlbar/UrlbarSearchOneOffs.sys.mjs b/browser/components/urlbar/UrlbarSearchOneOffs.sys.mjs
index cdbb3aea53..48ae3b14b9 100644
--- a/browser/components/urlbar/UrlbarSearchOneOffs.sys.mjs
+++ b/browser/components/urlbar/UrlbarSearchOneOffs.sys.mjs
@@ -27,7 +27,7 @@ export class UrlbarSearchOneOffs extends SearchOneOffs {
this.view = view;
this.input = view.input;
lazy.UrlbarPrefs.addObserver(this);
- // Override the SearchOneOffs.jsm value for the Address Bar.
+ // Override the SearchOneOffs.sys.mjs value for the Address Bar.
this.disableOneOffsHorizontalKeyNavigation = true;
this._webEngines = [];
this.addEventListener("rebuild", this);
@@ -495,8 +495,8 @@ export class UrlbarSearchOneOffs extends SearchOneOffs {
* @param {Array} addEngines
* The engines that can be added.
*/
- _rebuildEngineList(engines, addEngines) {
- super._rebuildEngineList(engines, addEngines);
+ async _rebuildEngineList(engines, addEngines) {
+ await super._rebuildEngineList(engines, addEngines);
for (let { source, pref, restrict } of lazy.UrlbarUtils
.LOCAL_SEARCH_MODES) {
diff --git a/browser/components/urlbar/UrlbarSearchUtils.sys.mjs b/browser/components/urlbar/UrlbarSearchUtils.sys.mjs
index c574e8f139..30cbdb73c4 100644
--- a/browser/components/urlbar/UrlbarSearchUtils.sys.mjs
+++ b/browser/components/urlbar/UrlbarSearchUtils.sys.mjs
@@ -65,16 +65,10 @@ class SearchUtils {
* Match at each sub domain, for example "a.b.c.com" will be matched at
* "a.b.c.com", "b.c.com", and "c.com". Partial matches are always returned
* after perfect matches.
- * @param {boolean} [options.onlyEnabled]
- * Match only engines that have not been disabled on the Search Preferences
- * list.
* @returns {Array<nsISearchEngine>}
* An array of all matching engines. An empty array if there are none.
*/
- async enginesForDomainPrefix(
- prefix,
- { matchAllDomainLevels = false, onlyEnabled = false } = {}
- ) {
+ async enginesForDomainPrefix(prefix, { matchAllDomainLevels = false } = {}) {
try {
await this.init();
} catch {
diff --git a/browser/components/urlbar/UrlbarUtils.sys.mjs b/browser/components/urlbar/UrlbarUtils.sys.mjs
index c7d595635b..2bbb5d1ab0 100644
--- a/browser/components/urlbar/UrlbarUtils.sys.mjs
+++ b/browser/components/urlbar/UrlbarUtils.sys.mjs
@@ -12,7 +12,6 @@ const lazy = {};
ChromeUtils.defineESModuleGetters(lazy, {
FormHistory: "resource://gre/modules/FormHistory.sys.mjs",
KeywordUtils: "resource://gre/modules/KeywordUtils.sys.mjs",
- Log: "resource://gre/modules/Log.sys.mjs",
PlacesUIUtils: "resource:///modules/PlacesUIUtils.sys.mjs",
PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",
PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs",
@@ -1030,8 +1029,9 @@ export var UrlbarUtils = {
isPrivate: lazy.PrivateBrowsingUtils.isWindowPrivate(window),
maxResults: 1,
searchString,
- userContextId:
- window.gBrowser.selectedBrowser.getAttribute("usercontextid"),
+ userContextId: parseInt(
+ window.gBrowser.selectedBrowser.getAttribute("usercontextid") || 0
+ ),
prohibitRemoteResults: true,
providers: ["AliasEngines", "BookmarkKeywords", "HeuristicFallback"],
};
@@ -1051,31 +1051,27 @@ export var UrlbarUtils = {
},
/**
- * Creates a logger.
- * Logging level can be controlled through browser.urlbar.loglevel.
+ * Creates a console logger.
+ * Logging level can be controlled through the `browser.urlbar.loglevel`
+ * preference.
*
- * @param {string} [prefix] Prefix to use for the logged messages, "::" will
- * be appended automatically to the prefix.
- * @returns {object} The logger.
+ * @param {object} [options] Options for the logger.
+ * @param {string} [options.prefix] Prefix to use for the logged messages.
+ * @returns {ConsoleInstance} The console logger.
*/
getLogger({ prefix = "" } = {}) {
- if (!this._logger) {
- this._logger = lazy.Log.repository.getLogger("urlbar");
- this._logger.manageLevelFromPref("browser.urlbar.loglevel");
- this._logger.addAppender(
- new lazy.Log.ConsoleAppender(new lazy.Log.BasicFormatter())
- );
- }
- if (prefix) {
- // This is not an early return because it is necessary to invoke getLogger
- // at least once before getLoggerWithMessagePrefix; it replaces a
- // method of the original logger, rather than using an actual Proxy.
- return lazy.Log.repository.getLoggerWithMessagePrefix(
- "urlbar",
- prefix + " :: "
- );
- }
- return this._logger;
+ if (!this._loggers) {
+ this._loggers = new Map();
+ }
+ let logger = this._loggers.get(prefix);
+ if (!logger) {
+ logger = console.createInstance({
+ prefix: `URLBar${prefix ? " - " + prefix : ""}`,
+ maxLogLevelPref: "browser.urlbar.loglevel",
+ });
+ this._loggers.set(prefix, logger);
+ }
+ return logger;
},
/**
@@ -1651,6 +1647,12 @@ UrlbarUtils.RESULT_PAYLOAD_SCHEMA = {
icon: {
type: "string",
},
+ isPinned: {
+ type: "boolean",
+ },
+ isSponsored: {
+ type: "boolean",
+ },
title: {
type: "string",
},
@@ -2151,11 +2153,11 @@ export class UrlbarQueryContext {
for (let [prop, checkFn, defaultValue] of [
["currentPage", v => typeof v == "string" && !!v.length],
["formHistoryName", v => typeof v == "string" && !!v.length],
- ["prohibitRemoteResults", v => true, false],
+ ["prohibitRemoteResults", () => true, false],
["providers", v => Array.isArray(v) && v.length],
["searchMode", v => v && typeof v == "object"],
["sources", v => Array.isArray(v) && v.length],
- ["view", v => true],
+ ["view", () => true],
]) {
if (prop in options) {
if (!checkFn(options[prop])) {
@@ -2311,10 +2313,10 @@ export class UrlbarMuxer {
/**
* Sorts queryContext results in-place.
*
- * @param {UrlbarQueryContext} queryContext the context to sort results for.
+ * @param {UrlbarQueryContext} _queryContext the context to sort results for.
* @abstract
*/
- sort(queryContext) {
+ sort(_queryContext) {
throw new Error("Trying to access the base class, must be overridden");
}
}
@@ -2374,11 +2376,11 @@ export class UrlbarProvider {
* If this method returns false, the providers manager won't start a query
* with this provider, to save on resources.
*
- * @param {UrlbarQueryContext} queryContext The query context object
+ * @param {UrlbarQueryContext} _queryContext The query context object
* @returns {boolean} Whether this provider should be invoked for the search.
* @abstract
*/
- isActive(queryContext) {
+ isActive(_queryContext) {
throw new Error("Trying to access the base class, must be overridden");
}
@@ -2388,11 +2390,11 @@ export class UrlbarProvider {
* larger values are higher priorities. For a given query, `startQuery` is
* called on only the active and highest-priority providers.
*
- * @param {UrlbarQueryContext} queryContext The query context object
+ * @param {UrlbarQueryContext} _queryContext The query context object
* @returns {number} The provider's priority for the given query.
* @abstract
*/
- getPriority(queryContext) {
+ getPriority(_queryContext) {
// By default, all providers share the lowest priority.
return 0;
}
@@ -2403,30 +2405,30 @@ export class UrlbarProvider {
* Note: Extended classes should return a Promise resolved when the provider
* is done searching AND returning results.
*
- * @param {UrlbarQueryContext} queryContext The query context object
- * @param {Function} addCallback Callback invoked by the provider to add a new
+ * @param {UrlbarQueryContext} _queryContext The query context object
+ * @param {Function} _addCallback Callback invoked by the provider to add a new
* result. A UrlbarResult should be passed to it.
* @abstract
*/
- startQuery(queryContext, addCallback) {
+ startQuery(_queryContext, _addCallback) {
throw new Error("Trying to access the base class, must be overridden");
}
/**
* Cancels a running query,
*
- * @param {UrlbarQueryContext} queryContext the query context object to cancel
+ * @param {UrlbarQueryContext} _queryContext the query context object to cancel
* query for.
* @abstract
*/
- cancelQuery(queryContext) {
+ cancelQuery(_queryContext) {
// Override this with your clean-up on cancel code.
}
/**
* Called when the user starts and ends an engagement with the urlbar.
*
- * @param {string} state
+ * @param {string} _state
* The state of the engagement, one of the following strings:
*
* start
@@ -2440,11 +2442,11 @@ export class UrlbarProvider {
* urlbar has discarded the engagement for some reason, and the
* `onEngagement` implementation should ignore it.
*
- * @param {UrlbarQueryContext} queryContext
+ * @param {UrlbarQueryContext} _queryContext
* The engagement's query context. This is *not* guaranteed to be defined
* when `state` is "start". It will always be defined for "engagement" and
* "abandonment".
- * @param {object} details
+ * @param {object} _details
* This object is non-empty only when `state` is "engagement" or
* "abandonment", and it describes the search string and engaged result.
*
@@ -2469,27 +2471,27 @@ export class UrlbarProvider {
* The index of the picked result.
* {string} selType
* The type of the selected result. See TelemetryEvent.record() in
- * UrlbarController.jsm.
+ * UrlbarController.sys.mjs.
* {string} provider
* The name of the provider that produced the picked result.
*
* For "abandonment", only `searchString` is defined.
- * @param {UrlbarController} controller
+ * @param {UrlbarController} _controller
* The associated controller.
*/
- onEngagement(state, queryContext, details, controller) {}
+ onEngagement(_state, _queryContext, _details, _controller) {}
/**
* Called before a result from the provider is selected. See `onSelection`
* for details on what that means.
*
- * @param {UrlbarResult} result
+ * @param {UrlbarResult} _result
* The result that was selected.
- * @param {Element} element
+ * @param {Element} _element
* The element in the result's view that was selected.
* @abstract
*/
- onBeforeSelection(result, element) {}
+ onBeforeSelection(_result, _element) {}
/**
* Called when a result from the provider is selected. "Selected" refers to
@@ -2498,13 +2500,13 @@ export class UrlbarProvider {
* event of a click, onSelection is called just before onEngagement. Note that
* this is called when heuristic results are pre-selected.
*
- * @param {UrlbarResult} result
+ * @param {UrlbarResult} _result
* The result that was selected.
- * @param {Element} element
+ * @param {Element} _element
* The element in the result's view that was selected.
* @abstract
*/
- onSelection(result, element) {}
+ onSelection(_result, _element) {}
/**
* This is called only for dynamic result types, when the urlbar view updates
@@ -2543,9 +2545,9 @@ export class UrlbarProvider {
* element's name is not specified, then it will not be updated and will
* retain its current state.
*
- * @param {UrlbarResult} result
+ * @param {UrlbarResult} _result
* The result whose view will be updated.
- * @param {Map} idsByName
+ * @param {Map} _idsByName
* A Map from an element's name, as defined by the provider; to its ID in
* the DOM, as defined by the browser. The browser manages element IDs for
* dynamic results to prevent collisions. However, a provider may need to
@@ -2572,7 +2574,7 @@ export class UrlbarProvider {
* {string} [textContent]
* A string that will be set as `element.textContent`.
*/
- getViewUpdate(result, idsByName) {
+ getViewUpdate(_result, _idsByName) {
return null;
}
@@ -2582,7 +2584,7 @@ export class UrlbarProvider {
* be handled by implementing `onEngagement()` with the possible exception of
* commands automatically handled by the urlbar, like "help".
*
- * @param {UrlbarResult} result
+ * @param {UrlbarResult} _result
* The menu will be shown for this result.
* @returns {Array}
* If the result doesn't have any commands, this should return null.
@@ -2601,7 +2603,7 @@ export class UrlbarProvider {
* If specified, a submenu will be created with the given child commands.
* Each object in the array must be a command object.
*/
- getResultCommands(result) {
+ getResultCommands(_result) {
return null;
}
@@ -2922,10 +2924,8 @@ export class L10nCache {
* The subject of the notification.
* @param {string} topic
* The topic of the notification.
- * @param {string} data
- * The data attached to the notification.
*/
- async observe(subject, topic, data) {
+ async observe(subject, topic) {
switch (topic) {
case "intl:app-locales-changed": {
await this.l10n.ready;
diff --git a/browser/components/urlbar/UrlbarView.sys.mjs b/browser/components/urlbar/UrlbarView.sys.mjs
index 440c06d4a1..b5fe1e1955 100644
--- a/browser/components/urlbar/UrlbarView.sys.mjs
+++ b/browser/components/urlbar/UrlbarView.sys.mjs
@@ -463,15 +463,18 @@ export class UrlbarView {
this.#setRowSelectable(row, false);
// Replace the row with a dismissal acknowledgment tip.
- let tip = new lazy.UrlbarResult(
- lazy.UrlbarUtils.RESULT_TYPE.TIP,
- lazy.UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
- {
- type: "dismissalAcknowledgment",
- titleL10n,
- buttons: [{ l10n: { id: "urlbar-search-tips-confirm-short" } }],
- icon: "chrome://branding/content/icon32.png",
- }
+ let tip = Object.assign(
+ new lazy.UrlbarResult(
+ lazy.UrlbarUtils.RESULT_TYPE.TIP,
+ lazy.UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
+ {
+ type: "dismissalAcknowledgment",
+ titleL10n,
+ buttons: [{ l10n: { id: "urlbar-search-tips-confirm-short" } }],
+ icon: "chrome://branding/content/icon32.png",
+ }
+ ),
+ { rowLabel: this.#rowLabel(row) }
);
this.#updateRow(row, tip);
this.#updateIndices();
@@ -693,7 +696,7 @@ export class UrlbarView {
this.#cacheL10nStrings();
}
- onQueryCancelled(queryContext) {
+ onQueryCancelled() {
this.#queryWasCancelled = true;
this.#cancelRemoveStaleRowsTimer();
}
@@ -1130,6 +1133,8 @@ export class UrlbarView {
*/
#rowCanUpdateToResult(rowIndex, result, seenSearchSuggestion) {
// The heuristic result must always be current, thus it's always compatible.
+ // Note that the `updateResults` code, when updating the selection, relies
+ // on the fact the heuristic is the first selectable row.
if (result.heuristic) {
return true;
}
@@ -1176,6 +1181,10 @@ export class UrlbarView {
// future we should make it support any type of result. Or, even better,
// results should be grouped, thus we can directly update groups.
+ // Discard tentative exposures. This is analogous to marking the
+ // hypothetical hidden rows of hidden-exposure results as stale.
+ this.controller.engagementEvent.discardTentativeExposures();
+
// Walk rows and find an insertion index for results. To avoid flicker, we
// skip rows until we find one compatible with the result we want to apply.
// If we couldn't find a compatible range, we'll just update.
@@ -1212,7 +1221,7 @@ export class UrlbarView {
) {
// We can replace the row's current result with the new one.
if (result.exposureResultHidden) {
- this.#addExposure(result);
+ this.controller.engagementEvent.addExposure(result);
} else {
this.#updateRow(row, result);
}
@@ -1282,7 +1291,13 @@ export class UrlbarView {
newSpanCount <= this.#queryContext.maxResults && !seenMisplacedResult;
if (result.exposureResultHidden) {
if (canBeVisible) {
- this.#addExposure(result);
+ this.controller.engagementEvent.addExposure(result);
+ } else {
+ // Add a tentative exposure: The hypothetical row for this
+ // hidden-exposure result can't be visible now, but as long as it were
+ // not marked stale in a later update, it would be shown when stale
+ // rows are removed.
+ this.controller.engagementEvent.addTentativeExposure(result);
}
continue;
}
@@ -1323,10 +1338,17 @@ export class UrlbarView {
// on the row itself so that screen readers ignore it.
item.setAttribute("role", "presentation");
+ // These are used to cleanup result specific entities when row contents are
+ // cleared to reuse the row for a different result.
+ item._sharedAttributes = new Set(
+ [...item.attributes].map(v => v.name).concat(["stale", "id"])
+ );
+ item._sharedClassList = new Set(item.classList);
+
return item;
}
- #createRowContent(item, result) {
+ #createRowContent(item) {
// The url is the only element that can wrap, thus all the other elements
// are child of noWrap.
let noWrap = this.#createElement("span");
@@ -1505,7 +1527,7 @@ export class UrlbarView {
return classes;
}
- #createRowContentForRichSuggestion(item, result) {
+ #createRowContentForRichSuggestion(item) {
item._content.toggleAttribute("selectable", true);
let favicon = this.#createElement("img");
@@ -1615,7 +1637,7 @@ export class UrlbarView {
// eslint-disable-next-line complexity
#updateRow(item, result) {
let oldResult = item.result;
- let oldResultType = item.result && item.result.type;
+ let oldResultType = item.result?.type;
let provider = lazy.UrlbarProvidersManager.getProvider(result.providerName);
item.result = result;
item.removeAttribute("stale");
@@ -1638,6 +1660,18 @@ export class UrlbarView {
oldResult.payload.buttons,
result.payload.buttons
) ||
+ // Reusing a non-heuristic as a heuristic is risky as it may have DOM
+ // nodes/attributes/classes that are normally not present in a heuristic
+ // result. This may happen for example when switching from a zero-prefix
+ // search not having a heuristic to a search string one.
+ result.heuristic != oldResult.heuristic ||
+ // Container switch-tab results have a more complex DOM content that is
+ // only updated correctly by another switch-tab result.
+ (oldResultType == lazy.UrlbarUtils.RESULT_TYPE.TAB_SWITCH &&
+ lazy.UrlbarProviderOpenTabs.isContainerUserContextId(
+ oldResult.payload.userContextId
+ ) &&
+ result.type != oldResultType) ||
result.testForceNewContent;
if (needsNewContent) {
@@ -1649,8 +1683,18 @@ export class UrlbarView {
item._content = this.#createElement("span");
item._content.className = "urlbarView-row-inner";
item.appendChild(item._content);
- item.removeAttribute("tip-type");
- item.removeAttribute("dynamicType");
+ // Clear previously set attributes and classes that may refer to a
+ // different result type.
+ for (const attribute of item.attributes) {
+ if (!item._sharedAttributes.has(attribute.name)) {
+ item.removeAttribute(attribute.name);
+ }
+ }
+ for (const className of item.classList) {
+ if (!item._sharedClassList.has(className)) {
+ item.classList.remove(className);
+ }
+ }
if (item.result.type == lazy.UrlbarUtils.RESULT_TYPE.DYNAMIC) {
this.#createRowContentForDynamicType(item, result);
} else if (result.isRichSuggestion) {
@@ -1875,7 +1919,6 @@ export class UrlbarView {
item.toggleAttribute("has-url", setURL);
let url = item._elements.get("url");
if (setURL) {
- item.setAttribute("has-url", "true");
let displayedUrl = result.payload.displayUrl;
let urlHighlights = result.payloadHighlights.displayUrl || [];
if (lazy.UrlbarUtils.isTextDirectionRTL(displayedUrl, this.window)) {
@@ -2093,7 +2136,7 @@ export class UrlbarView {
let visible = this.#isElementVisible(item);
if (visible) {
if (item.result.exposureResultType) {
- this.#addExposure(item.result);
+ this.controller.engagementEvent.addExposure(item.result);
}
this.visibleResults.push(item.result);
}
@@ -2200,6 +2243,10 @@ export class UrlbarView {
return null;
}
+ if (row.result.rowLabel) {
+ return row.result.rowLabel;
+ }
+
let engineName =
row.result.payload.engine || Services.search.defaultEngine.name;
@@ -2326,6 +2373,10 @@ export class UrlbarView {
row = next;
}
this.#updateIndices();
+
+ // Accept tentative exposures. This is analogous to unhiding the
+ // hypothetical non-stale hidden rows of hidden-exposure results.
+ this.controller.engagementEvent.acceptTentativeExposures();
}
#startRemoveStaleRowsTimer() {
@@ -2645,7 +2696,7 @@ export class UrlbarView {
if (
actionNode.classList.contains("urlbarView-userContext") &&
label &&
- actionNode.querySelector("span").innerText == label
+ actionNode.querySelector("span")?.innerText == label
) {
return;
}
@@ -2681,8 +2732,6 @@ export class UrlbarView {
if (identity.icon) {
let userContextIcon = this.#createElement("img");
userContextIcon.classList.add("urlbarView-userContext-icon");
-
- userContextIcon.classList.add("identity-icon-" + identity.icon);
userContextIcon.setAttribute("alt", label);
userContextIcon.src =
"resource://usercontext-content/" + identity.icon + ".svg";
@@ -3131,6 +3180,7 @@ export class UrlbarView {
let engine = this.oneOffSearchButtons.selectedButton?.engine;
let source = this.oneOffSearchButtons.selectedButton?.source;
+ let icon = this.oneOffSearchButtons.selectedButton?.image;
let localSearchMode;
if (source) {
@@ -3254,7 +3304,15 @@ export class UrlbarView {
}
// Update result favicons.
- let iconOverride = localSearchMode?.icon || engine?.getIconURL();
+ let iconOverride = localSearchMode?.icon;
+ // If the icon is the default one-off search placeholder, assume we
+ // don't have an icon for the engine.
+ if (
+ !iconOverride &&
+ icon != "chrome://browser/skin/search-engine-placeholder.png"
+ ) {
+ iconOverride = icon;
+ }
if (!iconOverride && (localSearchMode || engine)) {
// For one-offs without an icon, do not allow restyled URL results to
// use their own icons.
@@ -3273,7 +3331,7 @@ export class UrlbarView {
}
}
- on_blur(event) {
+ on_blur() {
// If the view is open without the input being focused, it will not close
// automatically when the window loses focus. We might be in this state
// after a Search Tip is shown on an engine homepage.
@@ -3416,15 +3474,6 @@ export class UrlbarView {
this.#populateResultMenu();
}
}
-
- /**
- * Add result to exposure set on the controller.
- *
- * @param {UrlbarResult} result UrlbarResult for which to record an exposure.
- */
- #addExposure(result) {
- this.controller.engagementEvent.addExposure(result);
- }
}
/**
diff --git a/browser/components/urlbar/content/enUS-searchFeatures.ftl b/browser/components/urlbar/content/enUS-searchFeatures.ftl
index daddc22378..52ae0648e0 100644
--- a/browser/components/urlbar/content/enUS-searchFeatures.ftl
+++ b/browser/components/urlbar/content/enUS-searchFeatures.ftl
@@ -60,6 +60,11 @@ urlbar-result-menu-learn-more-about-firefox-suggest =
.label = Learn more about { -firefox-suggest-brand-name }
.accesskey = L
+# Manage menu item shown in the result menu of Firefox Suggest results.
+urlbar-result-menu-manage-firefox-suggest =
+ .label = Manage { -firefox-suggest-brand-name }
+ .accesskey = M
+
# A message shown in a result when the user gives feedback on it.
firefox-suggest-feedback-acknowledgment = Thanks for your feedback
diff --git a/browser/components/urlbar/content/quicksuggestOnboarding.css b/browser/components/urlbar/content/quicksuggestOnboarding.css
index 6ed8454398..97a1fa0390 100644
--- a/browser/components/urlbar/content/quicksuggestOnboarding.css
+++ b/browser/components/urlbar/content/quicksuggestOnboarding.css
@@ -4,7 +4,7 @@
/**
* When making changes, follow the example of the AboutWelcome messaging surface for font sizes, line heights,
- * etc. See: https://searchfox.org/mozilla-central/source/browser/components/newtab/content-src/aboutwelcome/aboutwelcome.scss
+ * etc. See: https://searchfox.org/mozilla-central/source/browser/components/aboutwelcome/content-src/aboutwelcome.scss
*/
:root {
diff --git a/browser/components/urlbar/docs/overview.rst b/browser/components/urlbar/docs/overview.rst
index acc0db5874..992d847a21 100644
--- a/browser/components/urlbar/docs/overview.rst
+++ b/browser/components/urlbar/docs/overview.rst
@@ -70,7 +70,7 @@ The Model
The *Model* is the component responsible for retrieving search results based on
the user's input, and sorting them accordingly to their importance.
-At the core is the `UrlbarProvidersManager <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarProvidersManager.jsm>`_,
+At the core is the `UrlbarProvidersManager <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarProvidersManager.sys.mjs>`_,
a component tracking all the available search providers, and managing searches
across them.
@@ -90,7 +90,7 @@ Queries can be canceled.
terminating any running and future SQL query, unless a query is running inside
a *runInCriticalSection* task.
-The *searchString* gets tokenized by the `UrlbarTokenizer <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarTokenizer.jsm>`_
+The *searchString* gets tokenized by the `UrlbarTokenizer <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarTokenizer.sys.mjs>`_
component into tokens, some of these tokens have a special meaning and can be
used by the user to restrict the search to specific result type (See the
*UrlbarTokenizer::TYPE* enum).
@@ -118,7 +118,7 @@ UrlbarProvider
A provider is specialized into searching and returning results from different
information sources. Internal providers are usually implemented in separate
-*jsm* modules with a *UrlbarProvider* name prefix. External providers can be
+*sys.mjs* modules with a *UrlbarProvider* name prefix. External providers can be
registered as *Objects* through the *UrlbarProvidersManager*.
Each provider is independent and must satisfy a base API, while internal
implementation details may vary deeply among different providers.
@@ -235,7 +235,7 @@ indicated by the UrlbarQueryContext.muxer property.
The Controller
--------------
-`UrlbarController <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarController.jsm>`_
+`UrlbarController <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarController.sys.mjs>`_
is the component responsible for reacting to user's input, by communicating
proper course of action to the Model (e.g. starting/stopping a query) and the
View (e.g. showing/hiding a panel). It is also responsible for reporting Telemetry.
@@ -268,8 +268,8 @@ user and handling their input.
The View is a replaceable component, as such what is described here is a
reference for the default View, but may not be valid for other implementations.
-`UrlbarInput.jsm <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarInput.jsm>`_
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+`UrlbarInput.sys.mjs <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarInput.sys.mjs>`_
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Implements an input box *View*, owns an *UrlbarView*.
@@ -312,8 +312,8 @@ Implements an input box *View*, owns an *UrlbarView*.
value;
}
-`UrlbarView.jsm <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarView.jsm>`_
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+`UrlbarView.sys.mjs <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarView.sys.mjs>`_
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Represents the base *View* implementation, communicates with the *Controller*.
@@ -342,7 +342,7 @@ Represents the base *View* implementation, communicates with the *Controller*.
UrlbarResult
------------
-An `UrlbarResult <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarResult.jsm>`_
+An `UrlbarResult <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarResult.sys.mjs>`_
instance represents a single search result with a result type, that
identifies specific kind of results.
Each kind has its own properties, that the *View* may support, and a few common
diff --git a/browser/components/urlbar/docs/ranking.rst b/browser/components/urlbar/docs/ranking.rst
index a1c9d03c3c..917fd4a38d 100644
--- a/browser/components/urlbar/docs/ranking.rst
+++ b/browser/components/urlbar/docs/ranking.rst
@@ -7,7 +7,7 @@ Before results appear in the UrlbarView, they are fetched from providers.
Each `UrlbarProvider <https://firefox-source-docs.mozilla.org/browser/urlbar/overview.html#urlbarprovider>`_
implements its own internal ranking and returns sorted results.
-Externally all the results are ranked by the `UrlbarMuxer <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarMuxerUnifiedComplete.jsm>`_
+Externally all the results are ranked by the `UrlbarMuxer <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarMuxerUnifiedComplete.sys.mjs>`_
according to an hardcoded list of groups and sub-grups.
.. NOTE:: Preferences can influence the groups order, for example by putting
diff --git a/browser/components/urlbar/docs/telemetry.rst b/browser/components/urlbar/docs/telemetry.rst
index 46e56c8093..502cdc3a11 100644
--- a/browser/components/urlbar/docs/telemetry.rst
+++ b/browser/components/urlbar/docs/telemetry.rst
@@ -515,16 +515,15 @@ following documents for the details.
complete an engagement action, usually unfocusing the urlbar. This also
happens when the user switches to another window, if the results popup was
opening.
- - `Impression`_ :
- It is defined as an action where the results had been shown to the user for
- a while. In default, it will be recorded when the same results have been
- shown and 1 sec has elapsed. The interval value can be modified through the
- `browser.urlbar.searchEngagementTelemetry.pauseImpressionIntervalMs`
- preference.
.. _Engagement: https://dictionary.telemetry.mozilla.org/apps/firefox_desktop/metrics/urlbar_engagement
.. _Abandonment: https://dictionary.telemetry.mozilla.org/apps/firefox_desktop/metrics/urlbar_abandonment
-.. _Impression: https://dictionary.telemetry.mozilla.org/apps/firefox_desktop/metrics/urlbar_impression
+
+Changelog
+ Firefox 125
+ The "impression" engagement event has been removed. [Bug `1878983`_]
+
+.. _1878983: https://bugzilla.mozilla.org/show_bug.cgi?id=1878983
Custom pings for Contextual Services
diff --git a/browser/components/urlbar/docs/testing.rst b/browser/components/urlbar/docs/testing.rst
index a56bd297a7..14569918dc 100644
--- a/browser/components/urlbar/docs/testing.rst
+++ b/browser/components/urlbar/docs/testing.rst
@@ -53,10 +53,10 @@ If you are writing a test for a urlbarProvider, you can test the Provider
through a XPCShell test. Providers do not modify the UI, instead what they do is
receive a url string query, search for the string and bring back the result. An
example is the `ProviderPlaces <https://searchfox.org/mozilla-central/sou
-rce/browser/components/urlbar/UrlbarProviderPlaces.jsm>`_, which fetches
+rce/browser/components/urlbar/UrlbarProviderPlaces.sys.mjs>`_, which fetches
results from the Places database. Another component that’s good for writing
XPCShell test is the `urlbarMuxer <https://searchfox.org/mozilla-central/
-source/browser/components/urlbar/UrlbarMuxerUnifiedComplete.jsm>`_.
+source/browser/components/urlbar/UrlbarMuxerUnifiedComplete.sys.mjs>`_.
There may be times where writing both an XPCShell test and browser test is
necessary. In these situations, you could be testing the result from a Provider
@@ -131,10 +131,10 @@ This section describes common test utilities which may be useful when writing a
test for the address bar. Below are a description of common utils where you can
find helpful testing methods.
-Many test utils modules end with ``TestUtils.jsm``. However not every testing
-function will end with ``TestUtils.jsm``. For example, `PlacesUtils <https://
+Many test utils modules end with ``TestUtils.sys.mjs``. However not every testing
+function will end with ``TestUtils.sys.mjs``. For example, `PlacesUtils <https://
searchfox.org/mozilla-central/source/toolkit/components/places/PlacesUtils.
-jsm>`_ does not have “Test” within its name.
+sys.mjs>`_ does not have “Test” within its name.
A critical function to remember is the ``registerCleanupFunction`` within
the ``head.js`` file mentioned below. This function's purpose may be to clean
@@ -150,7 +150,7 @@ test and contains imports to modules which are useful for each test.
Any tasks ``head.js`` adds (via add_task) will run first for each test, and
any variables and functions it defines will be available in the scope of
each test. This file is small because most of our Utils are actually in other
-`.jsm` files.
+`.sys.mjs` files.
The ``XPCOMUtils.defineLazyModuleGetters`` method within ``head.js`` sets up
modules names to where they can be found, their paths. ``Lazy`` means the files
@@ -189,7 +189,7 @@ new or private windows, and etc.
TestUtils
~~~~~~~~~
-`TestUtils.jsm <../../testing/testutils.html>`_ is useful for general
+`TestUtils.sys.mjs <../../testing/testutils.html>`_ is useful for general
purpose testing and does not depend on the browser window. This file contains
methods that are useful when waiting for a condition to return true, waiting for
a specific preference to change, and etc.
@@ -204,7 +204,7 @@ EventUtils
~~~~~~~~~~
`EventUtils.js <https://searchfox.org/mozilla-central/source/testing/mochitest
/tests/SimpleTest/EventUtils.js>`_ is an older test file and does not
-need to be imported because it is not a ``.jsm`` file. ``EventUtils`` is only
+need to be imported because it is not a ``.sys.mjs`` file. ``EventUtils`` is only
used for browser tests, unlike the other TestUtils listed above which are
used for browser tests, XPCShell tests and other tests.
diff --git a/browser/components/urlbar/docs/utilities.rst b/browser/components/urlbar/docs/utilities.rst
index 9e30087872..27ee15df6f 100644
--- a/browser/components/urlbar/docs/utilities.rst
+++ b/browser/components/urlbar/docs/utilities.rst
@@ -3,8 +3,8 @@ Utilities
Various modules provide shared utilities to the other components:
-`UrlbarPrefs.jsm <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarPrefs.jsm>`_
--------------------------------------------------------------------------------------------------------------
+`UrlbarPrefs.sys.mjs <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarPrefs.sys.mjs>`_
+-------------------------------------------------------------------------------------------------------------------
Implements a Map-like storage or urlbar related preferences. The values are kept
up-to-date.
@@ -19,7 +19,7 @@ up-to-date.
Newly added preferences should always be properly documented in UrlbarPrefs.
-`UrlbarUtils.jsm <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarUtils.jsm>`_
--------------------------------------------------------------------------------------------------------------
+`UrlbarUtils.sys.mjs <https://searchfox.org/mozilla-central/source/browser/components/urlbar/UrlbarUtils.sys.mjs>`_
+-------------------------------------------------------------------------------------------------------------------
Includes shared utils and constants shared across all the components.
diff --git a/browser/components/urlbar/metrics.yaml b/browser/components/urlbar/metrics.yaml
index 867cf0d2e6..95337d84eb 100644
--- a/browser/components/urlbar/metrics.yaml
+++ b/browser/components/urlbar/metrics.yaml
@@ -15,6 +15,11 @@ urlbar:
type: event
description: Recorded when the user abandons a search (blurring the urlbar).
extra_keys:
+ abandonment_type:
+ description: >
+ Records the reason that resulted in an abandonment. The possible
+ values are: `blur` and `tab_switch`.
+ type: string
sap:
description: >
`sap` is the meaning of `search access point`. It records where the
@@ -316,6 +321,7 @@ urlbar:
`go_button`,
`help`,
`inaccurate_location`,
+ `manage`,
`not_interested`,
`not_relevant`,
`paste_go`,
@@ -406,152 +412,6 @@ urlbar:
notification_emails:
- fx-search-telemetry@mozilla.com
expires: never
- impression:
- disabled: true
- type: event
- description: Recorded when urlbar results are shown to the user.
- extra_keys:
- reason:
- description: Reason for the impression.
- type: string
- sap:
- description: >
- `sap` is the meaning of `search access point`. It records where the
- user started the search action from. The possible values are: `urlbar`
- , `handoff`, `urlbar_newtab` and `urlbar_addonpage`.
- type: string
- interaction:
- description: >
- How the user started the search action. The possible values are:
- `typed`, `pasted`, `topsite_search` (clicked on a topsite search
- shortcut), `topsites` (selected a topsite result with empty search
- string), `returned` (The user abandoned a search, then returned to it)
- , `restarted` (The user abandoned a search, then returned to it,
- cleared it and typed a completely different string), `refined` (The
- user abandoned a search, then returned to it, and partially modified
- the string), `persisted_search_terms` (The user returned to a previous
- successful search that persisted terms in the urlbar),
- `persisted_search_terms_restarted` (The user returned to a previous
- successful search that persisted terms in the urlbar, then cleared it
- and typed a completely different string) and
- `persisted_search_terms_refined` (The user returned to a previous
- successful search that persisted terms in the urlbar, and partially
- modified the string).
- type: string
- search_mode:
- description: >
- If the urlbar is in search mode, thus restricting results to a
- specific search engine or local source, this is set to the search mode
- source. The possible sources are: `actions`, `bookmarks`, `history`,
- `search_engine`, and `tabs`. If search mode is active but the source
- did not fall into any of these categories, this will be `unknown`. If
- search mode is not active, this will be an empty string.
- type: string
- search_engine_default_id:
- description: >
- The telemetry id of the search engine.
- Reflects `search.engine.default.engine_id`.
- type: string
- n_chars:
- description: >
- The length of string used for the search. It includes whitespaces.
- type: quantity
- n_words:
- description: >
- The length of words used for the search. The words are made by
- splitting the search string by whitespaces, thus this doesn’t support
- CJK languages. For performance reasons a maximum of 255 characters are
- considered when splitting.
- type: quantity
- n_results:
- description: >
- The number of results shown to the user. If this is high the results
- list below may be truncated due to technical limitations. Also note in
- that case not all the results may be physically visible due to the
- screen size limitation.
- type: quantity
- groups:
- description: >
- Comma separated list of result groups in the order they were shown to
- the user. The groups may be repeated, since the list will match 1:1
- the results list, so we can link each result to a group. The possible
- group names are: `heuristic`, `adaptive_history`, `search_history`,
- `search_suggest`, `search_suggest_rich`, `trending_search`,
- `trending_search_rich`, `top_pick`, `top_site`, `remote_tab`,
- `addon`, `general`, `suggest`, `about_page` and `suggested_index`. If
- the group did not fall into any of these, this will be `unknown` and
- a bug should be filed to investigate it.
- type: string
- results:
- description: >
- Comma separated list of result types in the order they were shown to
- the user. The `unknown` type should not occur and indicates a bug. The
- possible types are:
- `action`,
- `addon`,
- `autofill_about`,
- `autofill_adaptive`,
- `autofill_origin`,
- `autofill_unknown`,
- `autofill_url`,
- `bookmark`,
- `calc`,
- `clipboard`,
- `fxsuggest_data_sharing_opt_in`,
- `history`,
- `intervention_clear`,
- `intervention_refresh`,
- `intervention_unknown`,
- `intervention_update`,
- `keyword`,
- `merino_adm_nonsponsored`,
- `merino_adm_sponsored`,
- `merino_amo`,
- `merino_top_picks`,
- `merino_wikipedia`,
- `remote_tab`,
- `rs_adm_nonsponsored`,
- `rs_adm_sponsored`,
- `rs_amo`,
- `rs_mdn`,
- `rs_pocket`,
- `rust_adm_nonsponsored`,
- `rust_adm_sponsored`,
- `rust_amo`,
- `rust_mdn`,
- `rust_pocket`,
- `rust_yelp`,
- `search_engine`,
- `search_history`,
- `search_suggest`,
- `search_suggest_rich`,
- `tab`,
- `tab_to_search`,
- `tip_dismissal_acknowledgment`,
- `tip_onboard`,
- `tip_persist`,
- `tip_redirect`,
- `tip_unknown`,
- `top_site`,
- `trending_search`,
- `trending_search_rich`,
- `unit`,
- `url`,
- `weather`
- type: string
- bugs:
- - https://bugzilla.mozilla.org/show_bug.cgi?id=1800579
- - https://bugzilla.mozilla.org/show_bug.cgi?id=1805717
- - https://bugzilla.mozilla.org/show_bug.cgi?id=1842247
- data_reviews:
- - https://bugzilla.mozilla.org/show_bug.cgi?id=1800579#c4
- - https://bugzilla.mozilla.org/show_bug.cgi?id=1805717#c4
- - https://bugzilla.mozilla.org/show_bug.cgi?id=1842247#c3
- data_sensitivity:
- - interaction
- notification_emails:
- - fx-search-telemetry@mozilla.com
- expires: never
exposure:
type: event
diff --git a/browser/components/urlbar/private/AddonSuggestions.sys.mjs b/browser/components/urlbar/private/AddonSuggestions.sys.mjs
index 35849e5cd1..23311cec1c 100644
--- a/browser/components/urlbar/private/AddonSuggestions.sys.mjs
+++ b/browser/components/urlbar/private/AddonSuggestions.sys.mjs
@@ -178,7 +178,7 @@ export class AddonSuggestions extends BaseFeature {
);
}
- getResultCommands(result) {
+ getResultCommands() {
const commands = [];
if (this.canShowLessFrequently) {
diff --git a/browser/components/urlbar/private/AdmWikipedia.sys.mjs b/browser/components/urlbar/private/AdmWikipedia.sys.mjs
index 0e266ced40..3ab5bad09f 100644
--- a/browser/components/urlbar/private/AdmWikipedia.sys.mjs
+++ b/browser/components/urlbar/private/AdmWikipedia.sys.mjs
@@ -135,7 +135,7 @@ export class AdmWikipedia extends BaseFeature {
this.#suggestionsMap = suggestionsMap;
}
- makeResult(queryContext, suggestion, searchString) {
+ makeResult(queryContext, suggestion) {
let originalUrl;
if (suggestion.source == "rust") {
// The Rust backend defines `rawUrl` on AMP suggestions, and its value is
diff --git a/browser/components/urlbar/private/BaseFeature.sys.mjs b/browser/components/urlbar/private/BaseFeature.sys.mjs
index d95ace6940..7155d9b7e6 100644
--- a/browser/components/urlbar/private/BaseFeature.sys.mjs
+++ b/browser/components/urlbar/private/BaseFeature.sys.mjs
@@ -89,10 +89,10 @@ export class BaseFeature {
* This method should initialize or uninitialize any state related to the
* feature.
*
- * @param {boolean} enabled
+ * @param {boolean} _enabled
* Whether the feature should be enabled or not.
*/
- enable(enabled) {}
+ enable(_enabled) {}
/**
* If the feature manages suggestions from remote settings that should be
@@ -100,12 +100,12 @@ export class BaseFeature {
* method. It should return remote settings suggestions matching the given
* search string.
*
- * @param {string} searchString
+ * @param {string} _searchString
* The search string.
* @returns {Array}
* An array of matching suggestions, or null if not implemented.
*/
- async queryRemoteSettings(searchString) {
+ async queryRemoteSettings(_searchString) {
return null;
}
@@ -114,10 +114,10 @@ export class BaseFeature {
* override this method. It should fetch the data and build whatever data
* structures are necessary to support the feature.
*
- * @param {RemoteSettings} rs
+ * @param {RemoteSettings} _rs
* The `RemoteSettings` client object.
*/
- async onRemoteSettingsSync(rs) {}
+ async onRemoteSettingsSync(_rs) {}
/**
* If the feature manages suggestions that either aren't served by Merino or
@@ -126,12 +126,12 @@ export class BaseFeature {
* given suggestion. A telemetry type uniquely identifies a type of suggestion
* as well as the kind of `UrlbarResult` instances created from it.
*
- * @param {object} suggestion
+ * @param {object} _suggestion
* A suggestion from either remote settings or Merino.
* @returns {string}
* The suggestion's telemetry type.
*/
- getSuggestionTelemetryType(suggestion) {
+ getSuggestionTelemetryType(_suggestion) {
return this.merinoProvider;
}
@@ -143,13 +143,13 @@ export class BaseFeature {
* fine to rely on the default implementation here because the suggestion type
* will be enabled iff the feature itself is enabled.
*
- * @param {string} type
+ * @param {string} _type
* A Rust suggestion type name as defined in `suggest.udl`. See also
* `rustSuggestionTypes`.
* @returns {boolean}
* Whether the suggestion type is enabled.
*/
- isRustSuggestionTypeEnabled(type) {
+ isRustSuggestionTypeEnabled(_type) {
return true;
}
@@ -158,18 +158,18 @@ export class BaseFeature {
* override this method. It should return a new `UrlbarResult` for a given
* suggestion, which can come from either remote settings or Merino.
*
- * @param {UrlbarQueryContext} queryContext
+ * @param {UrlbarQueryContext} _queryContext
* The query context.
- * @param {object} suggestion
+ * @param {object} _suggestion
* The suggestion from either remote settings or Merino.
- * @param {string} searchString
+ * @param {string} _searchString
* The search string that was used to fetch the suggestion. It may be
* different from `queryContext.searchString` due to trimming, lower-casing,
* etc. This is included as a param in case it's useful.
* @returns {UrlbarResult}
* A new result for the suggestion.
*/
- async makeResult(queryContext, suggestion, searchString) {
+ async makeResult(_queryContext, _suggestion, _searchString) {
return null;
}
diff --git a/browser/components/urlbar/private/MDNSuggestions.sys.mjs b/browser/components/urlbar/private/MDNSuggestions.sys.mjs
index 7547b0adff..c9e7da18af 100644
--- a/browser/components/urlbar/private/MDNSuggestions.sys.mjs
+++ b/browser/components/urlbar/private/MDNSuggestions.sys.mjs
@@ -91,7 +91,7 @@ export class MDNSuggestions extends BaseFeature {
this.#suggestionsMap = suggestionsMap;
}
- async makeResult(queryContext, suggestion, searchString) {
+ async makeResult(queryContext, suggestion) {
if (!this.isEnabled) {
// The feature is disabled on the client, but Merino may still return
// mdn suggestions anyway, and we filter them out here.
@@ -134,7 +134,7 @@ export class MDNSuggestions extends BaseFeature {
);
}
- getResultCommands(result) {
+ getResultCommands() {
return [
{
l10n: {
diff --git a/browser/components/urlbar/private/SuggestBackendJs.sys.mjs b/browser/components/urlbar/private/SuggestBackendJs.sys.mjs
index 4a91e41b59..58d0ca5edf 100644
--- a/browser/components/urlbar/private/SuggestBackendJs.sys.mjs
+++ b/browser/components/urlbar/private/SuggestBackendJs.sys.mjs
@@ -278,7 +278,6 @@ export class SuggestBackendJs extends BaseFeature {
#config = {};
#emitter = null;
- #logger = null;
#onSettingsSync = null;
}
diff --git a/browser/components/urlbar/private/SuggestBackendRust.sys.mjs b/browser/components/urlbar/private/SuggestBackendRust.sys.mjs
index fe54feaee8..2d96e7540f 100644
--- a/browser/components/urlbar/private/SuggestBackendRust.sys.mjs
+++ b/browser/components/urlbar/private/SuggestBackendRust.sys.mjs
@@ -216,7 +216,21 @@ export class SuggestBackendRust extends BaseFeature {
}
async #init() {
- // Create the store.
+ // Important note on schema updates:
+ //
+ // The first time the Suggest store is accessed after a schema version
+ // update, its backing database will be deleted and a new empty database
+ // will be created. The database will remain empty until we tell the store
+ // to ingest. If we wait to ingest as usual until our ingest timer fires,
+ // the store will remain empty for up to 24 hours, which means we won't
+ // serve any suggestions at all during that time.
+ //
+ // Therefore we simply always ingest here in `#init()`. We'll sometimes
+ // ingest unnecessarily but that's better than the alternative. (As a
+ // reminder, for users who have Suggest enabled `#init()` is called whenever
+ // the Rust backend is enabled, including on startup.)
+
+ // Initialize the store.
let path = this.#storePath;
this.logger.info("Initializing SuggestStore: " + path);
try {
@@ -235,17 +249,20 @@ export class SuggestBackendRust extends BaseFeature {
return;
}
- // Before registering the ingest timer, check the last-update pref, which is
- // created by the timer manager the first time we register it. If the pref
- // doesn't exist, this is the first time the Rust backend has been enabled
- // in this profile. In that case, perform ingestion immediately to make
- // automated and manual testing easier. Otherwise we'd need to wait at least
- // 30s (`app.update.timerFirstInterval`) for the timer manager to call us
- // back (and we'd also need to pass false for `skipFirst` below).
+ // Log the last ingest time for debugging.
let lastIngestSecs = Services.prefs.getIntPref(
INGEST_TIMER_LAST_UPDATE_PREF,
0
);
+ if (lastIngestSecs) {
+ this.logger.debug(
+ `Last ingest time: ${lastIngestSecs}s (${
+ Math.round(Date.now() / 1000) - lastIngestSecs
+ }s ago)`
+ );
+ } else {
+ this.logger.debug("Last ingest time: none");
+ }
// Register the ingest timer.
lazy.timerManager.registerTimer(
@@ -255,14 +272,8 @@ export class SuggestBackendRust extends BaseFeature {
true // skipFirst
);
- if (lastIngestSecs) {
- this.logger.info(
- `Last ingest: ${lastIngestSecs}s since epoch. Not ingesting now`
- );
- } else {
- this.logger.info("Last ingest time not found. Ingesting now");
- await this.#ingest();
- }
+ // Ingest.
+ await this.#ingest();
}
#uninit() {
diff --git a/browser/components/urlbar/private/Weather.sys.mjs b/browser/components/urlbar/private/Weather.sys.mjs
index c4dfa8c618..51ff5b2f3f 100644
--- a/browser/components/urlbar/private/Weather.sys.mjs
+++ b/browser/components/urlbar/private/Weather.sys.mjs
@@ -33,8 +33,8 @@ const NOTIFICATIONS = {
};
const RESULT_MENU_COMMAND = {
- HELP: "help",
INACCURATE_LOCATION: "inaccurate_location",
+ MANAGE: "manage",
NOT_INTERESTED: "not_interested",
NOT_RELEVANT: "not_relevant",
SHOW_LESS_FREQUENTLY: "show_less_frequently",
@@ -171,14 +171,14 @@ export class Weather extends BaseFeature {
return ["Weather"];
}
- isRustSuggestionTypeEnabled(type) {
+ isRustSuggestionTypeEnabled() {
// When weather keywords are defined in Nimbus, weather suggestions are
// served by UrlbarProviderWeather. Return false here so the quick suggest
// provider doesn't try to serve them too.
return !lazy.UrlbarPrefs.get("weatherKeywords");
}
- getSuggestionTelemetryType(suggestion) {
+ getSuggestionTelemetryType() {
return "weather";
}
@@ -191,6 +191,16 @@ export class Weather extends BaseFeature {
}
/**
+ * @returns {Promise}
+ * If suggestion fetching is disabled, this will be null. Otherwise, if a
+ * fetch is pending this will be resolved when it's done; if a fetch is not
+ * pending then it was resolved when the previous fetch finished.
+ */
+ get fetchPromise() {
+ return this.#fetchPromise;
+ }
+
+ /**
* @returns {Set}
* The set of keywords that should trigger the weather suggestion. This will
* be null when the Rust backend is enabled and keywords are not defined by
@@ -291,20 +301,6 @@ export class Weather extends BaseFeature {
}
}
- /**
- * Returns a promise that resolves when all pending fetches finish, if there
- * are pending fetches. If there aren't, the promise resolves when all pending
- * fetches starting with the next fetch finish.
- *
- * @returns {Promise}
- */
- waitForFetches() {
- if (!this.#waitForFetchesDeferred) {
- this.#waitForFetchesDeferred = Promise.withResolvers();
- }
- return this.#waitForFetchesDeferred.promise;
- }
-
async onRemoteSettingsSync(rs) {
this.logger.debug("Loading weather config from remote settings");
let records = await rs.get({ filters: { type: "weather" } });
@@ -356,7 +352,6 @@ export class Weather extends BaseFeature {
{
url: suggestion.url,
iconId: suggestion.current_conditions.icon_id,
- helpUrl: lazy.QuickSuggest.HELP_URL,
requestId: suggestion.request_id,
dynamicType: WEATHER_DYNAMIC_TYPE,
city: suggestion.city_name,
@@ -410,17 +405,19 @@ export class Weather extends BaseFeature {
url: {
textContent: result.payload.url,
},
- summaryText: {
- l10n: {
- id: "firefox-suggest-weather-summary-text",
- args: {
- currentConditions: result.payload.currentConditions,
- forecast: result.payload.forecast,
+ summaryText: lazy.UrlbarPrefs.get("weatherSimpleUI")
+ ? { textContent: result.payload.currentConditions }
+ : {
+ l10n: {
+ id: "firefox-suggest-weather-summary-text",
+ args: {
+ currentConditions: result.payload.currentConditions,
+ forecast: result.payload.forecast,
+ },
+ cacheable: true,
+ excludeArgsFromCacheKey: true,
+ },
},
- cacheable: true,
- excludeArgsFromCacheKey: true,
- },
- },
highLow: {
l10n: {
id: "firefox-suggest-weather-high-low",
@@ -453,7 +450,7 @@ export class Weather extends BaseFeature {
};
}
- getResultCommands(result) {
+ getResultCommands() {
let commands = [
{
name: RESULT_MENU_COMMAND.INACCURATE_LOCATION,
@@ -494,9 +491,9 @@ export class Weather extends BaseFeature {
},
{ name: "separator" },
{
- name: RESULT_MENU_COMMAND.HELP,
+ name: RESULT_MENU_COMMAND.MANAGE,
l10n: {
- id: "urlbar-result-menu-learn-more-about-firefox-suggest",
+ id: "urlbar-result-menu-manage-firefox-suggest",
},
}
);
@@ -506,8 +503,8 @@ export class Weather extends BaseFeature {
handleCommand(view, result, selType) {
switch (selType) {
- case RESULT_MENU_COMMAND.HELP:
- // "help" is handled by UrlbarInput, no need to do anything here.
+ case RESULT_MENU_COMMAND.MANAGE:
+ // "manage" is handled by UrlbarInput, no need to do anything here.
break;
// selType == "dismiss" when the user presses the dismiss key shortcut.
case "dismiss":
@@ -616,6 +613,21 @@ export class Weather extends BaseFeature {
}
async #fetch() {
+ // Keep a handle on the `MerinoClient` instance that exists at the start of
+ // this fetch. If fetching stops or this `Weather` instance is uninitialized
+ // during the fetch, `#merino` will be nulled, and the fetch should stop. We
+ // can compare `merino` to `#merino` to tell when this occurs.
+ let merino = this.#merino;
+ let fetchInstance = (this.#fetchInstance = {});
+
+ await this.#fetchPromise;
+ if (fetchInstance != this.#fetchInstance || merino != this.#merino) {
+ return;
+ }
+ await (this.#fetchPromise = this.#fetchHelper({ fetchInstance, merino }));
+ }
+
+ async #fetchHelper({ fetchInstance, merino }) {
this.logger.info("Fetching suggestion");
if (this.#vpnDetected) {
@@ -626,36 +638,19 @@ export class Weather extends BaseFeature {
// new fetch.
this.logger.info("VPN detected, not fetching");
this.#suggestion = null;
- if (!this.#pendingFetchCount) {
- this.#waitForFetchesDeferred?.resolve();
- this.#waitForFetchesDeferred = null;
- }
return;
}
- // This `Weather` instance may be uninitialized while awaiting the fetch or
- // even uninitialized and re-initialized a number of times. Multiple fetches
- // may also happen at once. Ignore the fetch below if `#merino` changes or
- // another fetch happens in the meantime.
- let merino = this.#merino;
- let instance = (this.#fetchInstance = {});
-
this.#restartFetchTimer();
this.#lastFetchTimeMs = Date.now();
- this.#pendingFetchCount++;
- let suggestions;
- try {
- suggestions = await merino.fetch({
- query: "",
- providers: [MERINO_PROVIDER],
- timeoutMs: this.#timeoutMs,
- extraLatencyHistogram: HISTOGRAM_LATENCY,
- extraResponseHistogram: HISTOGRAM_RESPONSE,
- });
- } finally {
- this.#pendingFetchCount--;
- }
+ let suggestions = await merino.fetch({
+ query: "",
+ providers: [MERINO_PROVIDER],
+ timeoutMs: this.#timeoutMs,
+ extraLatencyHistogram: HISTOGRAM_LATENCY,
+ extraResponseHistogram: HISTOGRAM_RESPONSE,
+ });
// Reset the Merino client's session so different fetches use different
// sessions. A single session is intended to represent a single user
@@ -665,28 +660,23 @@ export class Weather extends BaseFeature {
// to keep it ticking in the meantime.
merino.resetSession();
- if (merino != this.#merino || instance != this.#fetchInstance) {
- this.logger.info("Fetch finished but is out of date, ignoring");
- } else {
- let suggestion = suggestions?.[0];
- if (!suggestion) {
- // No suggestion was received. The network may be offline or there may
- // be some other problem. Set the suggestion to null: Better to show
- // nothing than outdated weather information. When the network comes
- // back online, one or more network notifications will be sent,
- // triggering a new fetch.
- this.logger.info("No suggestion received");
- this.#suggestion = null;
- } else {
- this.logger.info("Got suggestion");
- this.logger.debug(JSON.stringify({ suggestion }));
- this.#suggestion = { ...suggestion, source: "merino" };
- }
+ if (fetchInstance != this.#fetchInstance || merino != this.#merino) {
+ this.logger.info("Fetch is out of date, discarding suggestion");
+ return;
}
- if (!this.#pendingFetchCount) {
- this.#waitForFetchesDeferred?.resolve();
- this.#waitForFetchesDeferred = null;
+ let suggestion = suggestions?.[0];
+ if (!suggestion) {
+ // No suggestion was received. The network may be offline or there may be
+ // some other problem. Set the suggestion to null: Better to show nothing
+ // than outdated weather information. When the network comes back online,
+ // one or more network notifications will be sent, triggering a new fetch.
+ this.logger.info("No suggestion received");
+ this.#suggestion = null;
+ } else {
+ this.logger.info("Got suggestion");
+ this.logger.debug(JSON.stringify({ suggestion }));
+ this.#suggestion = { ...suggestion, source: "merino" };
}
}
@@ -865,10 +855,6 @@ export class Weather extends BaseFeature {
return this.#merino;
}
- get _test_pendingFetchCount() {
- return this.#pendingFetchCount;
- }
-
async _test_fetch() {
await this.#fetch();
}
@@ -884,13 +870,12 @@ export class Weather extends BaseFeature {
#fetchDelayAfterComingOnlineMs = FETCH_DELAY_AFTER_COMING_ONLINE_MS;
#fetchInstance = null;
#fetchIntervalMs = FETCH_INTERVAL_MS;
+ #fetchPromise = null;
#fetchTimer = 0;
#keywords = null;
#lastFetchTimeMs = 0;
#merino = null;
- #pendingFetchCount = 0;
#rsConfig = null;
#suggestion = null;
#timeoutMs = MERINO_TIMEOUT_MS;
- #waitForFetchesDeferred = null;
}
diff --git a/browser/components/urlbar/private/YelpSuggestions.sys.mjs b/browser/components/urlbar/private/YelpSuggestions.sys.mjs
index 546c7ce216..a1ac13177b 100644
--- a/browser/components/urlbar/private/YelpSuggestions.sys.mjs
+++ b/browser/components/urlbar/private/YelpSuggestions.sys.mjs
@@ -55,7 +55,7 @@ export class YelpSuggestions extends BaseFeature {
return !cap || this.showLessFrequentlyCount < cap;
}
- getSuggestionTelemetryType(suggestion) {
+ getSuggestionTelemetryType() {
return "yelp";
}
@@ -127,7 +127,7 @@ export class YelpSuggestions extends BaseFeature {
);
}
- getResultCommands(result) {
+ getResultCommands() {
let commands = [
{
name: RESULT_MENU_COMMAND.INACCURATE_LOCATION,
diff --git a/browser/components/urlbar/tests/UrlbarTestUtils.sys.mjs b/browser/components/urlbar/tests/UrlbarTestUtils.sys.mjs
index a8e422526c..cfc9ecb3d8 100644
--- a/browser/components/urlbar/tests/UrlbarTestUtils.sys.mjs
+++ b/browser/components/urlbar/tests/UrlbarTestUtils.sys.mjs
@@ -545,6 +545,7 @@ export var UrlbarTestUtils = {
details.title = result.title;
details.tags = "tags" in result.payload ? result.payload.tags : [];
details.isSponsored = result.payload.isSponsored;
+ details.userContextId = result.payload.userContextId;
let actions = element.getElementsByClassName("urlbarView-action");
let urls = element.getElementsByClassName("urlbarView-url");
let typeIcon = element.querySelector(".urlbarView-type-icon");
@@ -1536,11 +1537,11 @@ class TestProvider extends UrlbarProvider {
return this._type;
}
- getPriority(context) {
+ getPriority(_context) {
return this.priority;
}
- isActive(context) {
+ isActive(_context) {
return true;
}
@@ -1565,7 +1566,7 @@ class TestProvider extends UrlbarProvider {
}
}
- cancelQuery(context) {
+ cancelQuery(_context) {
this._onCancel?.();
}
diff --git a/browser/components/urlbar/tests/browser-tips/browser_searchTips_interaction.js b/browser/components/urlbar/tests/browser-tips/browser_searchTips_interaction.js
index a5cee02dae..72d05cf632 100644
--- a/browser/components/urlbar/tests/browser-tips/browser_searchTips_interaction.js
+++ b/browser/components/urlbar/tests/browser-tips/browser_searchTips_interaction.js
@@ -680,7 +680,7 @@ add_task(async function noActionWhenDisabled() {
],
});
- await withDNSRedirect("www.bing.com", "/", async url => {
+ await withDNSRedirect("www.bing.com", "/", async () => {
Assert.ok(
!UrlbarTestUtils.isPopupOpen(window),
"The UrlbarView should not be open."
diff --git a/browser/components/urlbar/tests/browser-updateResults/browser_appendSpanCount.js b/browser/components/urlbar/tests/browser-updateResults/browser_appendSpanCount.js
index 60838d0c8b..ccea889a9c 100644
--- a/browser/components/urlbar/tests/browser-updateResults/browser_appendSpanCount.js
+++ b/browser/components/urlbar/tests/browser-updateResults/browser_appendSpanCount.js
@@ -99,7 +99,7 @@ add_task(async function viewUpdateAppendHidden() {
// The `- 2` subtracts the heuristic and tip result.
let newExpectedRowCount = 2 * expectedRowCount - 2;
let mutationPromise = new Promise(resolve => {
- let observer = new MutationObserver(mutations => {
+ let observer = new MutationObserver(() => {
let childCount = UrlbarTestUtils.getResultCount(window);
info(`Rows mutation observer called, childCount now ${childCount}`);
if (newExpectedRowCount <= childCount) {
diff --git a/browser/components/urlbar/tests/browser-updateResults/head.js b/browser/components/urlbar/tests/browser-updateResults/head.js
index 3d46d83018..77b110990e 100644
--- a/browser/components/urlbar/tests/browser-updateResults/head.js
+++ b/browser/components/urlbar/tests/browser-updateResults/head.js
@@ -386,7 +386,7 @@ async function doSuggestedIndexTest({ search1, search2, duringUpdate }) {
// update and delaying resolving the provider's finishQueryPromise.
let mutationPromise = new Promise(resolve => {
let lastRowState = duringUpdate[duringUpdate.length - 1];
- let observer = new MutationObserver(mutations => {
+ let observer = new MutationObserver(() => {
observer.disconnect();
resolve();
});
diff --git a/browser/components/urlbar/tests/browser/browser.toml b/browser/components/urlbar/tests/browser/browser.toml
index a77a831fab..b9934aa838 100644
--- a/browser/components/urlbar/tests/browser/browser.toml
+++ b/browser/components/urlbar/tests/browser/browser.toml
@@ -314,7 +314,6 @@ support-files = [
["browser_oneOffs_heuristicRestyle.js"]
skip-if = [
"os == 'linux' && bits == 64 && !debug", # Bug 1775811
- "a11y_checks", # Bugs 1858041 and 1854661 to investigate intermittent a11y_checks results
]
["browser_oneOffs_keyModifiers.js"]
@@ -596,6 +595,8 @@ https_first_disabled = true
["browser_top_sites_private.js"]
https_first_disabled = true
+["browser_top_sites_switchtab.js"]
+
["browser_typed_value.js"]
["browser_unitConversion.js"]
diff --git a/browser/components/urlbar/tests/browser/browser_acknowledgeFeedbackAndDismissal.js b/browser/components/urlbar/tests/browser/browser_acknowledgeFeedbackAndDismissal.js
index 5ad8dfc75d..8c4b05501e 100644
--- a/browser/components/urlbar/tests/browser/browser_acknowledgeFeedbackAndDismissal.js
+++ b/browser/components/urlbar/tests/browser/browser_acknowledgeFeedbackAndDismissal.js
@@ -7,6 +7,10 @@
"use strict";
+// See the comment in the setup task for the expected index of the main test
+// result.
+const RESULT_INDEX = 2;
+
// The command that dismisses a single result.
const DISMISS_ONE_COMMAND = "dismiss-one";
@@ -20,18 +24,40 @@ const FEEDBACK_COMMAND = "show_less_frequently";
let gTestProvider;
add_setup(async function () {
+ // This test expects the following results in the following order:
+ //
+ // 1. The heuristic
+ // 2. A history result
+ // 3. A result from our test provider. This will be the main result we'll use
+ // during this test.
+ // 4. Another history result
+ //
+ // This ensures a couple things:
+ //
+ // * The main test result has rows above and below it. Feedback and dismissal
+ // acknowledgments in the main result row should not affect adjacent rows,
+ // except that when the dismissal acknowledgment itself is dismissed, it
+ // should be replaced by the row below it.
+ // * The main result does not have a row label (a.k.a. group label). There's a
+ // separate task that specifically checks the row label, and that way this
+ // test covers both cases, where the row does and does not have a row label.
gTestProvider = new TestProvider({
results: [
- new UrlbarResult(
- UrlbarUtils.RESULT_TYPE.URL,
- UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
- {
- url: "https://example.com/",
- isBlockable: true,
- blockL10n: {
- id: "urlbar-result-menu-dismiss-firefox-suggest",
- },
- }
+ Object.assign(
+ new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.URL,
+ UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
+ {
+ url: "https://example.com/",
+ isBlockable: true,
+ blockL10n: {
+ id: "urlbar-result-menu-dismiss-firefox-suggest",
+ },
+ }
+ ),
+ // This ensures the result is sandwiched between the two history results
+ // in the Firefox Suggest group.
+ { suggestedIndex: 1, isSuggestedIndexRelativeToGroup: true }
),
],
});
@@ -39,13 +65,15 @@ add_setup(async function () {
gTestProvider.commandCount = {};
UrlbarProvidersManager.registerProvider(gTestProvider);
- // Add a visit so that there's one result above the test result (the
- // heuristic) and one below (the visit) just to make sure removing the test
- // result doesn't mess up adjacent results.
await PlacesUtils.history.clear();
await PlacesUtils.bookmarks.eraseEverything();
await UrlbarTestUtils.formHistory.clear();
- await PlacesTestUtils.addVisits("https://example.com/aaa");
+
+ // Add visits for the two history results.
+ await PlacesTestUtils.addVisits([
+ "https://example.com/aaa",
+ "https://example.com/bbb",
+ ]);
registerCleanupFunction(() => {
UrlbarProvidersManager.unregisterProvider(gTestProvider);
@@ -72,13 +100,9 @@ add_task(async function acknowledgeDismissal_rowSelected() {
});
// Select the row.
- let resultIndex = await getTestResultIndex();
- while (gURLBar.view.selectedRowIndex != resultIndex) {
- this.EventUtils.synthesizeKey("KEY_ArrowDown");
- }
+ gURLBar.view.selectedRowIndex = RESULT_INDEX;
await doDismissTest({
- resultIndex,
command: DISMISS_ONE_COMMAND,
shouldBeSelected: true,
});
@@ -95,12 +119,14 @@ add_task(async function acknowledgeFeedbackAndDismissal() {
value: "test",
});
- let resultIndex = await getTestResultIndex();
- let details = await UrlbarTestUtils.getDetailsOfResultAt(window, resultIndex);
+ let details = await UrlbarTestUtils.getDetailsOfResultAt(
+ window,
+ RESULT_INDEX
+ );
// Click the feedback command.
await UrlbarTestUtils.openResultMenuAndClickItem(window, FEEDBACK_COMMAND, {
- resultIndex,
+ resultIndex: RESULT_INDEX,
});
Assert.equal(
@@ -121,7 +147,6 @@ add_task(async function acknowledgeFeedbackAndDismissal() {
info("Doing dismissal");
await doDismissTest({
- resultIndex,
command: DISMISS_ONE_COMMAND,
shouldBeSelected: true,
});
@@ -139,6 +164,29 @@ add_task(async function acknowledgeDismissal_all() {
});
});
+// When a row with a row label (a.k.a. group label) is dismissed, the dismissal
+// acknowledgment tip should retain the label. When the tip is then dismissed,
+// the row that replaces it should also retain the label.
+add_task(async function acknowledgeDismissal_rowLabel() {
+ // Show the result as the first row in the Firefox Suggest section so that it
+ // has the "Firefox Suggest" group label.
+ let { suggestedIndex } = gTestProvider.results[0];
+ gTestProvider.results[0].suggestedIndex = 0;
+
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "test",
+ });
+ await doDismissTest({
+ resultIndex: 1,
+ command: DISMISS_ALL_COMMAND,
+ shouldBeSelected: false,
+ expectedLabel: "Firefox Suggest",
+ });
+
+ gTestProvider.results[0].suggestedIndex = suggestedIndex;
+});
+
/**
* Does a dismissal test:
*
@@ -158,10 +206,25 @@ add_task(async function acknowledgeDismissal_all() {
* @param {number} options.resultIndex
* The index of the test result, if known beforehand. Leave -1 to find it
* automatically.
+ * @param {string} options.expectedLabel
+ * The row label (a.k.a. group label) the row is expected to have. This should
+ * be the expected translated en-US string, not an l10n object. If null, the
+ * row is expected not to have a row label at all.
*/
-async function doDismissTest({ command, shouldBeSelected, resultIndex = -1 }) {
- if (resultIndex < 0) {
- resultIndex = await getTestResultIndex();
+async function doDismissTest({
+ command,
+ shouldBeSelected,
+ resultIndex = 2,
+ expectedLabel = null,
+}) {
+ let details = await UrlbarTestUtils.getDetailsOfResultAt(window, resultIndex);
+ Assert.equal(
+ details.result.providerName,
+ gTestProvider.name,
+ "The test result should be at the expected index"
+ );
+ if (details.result.providerName != gTestProvider.name) {
+ return;
}
let selectedElement = gURLBar.view.selectedElement;
@@ -181,6 +244,9 @@ async function doDismissTest({ command, shouldBeSelected, resultIndex = -1 }) {
);
}
+ info("Checking the row label on the original row");
+ await checkRowLabel(resultIndex, expectedLabel);
+
let resultCount = UrlbarTestUtils.getResultCount(window);
// Click the command.
@@ -204,7 +270,7 @@ async function doDismissTest({ command, shouldBeSelected, resultIndex = -1 }) {
"The result count should not haved changed after dismissal"
);
- let details = await UrlbarTestUtils.getDetailsOfResultAt(window, resultIndex);
+ details = await UrlbarTestUtils.getDetailsOfResultAt(window, resultIndex);
Assert.equal(
details.type,
UrlbarUtils.RESULT_TYPE.TIP,
@@ -235,6 +301,9 @@ async function doDismissTest({ command, shouldBeSelected, resultIndex = -1 }) {
"Row should not have feedback acknowledgment after dismissal"
);
+ info("Checking the row label on the dismissal acknowledgment tip");
+ await checkRowLabel(resultIndex, expectedLabel);
+
// Get the dismissal acknowledgment's "Got it" button.
let gotItButton = UrlbarTestUtils.getButtonForResultIndex(
window,
@@ -284,6 +353,11 @@ async function doDismissTest({ command, shouldBeSelected, resultIndex = -1 }) {
);
}
+ info(
+ "Checking the row label on the row that replaced the dismissal acknowledgment tip"
+ );
+ await checkRowLabel(resultIndex, expectedLabel);
+
await UrlbarTestUtils.promisePopupClose(window);
}
@@ -291,7 +365,7 @@ async function doDismissTest({ command, shouldBeSelected, resultIndex = -1 }) {
* A provider that acknowledges feedback and dismissals.
*/
class TestProvider extends UrlbarTestUtils.TestProvider {
- getResultCommands(result) {
+ getResultCommands(_result) {
// The l10n values aren't important.
return [
{
@@ -347,15 +421,27 @@ class TestProvider extends UrlbarTestUtils.TestProvider {
}
}
-async function getTestResultIndex() {
- let index = 0;
- let resultCount = UrlbarTestUtils.getResultCount(window);
- for (; index < resultCount; index++) {
- let details = await UrlbarTestUtils.getDetailsOfResultAt(window, index);
- if (details.result.providerName == gTestProvider.name) {
- break;
- }
+async function checkRowLabel(resultIndex, expectedLabel) {
+ let details = await UrlbarTestUtils.getDetailsOfResultAt(window, resultIndex);
+ let { row } = details.element;
+ let before = getComputedStyle(row, "::before");
+
+ if (expectedLabel) {
+ Assert.equal(
+ before.content,
+ "attr(label)",
+ "::before content should use the row label"
+ );
+ Assert.equal(
+ row.getAttribute("label"),
+ expectedLabel,
+ "Row should have the expected label attribute"
+ );
+ } else {
+ Assert.equal(before.content, "none", "::before content should be 'none'");
+ Assert.ok(
+ !row.hasAttribute("label"),
+ "Row should not have a label attribute"
+ );
}
- Assert.less(index, resultCount, "The test result should be present");
- return index;
}
diff --git a/browser/components/urlbar/tests/browser/browser_add_search_engine.js b/browser/components/urlbar/tests/browser/browser_add_search_engine.js
index cfcaccfdd5..5ee41649ba 100644
--- a/browser/components/urlbar/tests/browser/browser_add_search_engine.js
+++ b/browser/components/urlbar/tests/browser/browser_add_search_engine.js
@@ -85,9 +85,6 @@ add_task(async function context_one() {
add_task(async function context_invalid() {
info("Checks the context menu with a page that offers an invalid engine.");
- await SpecialPowers.pushPrefEnv({
- set: [["prompts.contentPromptSubDialog", false]],
- });
let url = getRootDirectory(gTestPath) + "add_search_engine_invalid.html";
await BrowserTestUtils.withNewTab(url, async tab => {
@@ -321,5 +318,5 @@ function promiseEngine(expectedData, expectedEngineName) {
expectedEngineName == engine.wrappedJSObject.name
);
}
- ).then(([engine, data]) => engine);
+ ).then(([engine]) => engine);
}
diff --git a/browser/components/urlbar/tests/browser/browser_autoOpen.js b/browser/components/urlbar/tests/browser/browser_autoOpen.js
index bfe491fc61..19035e4149 100644
--- a/browser/components/urlbar/tests/browser/browser_autoOpen.js
+++ b/browser/components/urlbar/tests/browser/browser_autoOpen.js
@@ -41,7 +41,7 @@ add_setup(async function () {
add_task(async function test() {
await BrowserTestUtils.withNewTab(
{ gBrowser, url: "about:blank" },
- async browser => {
+ async () => {
await checkOpensOnFocus();
}
);
diff --git a/browser/components/urlbar/tests/browser/browser_bestMatch.js b/browser/components/urlbar/tests/browser/browser_bestMatch.js
index 21c97405a6..a21f81dfee 100644
--- a/browser/components/urlbar/tests/browser/browser_bestMatch.js
+++ b/browser/components/urlbar/tests/browser/browser_bestMatch.js
@@ -117,11 +117,7 @@ add_task(async function keySelection() {
});
});
-async function checkBestMatchRow({
- result,
- isSponsored = false,
- hasHelpUrl = false,
-}) {
+async function checkBestMatchRow({ result, hasHelpUrl = false }) {
Assert.equal(
UrlbarTestUtils.getResultCount(window),
1,
diff --git a/browser/components/urlbar/tests/browser/browser_blanking.js b/browser/components/urlbar/tests/browser/browser_blanking.js
index f68c4d894a..b5ec976eac 100644
--- a/browser/components/urlbar/tests/browser/browser_blanking.js
+++ b/browser/components/urlbar/tests/browser/browser_blanking.js
@@ -46,7 +46,7 @@ add_task(async function () {
await SpecialPowers.spawn(tab.linkedBrowser, [], async function () {
// This is sync, so by the time we return we should have changed the URL bar.
content.location.reload();
- }).catch(e => {
+ }).catch(() => {
// Ignore expected exception.
});
is(
diff --git a/browser/components/urlbar/tests/browser/browser_clipboard.js b/browser/components/urlbar/tests/browser/browser_clipboard.js
index f6127ef8d9..2332f595cc 100644
--- a/browser/components/urlbar/tests/browser/browser_clipboard.js
+++ b/browser/components/urlbar/tests/browser/browser_clipboard.js
@@ -19,8 +19,10 @@ add_setup(async function () {
["browser.urlbar.suggest.clipboard", true],
],
});
- registerCleanupFunction(() => {
+
+ registerCleanupFunction(async () => {
SpecialPowers.clipboardCopyString("");
+ await PlacesUtils.history.clear();
});
});
@@ -52,7 +54,7 @@ add_task(async function testFormattingOfClipboardSuggestion() {
await BrowserTestUtils.withNewTab(
{ gBrowser, url: "about:home" },
- async browser => {
+ async () => {
let { result } = await searchEmptyStringAndGetFirstRow();
Assert.equal(
@@ -73,6 +75,7 @@ add_task(async function testFormattingOfClipboardSuggestion() {
}
);
});
+
// Verifies that a valid URL copied to the clipboard results in the
// display of a corresponding suggestion in the URL bar as the first
// suggestion with accurate URL and icon. Also ensures that engaging
@@ -121,6 +124,7 @@ add_task(async function testUserEngagementWithClipboardSuggestion() {
await checkClipboardSuggestionAbsent(0);
}
);
+ await PlacesUtils.history.clear();
});
// This test confirms that dismissing the result from the result menu
@@ -347,3 +351,38 @@ add_task(async function testScalarAndStopWatchTelemetry() {
}
);
});
+
+add_task(async function emptySearch_withClipboardEntry() {
+ SpecialPowers.clipboardCopyString("https://example.com/1");
+ const MAX_RESULTS = 3;
+ let expectedHistoryResults = [];
+
+ for (let i = 0; i < MAX_RESULTS; i++) {
+ await PlacesTestUtils.addVisits([`http://mochi.test/${i}`]);
+ expectedHistoryResults.push(`http://mochi.test/${i}`);
+ }
+
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "",
+ });
+ await UrlbarTestUtils.enterSearchMode(window, {
+ source: UrlbarUtils.RESULT_SOURCE.HISTORY,
+ });
+
+ let urls = [];
+
+ for (let i = 0; i < UrlbarTestUtils.getResultCount(window); i++) {
+ let url = (await UrlbarTestUtils.getDetailsOfResultAt(window, i)).url;
+ urls.push(url);
+ }
+
+ urls.reverse();
+ Assert.deepEqual(expectedHistoryResults, urls);
+
+ await UrlbarTestUtils.exitSearchMode(window, { clickClose: true });
+ await UrlbarTestUtils.promisePopupClose(window);
+ });
+ await PlacesUtils.history.clear();
+});
diff --git a/browser/components/urlbar/tests/browser/browser_copy_during_load.js b/browser/components/urlbar/tests/browser/browser_copy_during_load.js
index 4a81ff08be..3eaa53bcda 100644
--- a/browser/components/urlbar/tests/browser/browser_copy_during_load.js
+++ b/browser/components/urlbar/tests/browser/browser_copy_during_load.js
@@ -13,7 +13,7 @@ add_task(async function () {
"http://www.example.com"
) + "slow-page.sjs";
- await BrowserTestUtils.withNewTab(gBrowser, async tab => {
+ await BrowserTestUtils.withNewTab(gBrowser, async () => {
gURLBar.focus();
gURLBar.value = SLOW_PAGE;
let promise = TestUtils.waitForCondition(
diff --git a/browser/components/urlbar/tests/browser/browser_copying.js b/browser/components/urlbar/tests/browser/browser_copying.js
index 111df58fd1..d9ad6ebaaf 100644
--- a/browser/components/urlbar/tests/browser/browser_copying.js
+++ b/browser/components/urlbar/tests/browser/browser_copying.js
@@ -727,7 +727,7 @@ add_task(async function loadingPageInBlank() {
async function waitForNewTabWithLoadRequest() {
return new Promise(resolve =>
gBrowser.addTabsProgressListener({
- onStateChange(aBrowser, aWebProgress, aRequest, aStateFlags, aStatus) {
+ onStateChange(aBrowser, aWebProgress, aRequest, aStateFlags) {
if (aStateFlags & Ci.nsIWebProgressListener.STATE_START) {
gBrowser.removeTabsProgressListener(this);
resolve(gBrowser.getTabForBrowser(aBrowser));
diff --git a/browser/components/urlbar/tests/browser/browser_dragdropURL.js b/browser/components/urlbar/tests/browser/browser_dragdropURL.js
index 52c19e8965..1e194ee6af 100644
--- a/browser/components/urlbar/tests/browser/browser_dragdropURL.js
+++ b/browser/components/urlbar/tests/browser/browser_dragdropURL.js
@@ -43,7 +43,7 @@ function simulateURLBarDrop(content) {
}
add_task(async function checkDragURL() {
- await BrowserTestUtils.withNewTab(TEST_URL, function (browser) {
+ await BrowserTestUtils.withNewTab(TEST_URL, function () {
info("Check dragging a normal url to the urlbar");
const DRAG_URL = "http://www.example.com/";
simulateURLBarDrop({ type: "text/plain", data: DRAG_URL });
@@ -61,7 +61,7 @@ add_task(async function checkDragURL() {
});
add_task(async function checkDragForbiddenURL() {
- await BrowserTestUtils.withNewTab(TEST_URL, function (browser) {
+ await BrowserTestUtils.withNewTab(TEST_URL, function () {
// See also browser_removeUnsafeProtocolsFromURLBarPaste.js for other
// examples. In general we trust that function, we pick some testcases to
// ensure we disallow dropping trimmed text.
diff --git a/browser/components/urlbar/tests/browser/browser_dynamicResults.js b/browser/components/urlbar/tests/browser/browser_dynamicResults.js
index 976ae3b9cb..aad15e0145 100644
--- a/browser/components/urlbar/tests/browser/browser_dynamicResults.js
+++ b/browser/components/urlbar/tests/browser/browser_dynamicResults.js
@@ -580,7 +580,7 @@ add_task(async function highlighting() {
addCallback(this, result);
}
- getViewUpdate(result, idsByName) {
+ getViewUpdate(_result, _idsByName) {
return {};
}
}
@@ -617,7 +617,7 @@ add_task(async function highlighting() {
* Provides a dynamic result with highlighted text that is then overridden.
*/
class TestHighlightProviderOveridden extends TestHighlightProvider {
- getViewUpdate(result, idsByName) {
+ getViewUpdate(_result, _idsByName) {
return {
text: {
textContent: "Test title",
@@ -904,7 +904,7 @@ class TestProvider extends UrlbarTestUtils.TestProvider {
};
}
- onEngagement(state, queryContext, details, controller) {
+ onEngagement(state, queryContext, details, _controller) {
if (this._pickPromiseResolve) {
let { result, element } = details;
this._pickPromiseResolve([result, element]);
diff --git a/browser/components/urlbar/tests/browser/browser_groupLabels.js b/browser/components/urlbar/tests/browser/browser_groupLabels.js
index 2b43990b77..d04b6bc194 100644
--- a/browser/components/urlbar/tests/browser/browser_groupLabels.js
+++ b/browser/components/urlbar/tests/browser/browser_groupLabels.js
@@ -139,7 +139,7 @@ add_task(async function generalBeforeSuggestions() {
add_task(async function generalBeforeSuggestions_suggestionsOnly() {
await PlacesUtils.history.clear();
- await withSuggestions(async engine => {
+ await withSuggestions(async () => {
await SpecialPowers.pushPrefEnv({
set: [[SUGGESTIONS_FIRST_PREF, false]],
});
@@ -196,7 +196,7 @@ add_task(async function suggestedIndex_only() {
let provider = new SuggestedIndexProvider(index);
UrlbarProvidersManager.registerProvider(provider);
- await withSuggestions(async engine => {
+ await withSuggestions(async () => {
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: "test",
diff --git a/browser/components/urlbar/tests/browser/browser_locationBarCommand.js b/browser/components/urlbar/tests/browser/browser_locationBarCommand.js
index 670b9741f4..84c45e586a 100644
--- a/browser/components/urlbar/tests/browser/browser_locationBarCommand.js
+++ b/browser/components/urlbar/tests/browser/browser_locationBarCommand.js
@@ -299,7 +299,7 @@ async function triggerCommand(eventType, details = {}) {
function promiseLoadStarted() {
return new Promise(resolve => {
gBrowser.addTabsProgressListener({
- onStateChange(browser, webProgress, req, flags, status) {
+ onStateChange(browser, webProgress, req, flags) {
if (flags & Ci.nsIWebProgressListener.STATE_START) {
gBrowser.removeTabsProgressListener(this);
resolve();
diff --git a/browser/components/urlbar/tests/browser/browser_locationBarExternalLoad.js b/browser/components/urlbar/tests/browser/browser_locationBarExternalLoad.js
index 5a44db54ce..13457db52e 100644
--- a/browser/components/urlbar/tests/browser/browser_locationBarExternalLoad.js
+++ b/browser/components/urlbar/tests/browser/browser_locationBarExternalLoad.js
@@ -52,7 +52,7 @@ function promiseLoaded(browser) {
});
}
-async function testURL(url, loadFunc, endFunc) {
+async function testURL(url, loadFunc) {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
let browser = tab.linkedBrowser;
@@ -70,7 +70,7 @@ async function testURL(url, loadFunc, endFunc) {
await SpecialPowers.spawn(
browser,
[{ isRemote: gMultiProcessBrowser }],
- async function (arg) {
+ async function () {
Assert.equal(
Services.focus.focusedElement,
null,
diff --git a/browser/components/urlbar/tests/browser/browser_locationchange_urlbar_edit_dos.js b/browser/components/urlbar/tests/browser/browser_locationchange_urlbar_edit_dos.js
index b50446a4c9..4e91069b4a 100644
--- a/browser/components/urlbar/tests/browser/browser_locationchange_urlbar_edit_dos.js
+++ b/browser/components/urlbar/tests/browser/browser_locationchange_urlbar_edit_dos.js
@@ -5,7 +5,7 @@
const TEST_URL = `${TEST_BASE_URL}file_urlbar_edit_dos.html`;
-async function checkURLBarValueStays(browser) {
+async function checkURLBarValueStays() {
gURLBar.select();
EventUtils.sendString("a");
is(gURLBar.value, "a", "URL bar value should match after sending a key");
diff --git a/browser/components/urlbar/tests/browser/browser_oneOffs_heuristicRestyle.js b/browser/components/urlbar/tests/browser/browser_oneOffs_heuristicRestyle.js
index 8f7f058dd8..6badfca72e 100644
--- a/browser/components/urlbar/tests/browser/browser_oneOffs_heuristicRestyle.js
+++ b/browser/components/urlbar/tests/browser/browser_oneOffs_heuristicRestyle.js
@@ -188,7 +188,7 @@ async function heuristicIsRestyled(
if (engine) {
Assert.equal(
resultDetails.image,
- engine.getIconURL() || UrlbarUtils.ICON.SEARCH_GLASS,
+ (await engine.getIconURL()) || UrlbarUtils.ICON.SEARCH_GLASS,
"The restyled result's icon should be the engine's icon."
);
} else if (source) {
diff --git a/browser/components/urlbar/tests/browser/browser_oneOffs_settings.js b/browser/components/urlbar/tests/browser/browser_oneOffs_settings.js
index b4b1e7006e..2def88b5f9 100644
--- a/browser/components/urlbar/tests/browser/browser_oneOffs_settings.js
+++ b/browser/components/urlbar/tests/browser/browser_oneOffs_settings.js
@@ -36,7 +36,7 @@ add_setup(async function () {
async function selectSettings(win, activateFn) {
await BrowserTestUtils.withNewTab(
{ gBrowser: win.gBrowser, url: "about:blank" },
- async browser => {
+ async () => {
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window: win,
value: "example.com",
diff --git a/browser/components/urlbar/tests/browser/browser_recentsearches.js b/browser/components/urlbar/tests/browser/browser_recentsearches.js
index e0ba5f684f..d2b91a3a53 100644
--- a/browser/components/urlbar/tests/browser/browser_recentsearches.js
+++ b/browser/components/urlbar/tests/browser/browser_recentsearches.js
@@ -6,10 +6,51 @@ const CONFIG_DEFAULT = [
{
webExtension: { id: "basic@search.mozilla.org" },
appliesTo: [{ included: { everywhere: true } }],
+ urls: {
+ trending: {
+ fullPath:
+ "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs",
+ query: "",
+ },
+ },
default: "yes",
},
];
+const CONFIG_DEFAULT_V2 = [
+ {
+ recordType: "engine",
+ identifier: "basic",
+ base: {
+ name: "basic",
+ urls: {
+ search: {
+ base: "https://example.com",
+ searchTermParamName: "q",
+ },
+ trending: {
+ base: "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs",
+ method: "GET",
+ },
+ },
+ },
+ variants: [
+ {
+ environment: { allRegionsAndLocales: true },
+ },
+ ],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "basic",
+ specificDefaults: [],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+];
+
const TOP_SITES = [
"https://example-1.com/",
"https://example-2.com/",
@@ -38,7 +79,9 @@ add_setup(async () => {
});
SearchTestUtils.useMockIdleService();
- await SearchTestUtils.updateRemoteSettingsConfig(CONFIG_DEFAULT);
+ await SearchTestUtils.updateRemoteSettingsConfig(
+ SearchUtils.newSearchConfigEnabled ? CONFIG_DEFAULT_V2 : CONFIG_DEFAULT
+ );
Services.telemetry.clearScalars();
registerCleanupFunction(async () => {
@@ -135,4 +178,53 @@ add_task(async () => {
Assert.equal(result.providerName, "RecentSearches");
await BrowserTestUtils.removeTab(tab);
+ await SpecialPowers.popPrefEnv();
+});
+
+// Test that triggering the help menu of trending suggestions does not
+// record that selection as a search.
+add_task(async () => {
+ await UrlbarTestUtils.formHistory.clear();
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.urlbar.suggest.topsites", false],
+ ["browser.urlbar.suggest.trending", true],
+ ["browser.urlbar.trending.featureGate", true],
+ ["browser.urlbar.trending.requireSearchMode", false],
+ ["app.support.baseURL", "https://example.com"],
+ ],
+ });
+
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ window.gBrowser,
+ "data:text/html,"
+ );
+
+ info("Open the urlbar and pick the help menu of a trending result.");
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "",
+ });
+
+ await UrlbarTestUtils.openResultMenuAndClickItem(window, "help", {
+ resultIndex: 1,
+ openByMouse: true,
+ });
+
+ info("Open the urlbar and check that a recent search has not been added.");
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "",
+ });
+
+ let { result } = await UrlbarTestUtils.getDetailsOfResultAt(window, 0);
+ Assert.notEqual(
+ result.providerName,
+ "RecentSearches",
+ "Click on help URL did not record a search"
+ );
+
+ await BrowserTestUtils.removeTab(gBrowser.selectedTab);
+ await BrowserTestUtils.removeTab(tab);
+ await SpecialPowers.popPrefEnv();
});
diff --git a/browser/components/urlbar/tests/browser/browser_redirect_error.js b/browser/components/urlbar/tests/browser/browser_redirect_error.js
index ae8dec3da6..5f5194e5fc 100644
--- a/browser/components/urlbar/tests/browser/browser_redirect_error.js
+++ b/browser/components/urlbar/tests/browser/browser_redirect_error.js
@@ -67,7 +67,7 @@ var gWebProgressListener = {
// onSecurityChange: function() {},
// ----------------------------------------------------------------------------
- onLocationChange(aWebProgress, aRequest, aLocation, aFlags) {
+ onLocationChange(aWebProgress, aRequest, aLocation) {
if (!aRequest) {
// This is bug 673752, or maybe initial "about:blank".
return;
diff --git a/browser/components/urlbar/tests/browser/browser_remove_match.js b/browser/components/urlbar/tests/browser/browser_remove_match.js
index b9e97044e4..503f01875c 100644
--- a/browser/components/urlbar/tests/browser/browser_remove_match.js
+++ b/browser/components/urlbar/tests/browser/browser_remove_match.js
@@ -186,7 +186,7 @@ add_task(async function test_searchMode_removeRestyledHistory() {
let url = `https://example.com/?q=${query}bar`;
await PlacesTestUtils.addVisits(url);
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: query,
diff --git a/browser/components/urlbar/tests/browser/browser_result_onSelection.js b/browser/components/urlbar/tests/browser/browser_result_onSelection.js
index 2a5f8c3760..04f2847591 100644
--- a/browser/components/urlbar/tests/browser/browser_result_onSelection.js
+++ b/browser/components/urlbar/tests/browser/browser_result_onSelection.js
@@ -48,7 +48,7 @@ add_task(async function test() {
let provider = new UrlbarTestUtils.TestProvider({
results,
priority: 1,
- onSelection: (result, element) => {
+ onSelection: () => {
selectionCount++;
},
});
diff --git a/browser/components/urlbar/tests/browser/browser_results_format_displayValue.js b/browser/components/urlbar/tests/browser/browser_results_format_displayValue.js
index d0ec3d3818..5575293d06 100644
--- a/browser/components/urlbar/tests/browser/browser_results_format_displayValue.js
+++ b/browser/components/urlbar/tests/browser/browser_results_format_displayValue.js
@@ -22,7 +22,7 @@ add_task(async function test_receive_punycode_result() {
addCallback(this, result);
}
- getViewUpdate(result, idsByName) {
+ getViewUpdate(_result, _idsByName) {
return {};
}
}
diff --git a/browser/components/urlbar/tests/browser/browser_retainedResultsOnFocus.js b/browser/components/urlbar/tests/browser/browser_retainedResultsOnFocus.js
index 3cc26a5757..fe3b24a675 100644
--- a/browser/components/urlbar/tests/browser/browser_retainedResultsOnFocus.js
+++ b/browser/components/urlbar/tests/browser/browser_retainedResultsOnFocus.js
@@ -95,7 +95,7 @@ async function test_window(win) {
// we just wait for the expected currentURI value.
await BrowserTestUtils.withNewTab(
{ gBrowser: win.gBrowser, url, waitForLoad: false },
- async browser => {
+ async () => {
await TestUtils.waitForCondition(
() => win.gBrowser.currentURI.spec == url,
"Ensure we're on the expected page"
diff --git a/browser/components/urlbar/tests/browser/browser_revert.js b/browser/components/urlbar/tests/browser/browser_revert.js
index b68ad0ff91..faa2d92366 100644
--- a/browser/components/urlbar/tests/browser/browser_revert.js
+++ b/browser/components/urlbar/tests/browser/browser_revert.js
@@ -7,7 +7,7 @@ add_task(async function () {
gBrowser,
url: "http://example.com",
},
- async function (browser) {
+ async function () {
let originalValue = gURLBar.value;
let tab = gBrowser.selectedTab;
info("Put a typed value.");
diff --git a/browser/components/urlbar/tests/browser/browser_searchMode_indicator.js b/browser/components/urlbar/tests/browser/browser_searchMode_indicator.js
index 707a4ea38e..f86b1527bf 100644
--- a/browser/components/urlbar/tests/browser/browser_searchMode_indicator.js
+++ b/browser/components/urlbar/tests/browser/browser_searchMode_indicator.js
@@ -196,7 +196,7 @@ add_task(async function escapeOnInitialPage() {
add_task(async function escapeOnBrowsingPage() {
info("Tests the indicator's interaction with the ESC key on browsing page");
- await BrowserTestUtils.withNewTab("http://example.com", async browser => {
+ await BrowserTestUtils.withNewTab("http://example.com", async () => {
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: TEST_QUERY,
@@ -355,7 +355,7 @@ add_task(async function menubar_item() {
// Tests that entering search mode invalidates pageproxystate and that
// pageproxystate remains invalid after exiting search mode.
add_task(async function invalidate_pageproxystate() {
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
await UrlbarTestUtils.promisePopupOpen(window, () => {
EventUtils.synthesizeMouseAtCenter(gURLBar.inputField, {});
});
diff --git a/browser/components/urlbar/tests/browser/browser_searchMode_indicator_clickthrough.js b/browser/components/urlbar/tests/browser/browser_searchMode_indicator_clickthrough.js
index 214448ee61..f53417834e 100644
--- a/browser/components/urlbar/tests/browser/browser_searchMode_indicator_clickthrough.js
+++ b/browser/components/urlbar/tests/browser/browser_searchMode_indicator_clickthrough.js
@@ -14,7 +14,7 @@ add_task(async function test() {
set: [["browser.search.suggest.enabled", false]],
});
- await BrowserTestUtils.withNewTab("about:robots", async browser => {
+ await BrowserTestUtils.withNewTab("about:robots", async () => {
// View open, with string.
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
@@ -69,7 +69,7 @@ add_task(async function test() {
Assert.ok(!BrowserTestUtils.isVisible(labelBox));
});
- await BrowserTestUtils.withNewTab("about:robots", async browser => {
+ await BrowserTestUtils.withNewTab("about:robots", async () => {
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: "test",
diff --git a/browser/components/urlbar/tests/browser/browser_searchMode_localOneOffs_actionText.js b/browser/components/urlbar/tests/browser/browser_searchMode_localOneOffs_actionText.js
index 2068d4c1d5..7b045e517c 100644
--- a/browser/components/urlbar/tests/browser/browser_searchMode_localOneOffs_actionText.js
+++ b/browser/components/urlbar/tests/browser/browser_searchMode_localOneOffs_actionText.js
@@ -94,7 +94,7 @@ add_task(async function localOneOff() {
);
Assert.equal(
result.image,
- oneOffButtons.selectedButton.engine.getIconURL(),
+ await oneOffButtons.selectedButton.engine.getIconURL(),
"Check the heuristic icon"
);
diff --git a/browser/components/urlbar/tests/browser/browser_searchMode_suggestions.js b/browser/components/urlbar/tests/browser/browser_searchMode_suggestions.js
index 6e9b3c1031..607cd220a1 100644
--- a/browser/components/urlbar/tests/browser/browser_searchMode_suggestions.js
+++ b/browser/components/urlbar/tests/browser/browser_searchMode_suggestions.js
@@ -74,7 +74,7 @@ add_setup(async function () {
});
add_task(async function emptySearch() {
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
await SpecialPowers.pushPrefEnv({
set: [["browser.urlbar.update2.emptySearchBehavior", 2]],
});
@@ -109,7 +109,7 @@ add_task(async function emptySearch_withRestyledHistory() {
// Can be restyled but does not dupe form history.
"http://mochi.test:8888/?terms=ciao",
]);
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
await SpecialPowers.pushPrefEnv({
set: [["browser.urlbar.update2.emptySearchBehavior", 2]],
});
@@ -162,7 +162,7 @@ add_task(async function emptySearch_withRestyledHistory_noSearchHistory() {
// Can be restyled but does not dupe form history.
"http://mochi.test:8888/?terms=ciao",
]);
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
await SpecialPowers.pushPrefEnv({
set: [
["browser.urlbar.update2.emptySearchBehavior", 2],
@@ -204,7 +204,7 @@ add_task(async function emptySearch_behavior() {
// URLs with the same host as the search engine.
await PlacesTestUtils.addVisits([`http://mochi.test/`]);
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
await SpecialPowers.pushPrefEnv({
set: [["browser.urlbar.update2.emptySearchBehavior", 0]],
});
@@ -245,7 +245,7 @@ add_task(async function emptySearch_behavior() {
await SpecialPowers.popPrefEnv();
});
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
await SpecialPowers.pushPrefEnv({
set: [["browser.urlbar.update2.emptySearchBehavior", 1]],
});
@@ -269,7 +269,7 @@ add_task(async function emptySearch_behavior() {
add_task(async function emptySearch_local() {
await PlacesTestUtils.addVisits([`http://mochi.test/`]);
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
await SpecialPowers.pushPrefEnv({
set: [["browser.urlbar.update2.emptySearchBehavior", 0]],
});
@@ -300,7 +300,7 @@ add_task(async function emptySearch_local() {
});
add_task(async function nonEmptySearch() {
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
let query = "hello";
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
@@ -348,7 +348,7 @@ add_task(async function nonEmptySearch() {
});
add_task(async function nonEmptySearch_nonMatching() {
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
let query = "ciao";
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
@@ -422,7 +422,7 @@ add_task(async function nonEmptySearch_withHistory() {
};
}
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
value: query,
@@ -520,7 +520,7 @@ add_task(async function nonEmptySearch_withHistory() {
});
add_task(async function nonEmptySearch_url() {
- await BrowserTestUtils.withNewTab("about:robots", async function (browser) {
+ await BrowserTestUtils.withNewTab("about:robots", async function () {
let query = "http://www.example.com/";
await UrlbarTestUtils.promiseAutocompleteResultPopup({
window,
diff --git a/browser/components/urlbar/tests/browser/browser_searchSingleWordNotification.js b/browser/components/urlbar/tests/browser/browser_searchSingleWordNotification.js
index 36a065d58e..f217915939 100644
--- a/browser/components/urlbar/tests/browser/browser_searchSingleWordNotification.js
+++ b/browser/components/urlbar/tests/browser/browser_searchSingleWordNotification.js
@@ -62,7 +62,7 @@ async function runURLBarSearchTest({
for (let i = 0; i < setValueFns.length; ++i) {
await setValueFns[i](valueToOpen);
let topic = "uri-fixup-check-dns";
- let observer = (aSubject, aTopicInner, aData) => {
+ let observer = (aSubject, aTopicInner) => {
if (aTopicInner == topic) {
gDNSResolved = true;
}
@@ -248,7 +248,7 @@ function get_test_function_for_localhost_with_hostname(
gBrowser: win.gBrowser,
url: "about:blank",
},
- browser =>
+ () =>
runURLBarSearchTest({
valueToOpen: hostName,
expectSearch: true,
@@ -268,7 +268,7 @@ function get_test_function_for_localhost_with_hostname(
gBrowser: win.gBrowser,
url: "about:blank",
},
- browser =>
+ () =>
runURLBarSearchTest({
valueToOpen: hostName,
expectSearch: true,
@@ -289,7 +289,7 @@ function get_test_function_for_localhost_with_hostname(
gBrowser: win.gBrowser,
url: "about:blank",
},
- browser =>
+ () =>
runURLBarSearchTest({
valueToOpen: hostName,
expectSearch: isPrivate,
@@ -325,7 +325,7 @@ add_task(async function test_dnsResolveSingleWordsAfterSearch() {
gBrowser,
url: "about:blank",
},
- browser =>
+ () =>
runURLBarSearchTest({
valueToOpen: "localhost",
expectSearch: true,
diff --git a/browser/components/urlbar/tests/browser/browser_search_continuation.js b/browser/components/urlbar/tests/browser/browser_search_continuation.js
index 8a24d57856..19c853c2e5 100644
--- a/browser/components/urlbar/tests/browser/browser_search_continuation.js
+++ b/browser/components/urlbar/tests/browser/browser_search_continuation.js
@@ -21,6 +21,65 @@ const CONFIG_DEFAULT = [
},
];
+const CONFIG_V2 = [
+ {
+ recordType: "engine",
+ identifier: "basic",
+ base: {
+ name: "basic",
+ urls: {
+ search: {
+ base: "https://example.com",
+ searchTermParamName: "q",
+ },
+ trending: {
+ base: "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs",
+ method: "GET",
+ },
+ },
+ aliases: ["basic"],
+ },
+ variants: [
+ {
+ environment: { allRegionsAndLocales: true },
+ },
+ ],
+ },
+ {
+ recordType: "engine",
+ identifier: "private",
+ base: {
+ name: "private",
+ urls: {
+ search: {
+ base: "https://example.com",
+ searchTermParamName: "q",
+ },
+ suggestions: {
+ base: "https://example.com",
+ method: "GET",
+ searchTermParamName: "search",
+ },
+ },
+ aliases: ["private"],
+ },
+ variants: [
+ {
+ environment: { allRegionsAndLocales: true },
+ },
+ ],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "basic",
+ specificDefaults: [],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+];
+
add_setup(async () => {
await SpecialPowers.pushPrefEnv({
set: [
@@ -39,7 +98,10 @@ add_setup(async () => {
});
await UrlbarTestUtils.formHistory.clear();
- await SearchTestUtils.setupTestEngines("search-engines", CONFIG_DEFAULT);
+ await SearchTestUtils.setupTestEngines(
+ "search-engines",
+ SearchUtils.newSearchConfigEnabled ? CONFIG_V2 : CONFIG_DEFAULT
+ );
registerCleanupFunction(async () => {
await UrlbarTestUtils.formHistory.clear();
diff --git a/browser/components/urlbar/tests/browser/browser_selectStaleResults.js b/browser/components/urlbar/tests/browser/browser_selectStaleResults.js
index c381478712..97f3768881 100644
--- a/browser/components/urlbar/tests/browser/browser_selectStaleResults.js
+++ b/browser/components/urlbar/tests/browser/browser_selectStaleResults.js
@@ -258,7 +258,7 @@ add_task(async function staleReplacedWithFresh() {
// test2
// test1
let mutationPromise = new Promise(resolve => {
- let observer = new MutationObserver(mutations => {
+ let observer = new MutationObserver(() => {
let row = UrlbarTestUtils.getRowAt(window, maxResults - 2);
if (row && row._elements.get("title").textContent == "test2") {
observer.disconnect();
diff --git a/browser/components/urlbar/tests/browser/browser_shortcuts_add_search_engine.js b/browser/components/urlbar/tests/browser/browser_shortcuts_add_search_engine.js
index 92eebf1997..43a3f7de9f 100644
--- a/browser/components/urlbar/tests/browser/browser_shortcuts_add_search_engine.js
+++ b/browser/components/urlbar/tests/browser/browser_shortcuts_add_search_engine.js
@@ -206,7 +206,7 @@ function promiseEngine(expectedData, expectedEngineName) {
expectedEngineName == engine.wrappedJSObject.name
);
}
- ).then(([engine, data]) => engine);
+ ).then(([engine]) => engine);
}
add_task(async function shortcuts_without_other_engines() {
diff --git a/browser/components/urlbar/tests/browser/browser_speculative_connect_not_with_client_cert.js b/browser/components/urlbar/tests/browser/browser_speculative_connect_not_with_client_cert.js
index 62aec6f67a..36c8c23330 100644
--- a/browser/components/urlbar/tests/browser/browser_speculative_connect_not_with_client_cert.js
+++ b/browser/components/urlbar/tests/browser/browser_speculative_connect_not_with_client_cert.js
@@ -57,7 +57,7 @@ class SecurityObserver {
this.output = output;
}
- onHandshakeDone(socket, status) {
+ onHandshakeDone() {
info("TLS handshake done");
handshakeDone = true;
diff --git a/browser/components/urlbar/tests/browser/browser_stop.js b/browser/components/urlbar/tests/browser/browser_stop.js
index 285071a3ff..84667eaa53 100644
--- a/browser/components/urlbar/tests/browser/browser_stop.js
+++ b/browser/components/urlbar/tests/browser/browser_stop.js
@@ -57,7 +57,7 @@ async function typeAndSubmitAndStop(url) {
// urlbar value has been updated, add our own progress listener here.
let progressPromise = new Promise(resolve => {
let listener = {
- onStateChange(browser, webProgress, request, stateFlags, status) {
+ onStateChange(browser, webProgress, request, stateFlags) {
if (
webProgress.isTopLevel &&
stateFlags & Ci.nsIWebProgressListener.STATE_STOP
diff --git a/browser/components/urlbar/tests/browser/browser_strip_on_share.js b/browser/components/urlbar/tests/browser/browser_strip_on_share.js
index 508106ccdc..9e045cee9c 100644
--- a/browser/components/urlbar/tests/browser/browser_strip_on_share.js
+++ b/browser/components/urlbar/tests/browser/browser_strip_on_share.js
@@ -112,7 +112,7 @@ async function testMenuItemDisabled(url, prefEnabled, selection) {
await SpecialPowers.pushPrefEnv({
set: [["privacy.query_stripping.strip_on_share.enabled", prefEnabled]],
});
- await BrowserTestUtils.withNewTab(url, async function (browser) {
+ await BrowserTestUtils.withNewTab(url, async function () {
gURLBar.focus();
if (selection) {
//select only part of the url
@@ -175,7 +175,7 @@ async function testMenuItemEnabled({
await listService.testSetList(testJson);
}
- await BrowserTestUtils.withNewTab(validUrl, async function (browser) {
+ await BrowserTestUtils.withNewTab(validUrl, async function () {
gURLBar.focus();
if (selectWholeUrl) {
gURLBar.select();
diff --git a/browser/components/urlbar/tests/browser/browser_strip_on_share_telemetry.js b/browser/components/urlbar/tests/browser/browser_strip_on_share_telemetry.js
index 48a8b6c729..7b6fb53e3b 100644
--- a/browser/components/urlbar/tests/browser/browser_strip_on_share_telemetry.js
+++ b/browser/components/urlbar/tests/browser/browser_strip_on_share_telemetry.js
@@ -80,7 +80,7 @@ add_task(async function testMultiQueryParams() {
});
async function testStripOnShare(validUrl, strippedUrl) {
- await BrowserTestUtils.withNewTab(validUrl, async function (browser) {
+ await BrowserTestUtils.withNewTab(validUrl, async function () {
gURLBar.focus();
gURLBar.select();
let menuitem = await promiseContextualMenuitem("strip-on-share");
diff --git a/browser/components/urlbar/tests/browser/browser_switchTab_inputHistory.js b/browser/components/urlbar/tests/browser/browser_switchTab_inputHistory.js
index 0da3161d0e..3dab8e7e64 100644
--- a/browser/components/urlbar/tests/browser/browser_switchTab_inputHistory.js
+++ b/browser/components/urlbar/tests/browser/browser_switchTab_inputHistory.js
@@ -25,16 +25,15 @@ add_task(async function test_adaptive_with_search_term_and_switch_tab() {
info(`Load tabs in same order as urls`);
let tabs = [];
+ let waitForVisits = PlacesTestUtils.waitForNotification(
+ "page-visited",
+ events => events.some(e => e.url === urls[3])
+ );
for (let url of urls) {
- let tabPromise = BrowserTestUtils.waitForNewTab(gBrowser, url, false, true);
- gBrowser.loadTabs([url], {
- inBackground: true,
- triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(),
- });
-
- let tab = await tabPromise;
- tabs.push(tab);
+ tabs.push(await BrowserTestUtils.openNewForegroundTab({ gBrowser, url }));
}
+ // Ensure visits have been added.
+ await waitForVisits;
info(`Switch to tab 0`);
await BrowserTestUtils.switchTab(gBrowser, tabs[0]);
@@ -89,3 +88,57 @@ add_task(async function test_adaptive_with_search_term_and_switch_tab() {
BrowserTestUtils.removeTab(tab);
}
});
+
+add_task(
+ async function test_adaptive_nonadaptive_container_dedupe_switch_tab() {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["privacy.userContext.enabled", true],
+ ["browser.urlbar.switchTabs.searchAllContainers", true],
+ ],
+ });
+ // Add a url both to history and input history, ensure that the Muxer will
+ // properly dedupe the 2 entries, also with containers involved.
+ await PlacesUtils.history.clear();
+ const url = "https://example.com/";
+
+ let promiseVisited = PlacesTestUtils.waitForNotification(
+ "page-visited",
+ events => events.some(e => e.url === url)
+ );
+ let tab = BrowserTestUtils.addTab(gBrowser, url, { userContextId: 1 });
+ await promiseVisited;
+
+ async function queryAndCheckOneSwitchTabResult() {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "xampl",
+ });
+ Assert.equal(
+ 2,
+ UrlbarTestUtils.getResultCount(window),
+ "Check number of results"
+ );
+ let result = await UrlbarTestUtils.getDetailsOfResultAt(window, 1);
+ Assert.equal(url, result.url, `Url is the first non-heuristic result`);
+ Assert.equal(
+ UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
+ result.type,
+ "Should be a switch tab result"
+ );
+ Assert.equal(
+ 1,
+ result.result.payload.userContextId,
+ "Should use the expected container"
+ );
+ }
+ info("Check the tab is returned as history by a search.");
+ await queryAndCheckOneSwitchTabResult();
+ info("Add the same url to input history.");
+ await UrlbarUtils.addToInputHistory(url, "xampl");
+ info("Repeat the query.");
+ await queryAndCheckOneSwitchTabResult();
+ BrowserTestUtils.removeTab(tab);
+ await SpecialPowers.popPrefEnv();
+ }
+);
diff --git a/browser/components/urlbar/tests/browser/browser_switchTab_override.js b/browser/components/urlbar/tests/browser/browser_switchTab_override.js
index 66426a154b..507c975cba 100644
--- a/browser/components/urlbar/tests/browser/browser_switchTab_override.js
+++ b/browser/components/urlbar/tests/browser/browser_switchTab_override.js
@@ -54,7 +54,7 @@ add_task(async function test_switchtab_override() {
info("Override switch-to-tab");
let deferred = Promise.withResolvers();
// In case of failure this would switch tab.
- let onTabSelect = event => {
+ let onTabSelect = () => {
deferred.reject(new Error("Should have overridden switch to tab"));
};
gBrowser.tabContainer.addEventListener("TabSelect", onTabSelect);
diff --git a/browser/components/urlbar/tests/browser/browser_tabMatchesInAwesomebar.js b/browser/components/urlbar/tests/browser/browser_tabMatchesInAwesomebar.js
index 354cd3a802..94d46b3b81 100644
--- a/browser/components/urlbar/tests/browser/browser_tabMatchesInAwesomebar.js
+++ b/browser/components/urlbar/tests/browser/browser_tabMatchesInAwesomebar.js
@@ -138,7 +138,7 @@ function loadTab(tab, url) {
// Because adding visits is async, we will not be notified immediately.
let loaded = BrowserTestUtils.browserLoaded(tab.linkedBrowser);
let visited = new Promise(resolve => {
- Services.obs.addObserver(function observer(aSubject, aTopic, aData) {
+ Services.obs.addObserver(function observer(aSubject, aTopic) {
if (url != aSubject.QueryInterface(Ci.nsIURI).spec) {
return;
}
diff --git a/browser/components/urlbar/tests/browser/browser_tabToSearch.js b/browser/components/urlbar/tests/browser/browser_tabToSearch.js
index a336980583..deba60ea1e 100644
--- a/browser/components/urlbar/tests/browser/browser_tabToSearch.js
+++ b/browser/components/urlbar/tests/browser/browser_tabToSearch.js
@@ -284,14 +284,14 @@ add_task(async function tab_key_race() {
get type() {
return UrlbarUtils.PROVIDER_TYPE.PROFILE;
}
- isActive(context) {
+ isActive(_context) {
executeSoon(resolve);
return false;
}
- isRestricting(context) {
+ isRestricting(_context) {
return false;
}
- async startQuery(context, addCallback) {
+ async startQuery(_context, _addCallback) {
// Nothing to do.
}
}
diff --git a/browser/components/urlbar/tests/browser/browser_top_sites_switchtab.js b/browser/components/urlbar/tests/browser/browser_top_sites_switchtab.js
new file mode 100644
index 0000000000..d4edce0f11
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_top_sites_switchtab.js
@@ -0,0 +1,209 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Test that TopSites are showing an appropriate Switch-tab status, depending
+ * on the state of the `browser.urlbar.switchTabs.searchAllContainers` pref.
+ * When the feature is enabled, in a normal window they should show the
+ * tab container, otherwise it's only possible to switch to a tab in the same
+ * container.
+ * In private windows it's only possible to switch to private tabs in the
+ * private container. Similarly non-private windows don't see private tabs.
+ * This test is not checking that switching to the appropriate tab works as that
+ * is already covered by other tests.
+ */
+
+ChromeUtils.defineESModuleGetters(this, {
+ AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs",
+ NewTabUtils: "resource://gre/modules/NewTabUtils.sys.mjs",
+});
+
+const EN_US_TOPSITES =
+ "https://www.youtube.com/,https://www.facebook.com/,https://www.amazon.com/,https://www.reddit.com/";
+const OUR_TOPSITE_URL = "https://example.com/";
+const REF_TOPSITE_URL = OUR_TOPSITE_URL + "#someref";
+const TOPSITES_COUNT = EN_US_TOPSITES.split(",").length + 1;
+
+add_setup(async function () {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.urlbar.suggest.topsites", true],
+ ["browser.urlbar.suggest.quickactions", false],
+ ["browser.newtabpage.activity-stream.default.sites", EN_US_TOPSITES],
+ ],
+ });
+ registerCleanupFunction(PlacesUtils.history.clear);
+});
+
+add_task(async function test_ignoreRef() {
+ info("Add some visits to a URL.");
+ await addAsFirstTopSite(REF_TOPSITE_URL);
+
+ for (let val of [true, false]) {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.urlbar.switchTabs.searchAllContainers", val]],
+ });
+ info("Test with searchAllContainer set to " + val.toString());
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ REF_TOPSITE_URL
+ );
+ // Switch back to the originating tab, to check for switch to the current tab.
+ await BrowserTestUtils.switchTab(gBrowser, gBrowser.tabs[0]);
+ await openAddressBarAndCheckResults(window, TOPSITES_COUNT, new Set([0]));
+ await BrowserTestUtils.removeTab(tab);
+ await SpecialPowers.popPrefEnv();
+ }
+ await PlacesUtils.history.remove(REF_TOPSITE_URL);
+});
+
+add_task(async function test_topSitesTabSwitch() {
+ await addAsFirstTopSite(OUR_TOPSITE_URL);
+
+ for (let val of [true, false]) {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.urlbar.switchTabs.searchAllContainers", val]],
+ });
+ info("Test with searchAllContainer set to " + val.toString());
+ await doTest();
+ await SpecialPowers.popPrefEnv();
+ }
+ await PlacesUtils.history.remove(OUR_TOPSITE_URL);
+});
+
+async function doTest() {
+ info("Non-private window");
+ // Add a normal tab and a container tab.
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ OUR_TOPSITE_URL
+ );
+ let containerTab = await loadNewForegroundContainerTab(OUR_TOPSITE_URL, 1);
+ // Switch back to the originating tab, to check for switch to the current tab.
+ await BrowserTestUtils.switchTab(gBrowser, gBrowser.tabs[0]);
+ let expectedUserContextIds = UrlbarPrefs.get("switchTabs.searchAllContainers")
+ ? new Set([0, 1])
+ : new Set([0]);
+ await openAddressBarAndCheckResults(
+ window,
+ TOPSITES_COUNT + expectedUserContextIds.size - 1,
+ expectedUserContextIds
+ );
+
+ info("Private window");
+ let pbWin = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+ await openAddressBarAndCheckResults(pbWin, TOPSITES_COUNT, new Set());
+
+ info("Close the original tab and open the url in the private window instead");
+ await BrowserTestUtils.removeTab(tab);
+ await BrowserTestUtils.openNewForegroundTab(pbWin.gBrowser, OUR_TOPSITE_URL);
+ // Switch back to the originating tab, to check for switch to the current tab.
+ await BrowserTestUtils.switchTab(pbWin.gBrowser, pbWin.gBrowser.tabs[0]);
+ await openAddressBarAndCheckResults(
+ window,
+ TOPSITES_COUNT,
+ UrlbarPrefs.get("switchTabs.searchAllContainers") ? new Set([1]) : new Set()
+ );
+ await openAddressBarAndCheckResults(pbWin, TOPSITES_COUNT, new Set([-1]));
+
+ // We're done with the private window.
+ await BrowserTestUtils.closeWindow(pbWin);
+
+ info("Check Top sites in the same container tab");
+ let blankSameContainerTab = await loadNewForegroundContainerTab(
+ "about:blank",
+ 1
+ );
+ await openAddressBarAndCheckResults(window, TOPSITES_COUNT, new Set([1]));
+ await BrowserTestUtils.removeTab(blankSameContainerTab);
+
+ info("Check Top sites in a different container tab");
+ let blankDiffContainerTab = await loadNewForegroundContainerTab(
+ "about:blank",
+ 2
+ );
+ await openAddressBarAndCheckResults(
+ window,
+ TOPSITES_COUNT,
+ UrlbarPrefs.get("switchTabs.searchAllContainers") ? new Set([1]) : new Set()
+ );
+ await BrowserTestUtils.removeTab(blankDiffContainerTab);
+
+ await BrowserTestUtils.removeTab(containerTab);
+}
+
+async function openAddressBarAndCheckResults(
+ win,
+ expectedResultCount,
+ expectedTabSwitchUserContextIds
+) {
+ info("Open zero-prefix results.");
+ await UrlbarTestUtils.promisePopupOpen(win, () => {
+ win.gURLBar.blur();
+ if (win.gURLBar.getAttribute("pageproxystate") == "invalid") {
+ win.gURLBar.handleRevert();
+ }
+ EventUtils.synthesizeMouseAtCenter(win.gURLBar.inputField, {}, win);
+ });
+ await UrlbarTestUtils.promiseSearchComplete(win);
+ let resultCount = UrlbarTestUtils.getResultCount(win);
+ Assert.equal(expectedResultCount, resultCount, "Check number of results.");
+
+ for (let i = 0; i < resultCount; ++i) {
+ let result = await UrlbarTestUtils.getDetailsOfResultAt(win, i);
+
+ if (result.url != "https://example.com/") {
+ // We don't care about other top sites.
+ continue;
+ }
+
+ if (!expectedTabSwitchUserContextIds.size) {
+ // No more tab switch results expected.
+ Assert.notEqual(
+ UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
+ result.type,
+ "Should not be a tab switch result."
+ );
+ continue;
+ }
+
+ // Must be a tab switch result with an expected userContextId.
+ Assert.equal(
+ UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
+ result.type,
+ "Should be a tab switch result."
+ );
+ let hasUserContextId = expectedTabSwitchUserContextIds.delete(
+ result.userContextId
+ );
+ Assert.ok(
+ hasUserContextId,
+ `UserContextId ${result.userContextId} tab switch was expected in
+ ${expectedTabSwitchUserContextIds}`
+ );
+ }
+}
+
+async function addAsFirstTopSite(url) {
+ info("Add some visits to a URL.");
+ await PlacesTestUtils.addVisits(Array(10).fill(url));
+ info("Add top sites and await for our page to be the first");
+ await updateTopSites(sites => {
+ return sites && sites.length == TOPSITES_COUNT && sites[0].url == url;
+ });
+}
+
+async function loadNewForegroundContainerTab(url, userContextId, win = window) {
+ let tab = BrowserTestUtils.addTab(win.gBrowser, url, {
+ userContextId,
+ });
+ await Promise.all([
+ BrowserTestUtils.browserLoaded(tab.linkedBrowser),
+ BrowserTestUtils.switchTab(win.gBrowser, tab),
+ ]);
+ return tab;
+}
diff --git a/browser/components/urlbar/tests/browser/browser_urlbar_telemetry_dynamic.js b/browser/components/urlbar/tests/browser/browser_urlbar_telemetry_dynamic.js
index d4f4e77d57..1eef6fc0e0 100644
--- a/browser/components/urlbar/tests/browser/browser_urlbar_telemetry_dynamic.js
+++ b/browser/components/urlbar/tests/browser/browser_urlbar_telemetry_dynamic.js
@@ -39,7 +39,7 @@ class TestProvider extends UrlbarTestUtils.TestProvider {
});
}
- getViewUpdate(result, idsByName) {
+ getViewUpdate(_result, _idsByName) {
return {
title: {
textContent: "This is a dynamic result.",
diff --git a/browser/components/urlbar/tests/browser/browser_urlbar_telemetry_tip.js b/browser/components/urlbar/tests/browser/browser_urlbar_telemetry_tip.js
index 345b063441..66ddb225fb 100644
--- a/browser/components/urlbar/tests/browser/browser_urlbar_telemetry_tip.js
+++ b/browser/components/urlbar/tests/browser/browser_urlbar_telemetry_tip.js
@@ -115,10 +115,10 @@ class TipProvider extends UrlbarProvider {
get type() {
return UrlbarUtils.PROVIDER_TYPE.PROFILE;
}
- isActive(context) {
+ isActive(_context) {
return true;
}
- getPriority(context) {
+ getPriority(_context) {
return 1;
}
async startQuery(context, addCallback) {
diff --git a/browser/components/urlbar/tests/browser/browser_valueOnTabSwitch.js b/browser/components/urlbar/tests/browser/browser_valueOnTabSwitch.js
index ba249adb3b..03afeb3410 100644
--- a/browser/components/urlbar/tests/browser/browser_valueOnTabSwitch.js
+++ b/browser/components/urlbar/tests/browser/browser_valueOnTabSwitch.js
@@ -90,7 +90,7 @@ add_task(async function () {
}
function urlbarBackspace(removeAll) {
- return new Promise((resolve, reject) => {
+ return new Promise(resolve => {
gBrowser.selectedBrowser.focus();
gURLBar.addEventListener(
"input",
diff --git a/browser/components/urlbar/tests/browser/browser_view_removedSelectedElement.js b/browser/components/urlbar/tests/browser/browser_view_removedSelectedElement.js
index 532f9e10a2..8ccb49d4ae 100644
--- a/browser/components/urlbar/tests/browser/browser_view_removedSelectedElement.js
+++ b/browser/components/urlbar/tests/browser/browser_view_removedSelectedElement.js
@@ -25,7 +25,7 @@ add_task(async function () {
let firstSelectedElement;
let delayResultsPromise = new Promise(resolve => {
gURLBar.controller.addQueryListener({
- async onQueryResults(queryContext) {
+ async onQueryResults() {
Assert.ok(!receivedResults, "Should execute only once");
gURLBar.controller.removeQueryListener(this);
receivedResults = true;
diff --git a/browser/components/urlbar/tests/browser/browser_view_selectionByMouse.js b/browser/components/urlbar/tests/browser/browser_view_selectionByMouse.js
index fc617220b6..10110a8928 100644
--- a/browser/components/urlbar/tests/browser/browser_view_selectionByMouse.js
+++ b/browser/components/urlbar/tests/browser/browser_view_selectionByMouse.js
@@ -324,6 +324,9 @@ add_task(async function withDnsFirstForSingleWordsPref() {
url: "https://example.org/",
title: "example",
});
+ // An unvisited bookmark may have a lower ranking than a page visited many
+ // times, so let's clear history to ensure our bookmark is autofilled.
+ await PlacesUtils.history.clear();
await PlacesFrecencyRecalculator.recalculateAnyOutdatedFrecencies();
await UrlbarTestUtils.promiseAutocompleteResultPopup({
@@ -333,13 +336,13 @@ add_task(async function withDnsFirstForSingleWordsPref() {
const details = await UrlbarTestUtils.getDetailsOfResultAt(window, 0);
const target = details.element.action;
- EventUtils.synthesizeMouseAtCenter(target, { type: "mousedown" });
+
const onLoaded = BrowserTestUtils.browserLoaded(
gBrowser.selectedBrowser,
false,
"https://example.org/"
);
- EventUtils.synthesizeMouseAtCenter(target, { type: "mouseup" });
+ EventUtils.synthesizeMouseAtCenter(target, {});
await onLoaded;
Assert.ok(true, "Expected page is opened");
diff --git a/browser/components/urlbar/tests/browser/head.js b/browser/components/urlbar/tests/browser/head.js
index a81e8e4811..f78624e68e 100644
--- a/browser/components/urlbar/tests/browser/head.js
+++ b/browser/components/urlbar/tests/browser/head.js
@@ -67,7 +67,7 @@ function waitForLoadStartOrTimeout(win = window, timeoutMs = 1000) {
return Promise.race([
new Promise(resolve => {
listener = {
- onStateChange(browser, webprogress, request, flags, status) {
+ onStateChange(browser, webprogress, request, flags) {
if (flags & Ci.nsIWebProgressListener.STATE_START) {
resolve(request.QueryInterface(Ci.nsIChannel).URI);
}
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser.toml b/browser/components/urlbar/tests/engagementTelemetry/browser/browser.toml
index 68a7881399..cf6bc80318 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser.toml
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/browser.toml
@@ -26,6 +26,8 @@ prefs = ["browser.bookmarks.testing.skipDefaultBookmarksImport=true"]
["browser_glean_telemetry_abandonment_n_chars_n_words.js"]
+["browser_glean_telemetry_abandonment_type.js"]
+
["browser_glean_telemetry_abandonment_sap.js"]
["browser_glean_telemetry_abandonment_search_engine_default_id.js"]
@@ -64,24 +66,4 @@ skip-if = ["verify"] # Bug 1852375 - MerinoTestUtils.initWeather() doesn't play
["browser_glean_telemetry_exposure_edge_cases.js"]
-["browser_glean_telemetry_impression_groups.js"]
-
-["browser_glean_telemetry_impression_interaction.js"]
-
-["browser_glean_telemetry_impression_interaction_persisted_search_terms_disabled.js"]
-
-["browser_glean_telemetry_impression_interaction_persisted_search_terms_enabled.js"]
-
-["browser_glean_telemetry_impression_n_chars_n_words.js"]
-
-["browser_glean_telemetry_impression_preferences.js"]
-
-["browser_glean_telemetry_impression_sap.js"]
-
-["browser_glean_telemetry_impression_search_engine_default_id.js"]
-
-["browser_glean_telemetry_impression_search_mode.js"]
-
-["browser_glean_telemetry_impression_timing.js"]
-
["browser_glean_telemetry_record_preferences.js"]
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_abandonment_tips.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_abandonment_tips.js
index 71087d03d0..ca21ca476c 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_abandonment_tips.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_abandonment_tips.js
@@ -38,7 +38,7 @@ add_setup(async function () {
});
add_task(async function tip_persist() {
- await doTest(async browser => {
+ await doTest(async () => {
await showPersistSearchTip("test");
gURLBar.focus();
await UrlbarTestUtils.promisePopupClose(window, () => {
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_abandonment_type.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_abandonment_type.js
new file mode 100644
index 0000000000..99145d7cc3
--- /dev/null
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_abandonment_type.js
@@ -0,0 +1,109 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+// Test for the following data of abandonment telemetry.
+// - reason
+
+function checkUrlbarFocus(win, focusState) {
+ let urlbar = win.gURLBar;
+ is(
+ focusState ? win.document.activeElement : !win.document.activeElement,
+ focusState ? urlbar.inputField : !urlbar.inputField,
+ `URL Bar should ${focusState ? "" : "not "}be focused`
+ );
+}
+
+// Tests that a tab switch from a focused URL bar to another tab with a focused
+// URL bar records the correct abandonment telemetry with abandonment type
+// "tab_swtich".
+add_task(async function tabSwitchFocusedToFocused() {
+ await doTest(async browser => {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "test search",
+ });
+ checkUrlbarFocus(window, true);
+
+ let promiseTabOpened = BrowserTestUtils.waitForEvent(
+ gBrowser.tabContainer,
+ "TabOpen"
+ );
+ EventUtils.synthesizeMouseAtCenter(gBrowser.tabContainer.newTabButton, {});
+ let openEvent = await promiseTabOpened;
+ let tab2 = openEvent.target;
+ checkUrlbarFocus(window, true);
+
+ await assertAbandonmentTelemetry([{ abandonment_type: "tab_switch" }]);
+
+ await BrowserTestUtils.removeTab(tab2);
+ });
+});
+
+// Verifies that switching from a tab with a focused URL bar to a tab where the
+// URL bar loses focus logs abandonment telemetry with abandonment type
+// "blur".
+add_task(async function tabSwitchFocusedToUnfocused() {
+ await doTest(async browser => {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "test search",
+ });
+ checkUrlbarFocus(window, true);
+
+ let tab2 = await BrowserTestUtils.openNewForegroundTab(window.gBrowser);
+ checkUrlbarFocus(window, false);
+
+ await assertAbandonmentTelemetry([{ abandonment_type: "blur" }]);
+
+ await BrowserTestUtils.removeTab(tab2);
+ });
+});
+
+// Ensures that switching from a tab with an unfocused URL bar to a tab where
+// the URL bar gains focus does not record any abandonment telemetry, reflecting
+// no change in focus state relevant to abandonment.
+add_task(async function tabSwitchUnFocusedToFocused() {
+ await doTest(async browser => {
+ checkUrlbarFocus(window, false);
+
+ let promiseTabOpened = BrowserTestUtils.waitForEvent(
+ gBrowser.tabContainer,
+ "TabOpen"
+ );
+ EventUtils.synthesizeMouseAtCenter(gBrowser.tabContainer.newTabButton, {});
+ let openEvent = await promiseTabOpened;
+ let tab2 = openEvent.target;
+ checkUrlbarFocus(window, true);
+
+ const telemetries = Glean.urlbar.abandonment.testGetValue() ?? [];
+ Assert.equal(
+ telemetries.length,
+ 0,
+ "Telemetry event length matches expected event length."
+ );
+
+ await BrowserTestUtils.removeTab(tab2);
+ });
+});
+
+// Checks that switching between two tabs, both with unfocused URL bars, does
+// not trigger any abandonment telmetry.
+add_task(async function tabSwitchUnFocusedToUnFocused() {
+ await doTest(async browser => {
+ checkUrlbarFocus(window, false);
+
+ let tab2 = await BrowserTestUtils.openNewForegroundTab(window.gBrowser);
+ checkUrlbarFocus(window, false);
+
+ const telemetries = Glean.urlbar.abandonment.testGetValue() ?? [];
+ Assert.equal(
+ telemetries.length,
+ 0,
+ "Telemetry event length matches expected event length."
+ );
+
+ await BrowserTestUtils.removeTab(tab2);
+ });
+});
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_edge_cases.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_edge_cases.js
index fcac924879..04ef7e9757 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_edge_cases.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_edge_cases.js
@@ -22,7 +22,7 @@ class NoResponseTestProvider extends UrlbarTestUtils.TestProvider {
return UrlbarUtils.PROVIDER_TYPE.HEURISTIC;
}
- async startQuery(context, addCallback) {
+ async startQuery(_context, _addCallback) {
await this.#deferred.promise;
}
@@ -98,7 +98,7 @@ add_task(async function engagement_before_showing_results() {
};
registerCleanupFunction(cleanup);
- await doTest(async browser => {
+ await doTest(async () => {
// Try to show the results.
await UrlbarTestUtils.inputIntoURLBar(window, "exam");
@@ -156,7 +156,7 @@ add_task(async function engagement_after_closing_results() {
];
for (const trigger of TRIGGERS) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("test");
await UrlbarTestUtils.promisePopupClose(window, () => {
trigger();
@@ -186,7 +186,7 @@ add_task(async function engagement_after_closing_results() {
});
add_task(async function enter_to_reload_current_url() {
- await doTest(async browser => {
+ await doTest(async () => {
// Open a URL once.
await openPopup("https://example.com");
await doEnter();
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_groups.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_groups.js
index 8779487960..d46c874403 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_groups.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_groups.js
@@ -247,13 +247,13 @@ add_task(async function always_empty_if_drop_go() {
},
];
- await doTest(async browser => {
+ await doTest(async () => {
await doDropAndGo("example.com");
assertEngagementTelemetry(expected);
});
- await doTest(async browser => {
+ await doTest(async () => {
// Open the results view once.
await showResultByArrowDown();
await UrlbarTestUtils.promisePopupClose(window);
@@ -274,13 +274,13 @@ add_task(async function always_empty_if_paste_go() {
},
];
- await doTest(async browser => {
+ await doTest(async () => {
await doPasteAndGo("example.com");
assertEngagementTelemetry(expected);
});
- await doTest(async browser => {
+ await doTest(async () => {
// Open the results view once.
await showResultByArrowDown();
await UrlbarTestUtils.promisePopupClose(window);
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_interaction.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_interaction.js
index f4880d2205..2866186c30 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_interaction.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_interaction.js
@@ -35,13 +35,13 @@ add_task(async function typed() {
});
add_task(async function dropped() {
- await doTest(async browser => {
+ await doTest(async () => {
await doDropAndGo("example.com");
assertEngagementTelemetry([{ interaction: "dropped" }]);
});
- await doTest(async browser => {
+ await doTest(async () => {
await showResultByArrowDown();
await doDropAndGo("example.com");
@@ -60,13 +60,13 @@ add_task(async function pasted() {
assert: () => assertEngagementTelemetry([{ interaction: "pasted" }]),
});
- await doTest(async browser => {
+ await doTest(async () => {
await doPasteAndGo("www.example.com");
assertEngagementTelemetry([{ interaction: "pasted" }]);
});
- await doTest(async browser => {
+ await doTest(async () => {
await showResultByArrowDown();
await doPasteAndGo("www.example.com");
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_selected_result.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_selected_result.js
index 6a3422d939..bea266dbf4 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_selected_result.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_selected_result.js
@@ -13,6 +13,7 @@
ChromeUtils.defineESModuleGetters(this, {
UrlbarProviderClipboard:
"resource:///modules/UrlbarProviderClipboard.sys.mjs",
+ SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
});
// This test has many subtests and can time out in verify mode.
@@ -23,7 +24,7 @@ add_setup(async function () {
});
add_task(async function selected_result_autofill_about() {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("about:about");
await doEnter();
@@ -44,7 +45,7 @@ add_task(async function selected_result_autofill_adaptive() {
set: [["browser.urlbar.autoFill.adaptiveHistory.enabled", true]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await PlacesTestUtils.addVisits("https://example.com/test");
await UrlbarUtils.addToInputHistory("https://example.com/test", "exa");
await openPopup("exa");
@@ -65,7 +66,7 @@ add_task(async function selected_result_autofill_adaptive() {
});
add_task(async function selected_result_autofill_origin() {
- await doTest(async browser => {
+ await doTest(async () => {
await PlacesTestUtils.addVisits("https://example.com/test");
await PlacesFrecencyRecalculator.recalculateAnyOutdatedFrecencies();
await openPopup("exa");
@@ -84,7 +85,7 @@ add_task(async function selected_result_autofill_origin() {
});
add_task(async function selected_result_autofill_url() {
- await doTest(async browser => {
+ await doTest(async () => {
await PlacesTestUtils.addVisits("https://example.com/test");
await PlacesFrecencyRecalculator.recalculateAnyOutdatedFrecencies();
await openPopup("https://example.com/test");
@@ -103,7 +104,7 @@ add_task(async function selected_result_autofill_url() {
});
add_task(async function selected_result_bookmark() {
- await doTest(async browser => {
+ await doTest(async () => {
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
url: "https://example.com/bookmark",
@@ -131,7 +132,7 @@ add_task(async function selected_result_history() {
set: [["browser.urlbar.autoFill", false]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await PlacesTestUtils.addVisits("https://example.com/test");
await openPopup("example");
@@ -153,7 +154,7 @@ add_task(async function selected_result_history() {
});
add_task(async function selected_result_keyword() {
- await doTest(async browser => {
+ await doTest(async () => {
await PlacesUtils.keywords.insert({
keyword: "keyword",
url: "https://example.com/?q=%s",
@@ -177,7 +178,7 @@ add_task(async function selected_result_keyword() {
});
add_task(async function selected_result_search_engine() {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("x");
await doEnter();
@@ -201,7 +202,7 @@ add_task(async function selected_result_search_suggest() {
],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("foo");
await selectRowByURL("http://mochi.test:8888/?terms=foofoo");
await doEnter();
@@ -228,7 +229,7 @@ add_task(async function selected_result_search_history() {
],
});
- await doTest(async browser => {
+ await doTest(async () => {
await UrlbarTestUtils.formHistory.add(["foofoo", "foobar"]);
await openPopup("foo");
@@ -250,7 +251,7 @@ add_task(async function selected_result_search_history() {
});
add_task(async function selected_result_url() {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("https://example.com/");
await doEnter();
@@ -267,7 +268,7 @@ add_task(async function selected_result_url() {
});
add_task(async function selected_result_action() {
- await doTest(async browser => {
+ await doTest(async () => {
await showResultByArrowDown();
await selectRowByProvider("quickactions");
const onLoad = BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
@@ -289,7 +290,7 @@ add_task(async function selected_result_action() {
add_task(async function selected_result_tab() {
const tab = BrowserTestUtils.addTab(gBrowser, "https://example.com/");
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("example");
await selectRowByProvider("Places");
EventUtils.synthesizeKey("KEY_Enter");
@@ -312,7 +313,7 @@ add_task(async function selected_result_tab() {
add_task(async function selected_result_remote_tab() {
const remoteTab = await loadRemoteTab("https://example.com");
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("example");
await selectRowByProvider("RemoteTabs");
await doEnter();
@@ -335,7 +336,7 @@ add_task(async function selected_result_addon() {
const addon = loadOmniboxAddon({ keyword: "omni" });
await addon.startup();
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("omni test");
await doEnter();
@@ -363,7 +364,7 @@ add_task(async function selected_result_tab_to_search() {
search_url: "https://mozengine/",
});
- await doTest(async browser => {
+ await doTest(async () => {
for (let i = 0; i < 3; i++) {
await PlacesTestUtils.addVisits(["https://mozengine/"]);
}
@@ -389,7 +390,7 @@ add_task(async function selected_result_tab_to_search() {
});
add_task(async function selected_result_top_site() {
- await doTest(async browser => {
+ await doTest(async () => {
await addTopSites("https://example.com/");
await showResultByArrowDown();
await selectRowByURL("https://example.com/");
@@ -412,7 +413,7 @@ add_task(async function selected_result_calc() {
set: [["browser.urlbar.suggest.calculator", true]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("8*8");
await selectRowByProvider("calculator");
await SimpleTest.promiseClipboardChange("64", () => {
@@ -444,7 +445,7 @@ add_task(async function selected_result_clipboard() {
"https://example.com/selected_result_clipboard"
);
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("");
await selectRowByProvider("UrlbarProviderClipboard");
await doEnter();
@@ -470,7 +471,7 @@ add_task(async function selected_result_unit() {
set: [["browser.urlbar.unitConversion.enabled", true]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("1m to cm");
await selectRowByProvider("UnitConversion");
await SimpleTest.promiseClipboardChange("100 cm", () => {
@@ -496,7 +497,7 @@ add_task(async function selected_result_site_specific_contextual_search() {
set: [["browser.urlbar.contextualSearch.enabled", true]],
});
- await doTest(async browser => {
+ await doTest(async () => {
const extension = await SearchTestUtils.installSearchExtension(
{
name: "Contextual",
@@ -540,7 +541,7 @@ add_task(async function selected_result_rs_adm_sponsored() {
prefs: [["quicksuggest.rustEnabled", false]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("sponsored");
await selectRowByURL("https://example.com/sponsored");
await doEnter();
@@ -564,7 +565,7 @@ add_task(async function selected_result_rs_adm_nonsponsored() {
prefs: [["quicksuggest.rustEnabled", false]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("nonsponsored");
await selectRowByURL("https://example.com/nonsponsored");
await doEnter();
@@ -594,13 +595,13 @@ add_task(async function selected_result_input_field() {
},
];
- await doTest(async browser => {
+ await doTest(async () => {
await doDropAndGo("example.com");
assertEngagementTelemetry(expected);
});
- await doTest(async browser => {
+ await doTest(async () => {
await doPasteAndGo("example.com");
assertEngagementTelemetry(expected);
@@ -618,7 +619,7 @@ add_task(async function selected_result_weather() {
let provider = UrlbarPrefs.get("quickSuggestRustEnabled")
? "UrlbarProviderQuickSuggest"
: "Weather";
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup(MerinoTestUtils.WEATHER_KEYWORD);
await selectRowByProvider(provider);
await doEnter();
@@ -653,7 +654,7 @@ add_task(async function selected_result_navigational() {
],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("only match the Merino suggestion");
await selectRowByProvider("UrlbarProviderQuickSuggest");
await doEnter();
@@ -688,7 +689,7 @@ add_task(async function selected_result_dynamic_wikipedia() {
],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("only match the Merino suggestion");
await selectRowByProvider("UrlbarProviderQuickSuggest");
await doEnter();
@@ -708,7 +709,7 @@ add_task(async function selected_result_dynamic_wikipedia() {
});
add_task(async function selected_result_search_shortcut_button() {
- await doTest(async browser => {
+ await doTest(async () => {
const oneOffSearchButtons = UrlbarTestUtils.getOneOffSearchButtons(window);
await openPopup("x");
Assert.ok(!oneOffSearchButtons.selectedButton);
@@ -756,31 +757,78 @@ add_task(async function selected_result_trending() {
});
let defaultEngine = await Services.search.getDefault();
- let extension = await SearchTestUtils.installSearchExtension(
- {
- name: "mozengine",
- search_url: "https://example.org/",
- },
- { setAsDefault: true, skipUnload: true }
- );
+ let extension;
+ if (!SearchUtils.newSearchConfigEnabled) {
+ extension = await SearchTestUtils.installSearchExtension(
+ {
+ name: "mozengine",
+ search_url: "https://example.org/",
+ },
+ { setAsDefault: true, skipUnload: true }
+ );
+ }
SearchTestUtils.useMockIdleService();
- await SearchTestUtils.updateRemoteSettingsConfig([
- {
- webExtension: { id: "mozengine@tests.mozilla.org" },
- urls: {
- trending: {
- fullPath:
- "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs",
- query: "",
- },
- },
- appliesTo: [{ included: { everywhere: true } }],
- default: "yes",
- },
- ]);
+ await SearchTestUtils.updateRemoteSettingsConfig(
+ SearchUtils.newSearchConfigEnabled
+ ? [
+ {
+ recordType: "engine",
+ identifier: "mozengine",
+ base: {
+ name: "mozengine",
+ urls: {
+ search: {
+ base: "https://example.org/",
+ searchTermParamName: "q",
+ },
+ trending: {
+ base: "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs",
+ method: "GET",
+ },
+ },
+ },
+ variants: [
+ {
+ environment: { allRegionsAndLocales: true },
+ },
+ ],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "mozengine",
+ specificDefaults: [],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+ ]
+ : [
+ {
+ webExtension: { id: "mozengine@tests.mozilla.org" },
+ urls: {
+ trending: {
+ fullPath:
+ "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs",
+ query: "",
+ },
+ },
+ appliesTo: [{ included: { everywhere: true } }],
+ default: "yes",
+ },
+ ]
+ );
- await doTest(async browser => {
+ if (SearchUtils.newSearchConfigEnabled) {
+ let engine = Services.search.getEngineByName("mozengine");
+ await Services.search.setDefault(
+ engine,
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+ }
+
+ await doTest(async () => {
await openPopup("");
await selectRowByProvider("SearchSuggestions");
await doEnter();
@@ -796,7 +844,13 @@ add_task(async function selected_result_trending() {
]);
});
- await extension.unload();
+ if (SearchUtils.newSearchConfigEnabled) {
+ let engine = Services.search.getEngineByName("mozengine");
+ await Services.search.removeEngine(engine);
+ } else {
+ await extension.unload();
+ }
+
await Services.search.setDefault(
defaultEngine,
Ci.nsISearchService.CHANGE_REASON_UNKNOWN
@@ -823,31 +877,84 @@ add_task(async function selected_result_trending_rich() {
});
let defaultEngine = await Services.search.getDefault();
- let extension = await SearchTestUtils.installSearchExtension(
- {
- name: "mozengine",
- search_url: "https://example.org/",
- },
- { setAsDefault: true, skipUnload: true }
- );
+ let extension;
+ if (!SearchUtils.newSearchConfigEnabled) {
+ extension = await SearchTestUtils.installSearchExtension(
+ {
+ name: "mozengine",
+ search_url: "https://example.org/",
+ },
+ { setAsDefault: true, skipUnload: true }
+ );
+ }
SearchTestUtils.useMockIdleService();
- await SearchTestUtils.updateRemoteSettingsConfig([
- {
- webExtension: { id: "mozengine@tests.mozilla.org" },
- urls: {
- trending: {
- fullPath:
- "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs?richsuggestions=true",
- query: "",
- },
- },
- appliesTo: [{ included: { everywhere: true } }],
- default: "yes",
- },
- ]);
+ await SearchTestUtils.updateRemoteSettingsConfig(
+ SearchUtils.newSearchConfigEnabled
+ ? [
+ {
+ recordType: "engine",
+ identifier: "mozengine",
+ base: {
+ name: "mozengine",
+ urls: {
+ search: {
+ base: "https://example.org/",
+ searchTermParamName: "q",
+ },
+ trending: {
+ base: "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs",
+ method: "GET",
+ params: [
+ {
+ name: "richsuggestions",
+ value: "true",
+ },
+ ],
+ },
+ },
+ },
+ variants: [
+ {
+ environment: { allRegionsAndLocales: true },
+ },
+ ],
+ },
+ {
+ recordType: "defaultEngines",
+ globalDefault: "mozengine",
+ specificDefaults: [],
+ },
+ {
+ recordType: "engineOrders",
+ orders: [],
+ },
+ ]
+ : [
+ {
+ webExtension: { id: "mozengine@tests.mozilla.org" },
+ urls: {
+ trending: {
+ fullPath:
+ "https://example.com/browser/browser/components/search/test/browser/trendingSuggestionEngine.sjs?richsuggestions=true",
+ query: "",
+ },
+ },
+ appliesTo: [{ included: { everywhere: true } }],
+ default: "yes",
+ },
+ ]
+ );
- await doTest(async browser => {
+ if (SearchUtils.newSearchConfigEnabled) {
+ let engine = Services.search.getEngineByName("mozengine");
+ await Services.search.setDefault(
+ engine,
+ Ci.nsISearchService.CHANGE_REASON_UNKNOWN
+ );
+ }
+
+ await doTest(async () => {
await openPopup("");
await selectRowByProvider("SearchSuggestions");
await doEnter();
@@ -863,7 +970,13 @@ add_task(async function selected_result_trending_rich() {
]);
});
- await extension.unload();
+ if (SearchUtils.newSearchConfigEnabled) {
+ let engine = Services.search.getEngineByName("mozengine");
+ await Services.search.removeEngine(engine);
+ } else {
+ await extension.unload();
+ }
+
await Services.search.setDefault(
defaultEngine,
Ci.nsISearchService.CHANGE_REASON_UNKNOWN
@@ -905,7 +1018,7 @@ add_task(async function selected_result_addons() {
],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("only match the Merino suggestion");
await selectRowByProvider("UrlbarProviderQuickSuggest");
await doEnter();
@@ -930,7 +1043,7 @@ add_task(async function selected_result_rust_adm_sponsored() {
prefs: [["quicksuggest.rustEnabled", true]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("sponsored");
await selectRowByURL("https://example.com/sponsored");
await doEnter();
@@ -954,7 +1067,7 @@ add_task(async function selected_result_rust_adm_nonsponsored() {
prefs: [["quicksuggest.rustEnabled", true]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("nonsponsored");
await selectRowByURL("https://example.com/nonsponsored");
await doEnter();
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_tips.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_tips.js
index 2b38631747..ff31bdc52a 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_tips.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_tips.js
@@ -69,7 +69,7 @@ add_task(async function selected_result_tip() {
});
UrlbarProvidersManager.registerProvider(provider);
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("example");
await selectRowByType(type);
EventUtils.synthesizeKey("VK_RETURN");
@@ -159,7 +159,7 @@ add_task(async function selected_result_intervention_update() {
});
async function doInterventionTest(keyword, type, dialog, expectedTelemetry) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup(keyword);
await selectRowByType(type);
const onDialog = BrowserTestUtils.promiseAlertDialog("cancel", dialog, {
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_type.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_type.js
index 5972dd331d..6b1dedbce2 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_type.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_engagement_type.js
@@ -14,7 +14,7 @@ add_setup(async function () {
});
add_task(async function engagement_type_click() {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("x");
await doClick();
@@ -23,7 +23,7 @@ add_task(async function engagement_type_click() {
});
add_task(async function engagement_type_enter() {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("x");
await doEnter();
@@ -32,7 +32,7 @@ add_task(async function engagement_type_enter() {
});
add_task(async function engagement_type_go_button() {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("x");
EventUtils.synthesizeMouseAtCenter(gURLBar.goButton, {});
@@ -41,7 +41,7 @@ add_task(async function engagement_type_go_button() {
});
add_task(async function engagement_type_drop_go() {
- await doTest(async browser => {
+ await doTest(async () => {
await doDropAndGo("example.com");
assertEngagementTelemetry([{ engagement_type: "drop_go" }]);
@@ -49,7 +49,7 @@ add_task(async function engagement_type_drop_go() {
});
add_task(async function engagement_type_paste_go() {
- await doTest(async browser => {
+ await doTest(async () => {
await doPasteAndGo("www.example.com");
assertEngagementTelemetry([{ engagement_type: "paste_go" }]);
@@ -59,7 +59,7 @@ add_task(async function engagement_type_paste_go() {
add_task(async function engagement_type_dismiss() {
const cleanupQuickSuggest = await ensureQuickSuggestInit();
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("sponsored");
const originalResultCount = UrlbarTestUtils.getResultCount(window);
@@ -84,7 +84,7 @@ add_task(async function engagement_type_dismiss() {
]);
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("sponsored");
const originalResultCount = UrlbarTestUtils.getResultCount(window);
@@ -103,7 +103,7 @@ add_task(async function engagement_type_dismiss() {
add_task(async function engagement_type_help() {
const cleanupQuickSuggest = await ensureQuickSuggestInit();
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("sponsored");
await selectRowByURL("https://example.com/sponsored");
const onTabOpened = BrowserTestUtils.waitForNewTab(gBrowser);
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_exposure_edge_cases.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_exposure_edge_cases.js
index d28352b417..725240c9b1 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_exposure_edge_cases.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_exposure_edge_cases.js
@@ -38,8 +38,12 @@ add_setup(async function () {
gProvider = new TestProvider();
UrlbarProvidersManager.registerProvider(gProvider);
- // Increase the timeout of the stale-rows timer so it doesn't interfere with
- // this test, which specifically tests what happens before the timer fires.
+ // This test specifically checks the view's behavior before and after it
+ // removes stale rows, so it needs to control when that occurs. There are two
+ // times the view removes stale rows: (1) when the stale-rows timer fires, (2)
+ // when a query finishes. We prevent (1) from occuring by increasing the
+ // timer's timeout so it never fires during the test. We'll rely on (2) to
+ // trigger stale rows removal.
let originalRemoveStaleRowsTimeout = UrlbarView.removeStaleRowsTimeout;
UrlbarView.removeStaleRowsTimeout = 30000;
@@ -49,11 +53,17 @@ add_setup(async function () {
});
});
-// Does one query that fills up the view with search suggestions, starts a
-// second query that returns a history result, and cancels it before it can
-// finish but after the view is updated. Regardless of `showExposureResults`,
-// the history result should not trigger an exposure since it never had a chance
-// to be visible in the view.
+// Does the following:
+//
+// 1. Starts and finishes a query that fills up the view
+// 2. Starts a second query with results that cannot replace rows from the first
+// query and that therefore must be appended and hidden
+// 3. Cancels the second query before it finishes (so that stale rows are not
+// removed)
+//
+// Results in the second query should not trigger an exposure. They can never be
+// visible in the view since the second query is canceled before stale rows are
+// removed.
add_task(async function noExposure() {
for (let showExposureResults of [true, false]) {
await do_noExposure(showExposureResults);
@@ -116,7 +126,7 @@ async function do_noExposure(showExposureResults) {
// When the provider's `startQuery()` is called, let it add its results but
// don't let it return. That will cause the view to be updated with the new
// results but prevent it from showing hidden rows since the query won't
- // finish.
+ // finish (so stale rows won't be removed).
let queryResolver = Promise.withResolvers();
gProvider.finishQueryPromise = queryResolver.promise;
@@ -147,14 +157,24 @@ async function do_noExposure(showExposureResults) {
// Make sure the view is full of visible rows as expected, plus the one or two
// hidden rows for the history and/or bookmark results.
- let rows = UrlbarTestUtils.getResultsContainer(window);
- let expectedCount = MAX_RESULT_COUNT + 1;
+ let expected = [
+ {
+ source: UrlbarUtils.RESULT_SOURCE.BOOKMARKS,
+ type: UrlbarUtils.RESULT_TYPE.URL,
+ url: bookmarkUrl,
+ },
+ ];
if (showExposureResults) {
- expectedCount++;
+ expected.unshift({
+ source: UrlbarUtils.RESULT_SOURCE.HISTORY,
+ type: UrlbarUtils.RESULT_TYPE.URL,
+ url: historyUrl,
+ });
}
+ let rows = UrlbarTestUtils.getResultsContainer(window);
Assert.equal(
rows.children.length,
- expectedCount,
+ MAX_RESULT_COUNT + expected.length,
"The view has the expected number of rows"
);
@@ -176,24 +196,15 @@ async function do_noExposure(showExposureResults) {
}
// Check the hidden history and/or bookmark rows.
- let expected = [
- { source: UrlbarUtils.RESULT_SOURCE.BOOKMARKS, url: bookmarkUrl },
- ];
- if (showExposureResults) {
- expected.unshift({
- source: UrlbarUtils.RESULT_SOURCE.HISTORY,
- url: historyUrl,
- });
- }
for (let i = 0; i < expected.length; i++) {
- let { source, url } = expected[i];
+ let { source, type, url } = expected[i];
let row = rows.children[MAX_RESULT_COUNT + i];
Assert.ok(row, `rows[${i}] should exist`);
Assert.ok(BrowserTestUtils.isHidden(row), `rows[${i}] should be hidden`);
Assert.equal(
row.result.type,
- UrlbarUtils.RESULT_TYPE.URL,
- `rows[${i}].result.type should be URL`
+ type,
+ `rows[${i}].result.type should be as expected`
);
Assert.equal(
row.result.source,
@@ -212,8 +223,8 @@ async function do_noExposure(showExposureResults) {
await UrlbarTestUtils.promisePopupClose(window);
gURLBar.blur();
- // No exposure should have been recorded since the history result was never
- // visible.
+ // No exposure should have been recorded since the history result could never
+ // be visible.
assertExposureTelemetry([]);
// Clean up.
@@ -221,17 +232,24 @@ async function do_noExposure(showExposureResults) {
await queryPromise;
await SpecialPowers.popPrefEnv();
Services.fog.testResetFOG();
+ gProvider.finishQueryPromise = null;
}
-// Does one query that underfills the view and then a second query that returns
-// a search suggestion. The search suggestion should be appended and trigger an
-// exposure. When `showExposureResults` is true, it should also be shown. After
-// the view is updated, it shouldn't matter whether or not the second query is
-// canceled.
-add_task(async function exposure_append() {
+// Does the following:
+//
+// 1. Starts and finishes a query that underfills the view
+// 2. Starts a second query
+// 3. Waits for rows from the second query to be appended. They will be
+// immediately visible since the first query underfilled the view.
+// 4. Either cancels the second query (so stale rows are not removed) or waits
+// for it to finish (so stale rows are removed)
+//
+// Results in the second query should trigger an exposure since they are made
+// visible in step 3. Step 4 should not actually matter.
+add_task(async function exposure_append_underfilled() {
for (let showExposureResults of [true, false]) {
for (let cancelSecondQuery of [true, false]) {
- await do_exposure_append({
+ await do_exposure_append_underfilled({
showExposureResults,
cancelSecondQuery,
});
@@ -239,7 +257,10 @@ add_task(async function exposure_append() {
}
});
-async function do_exposure_append({ showExposureResults, cancelSecondQuery }) {
+async function do_exposure_append_underfilled({
+ showExposureResults,
+ cancelSecondQuery,
+}) {
info(
"Starting do_exposure_append: " +
JSON.stringify({ showExposureResults, cancelSecondQuery })
@@ -287,7 +308,8 @@ async function do_exposure_append({ showExposureResults, cancelSecondQuery }) {
// When the provider's `startQuery()` is called, let it add its results but
// don't let it return. That will cause the view to be updated with the new
- // results but let us test the specific case where the query doesn't finish.
+ // results but let us test the specific case where the query doesn't finish
+ // (so stale rows are not removed).
let queryResolver = Promise.withResolvers();
gProvider.finishQueryPromise = queryResolver.promise;
@@ -357,13 +379,19 @@ async function do_exposure_append({ showExposureResults, cancelSecondQuery }) {
await queryPromise;
await SpecialPowers.popPrefEnv();
Services.fog.testResetFOG();
+ gProvider.finishQueryPromise = null;
}
-// Does one query that returns a search suggestion and then a second query that
-// returns a new search suggestion. The new search suggestion can replace the
-// old one, so it should trigger an exposure. When `showExposureResults` is
-// true, it should actually replace it. After the view is updated, it shouldn't
-// matter whether or not the second query is canceled.
+// Does the following:
+//
+// 1. Starts and finishes a query
+// 2. Starts a second query with a result that can replace an existing row from
+// the previous query
+// 3. Either cancels the second query (so stale rows are not removed) or waits
+// for it to finish (so stale rows are removed)
+//
+// The result in the second query should trigger an exposure since it's made
+// visible in step 2. Step 3 should not actually matter.
add_task(async function exposure_replace() {
for (let showExposureResults of [true, false]) {
for (let cancelSecondQuery of [true, false]) {
@@ -433,7 +461,8 @@ async function do_exposure_replace({ showExposureResults, cancelSecondQuery }) {
// When the provider's `startQuery()` is called, let it add its results but
// don't let it return. That will cause the view to be updated with the new
- // results but let us test the specific case where the query doesn't finish.
+ // results but let us test the specific case where the query doesn't finish
+ // (so stale rows are not removed).
let queryResolver = Promise.withResolvers();
gProvider.finishQueryPromise = queryResolver.promise;
@@ -503,6 +532,519 @@ async function do_exposure_replace({ showExposureResults, cancelSecondQuery }) {
await queryPromise;
await SpecialPowers.popPrefEnv();
Services.fog.testResetFOG();
+ gProvider.finishQueryPromise = null;
+}
+
+// Does the following:
+//
+// 1. Starts and finishes a query that fills up the view
+// 2. Starts a second query with a result that cannot replace any rows from the
+// first query and that therefore must be appended and hidden
+// 3. Finishes the second query
+//
+// The result in the second query should trigger an exposure since it's made
+// visible in step 3.
+add_task(async function exposure_append_full() {
+ for (let showExposureResults of [true, false]) {
+ await do_exposure_append_full(showExposureResults);
+ }
+});
+
+async function do_exposure_append_full(showExposureResults) {
+ info(
+ "Starting do_exposure_append_full: " +
+ JSON.stringify({ showExposureResults })
+ );
+
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.urlbar.exposureResults", "history"],
+ ["browser.urlbar.showExposureResults", showExposureResults],
+ ],
+ });
+
+ // Make the provider return enough search suggestions to fill the view.
+ gProvider.results = [];
+ for (let i = 0; i < MAX_RESULT_COUNT; i++) {
+ gProvider.results.push(
+ new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.SEARCH,
+ UrlbarUtils.RESULT_SOURCE.SEARCH,
+ {
+ suggestion: "suggestion " + i,
+ engine: Services.search.defaultEngine.name,
+ }
+ )
+ );
+ }
+
+ // Do the first query to fill the view with search suggestions.
+ info("Doing first query");
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "test 1",
+ });
+
+ // Now make the provider return a history result and bookmark. If
+ // `showExposureResults` is true, the history result will be added to the view
+ // but it should be hidden since the view is already full. If it's false, it
+ // shouldn't be added at all. The bookmark will always be added, which will
+ // tell us when the view has been updated either way. (It also will be hidden
+ // since the view is already full.)
+ let historyUrl = "https://example.com/history";
+ let bookmarkUrl = "https://example.com/bookmark";
+ gProvider.results = [
+ new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.URL,
+ UrlbarUtils.RESULT_SOURCE.HISTORY,
+ { url: historyUrl }
+ ),
+ new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.URL,
+ UrlbarUtils.RESULT_SOURCE.BOOKMARKS,
+ { url: bookmarkUrl }
+ ),
+ ];
+
+ // When the provider's `startQuery()` is called, let it add its results but
+ // don't let it return. That will cause the view to be updated with the new
+ // results but prevent it from showing hidden rows since the query won't
+ // finish (so stale rows won't be removed).
+ let queryResolver = Promise.withResolvers();
+ gProvider.finishQueryPromise = queryResolver.promise;
+
+ // Observe when the view appends the bookmark row. This will tell us when the
+ // view has been updated with the provider's new results. The bookmark row
+ // will be hidden since the view is already full with search suggestions.
+ let lastRowPromise = promiseLastRowAppended(
+ row => row.result.payload.url == bookmarkUrl
+ );
+
+ // Now start the second query but don't await it.
+ info("Starting second query");
+ let queryPromise = UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "test 2",
+ reopenOnBlur: false,
+ });
+
+ // Wait for the view to be updated.
+ info("Waiting for last row");
+ let lastRow = await lastRowPromise;
+ info("Done waiting for last row");
+
+ Assert.ok(
+ BrowserTestUtils.isHidden(lastRow),
+ "The new bookmark row should be hidden since the view is full"
+ );
+
+ // Make sure the view is full of visible rows as expected, plus the one or two
+ // hidden rows for the history and bookmark results.
+ let expected = [
+ {
+ source: UrlbarUtils.RESULT_SOURCE.BOOKMARKS,
+ type: UrlbarUtils.RESULT_TYPE.URL,
+ url: bookmarkUrl,
+ },
+ ];
+ if (showExposureResults) {
+ expected.unshift({
+ source: UrlbarUtils.RESULT_SOURCE.HISTORY,
+ type: UrlbarUtils.RESULT_TYPE.URL,
+ url: historyUrl,
+ });
+ }
+ let rows = UrlbarTestUtils.getResultsContainer(window);
+ Assert.equal(
+ rows.children.length,
+ MAX_RESULT_COUNT + expected.length,
+ "The view has the expected number of rows"
+ );
+
+ // Check the visible rows.
+ for (let i = 0; i < MAX_RESULT_COUNT; i++) {
+ let row = rows.children[i];
+ Assert.ok(BrowserTestUtils.isVisible(row), `rows[${i}] should be visible`);
+ Assert.ok(
+ row.result.type == UrlbarUtils.RESULT_TYPE.SEARCH,
+ `rows[${i}].result.type should be SEARCH`
+ );
+ // The heuristic won't have a suggestion so skip it.
+ if (i > 0) {
+ Assert.ok(
+ row.result.payload.suggestion,
+ `rows[${i}] should have a suggestion`
+ );
+ }
+ }
+
+ // Check the hidden history and bookmark rows.
+ for (let i = 0; i < expected.length; i++) {
+ let { source, type, url } = expected[i];
+ let row = rows.children[MAX_RESULT_COUNT + i];
+ Assert.ok(row, `rows[${i}] should exist`);
+ Assert.ok(BrowserTestUtils.isHidden(row), `rows[${i}] should be hidden`);
+ Assert.equal(
+ row.result.type,
+ type,
+ `rows[${i}].result.type should be as expected`
+ );
+ Assert.equal(
+ row.result.source,
+ source,
+ `rows[${i}].result.source should be as expected`
+ );
+ Assert.equal(
+ row.result.payload.url,
+ url,
+ `rows[${i}] URL should be as expected`
+ );
+ }
+
+ // Now let the query finish (so stale rows are removed).
+ queryResolver.resolve();
+ info("Waiting for second query to finish");
+ await queryPromise;
+ info("Second query finished");
+
+ rows = UrlbarTestUtils.getResultsContainer(window);
+ Assert.equal(
+ rows.children.length,
+ // + 1 for the heurustic.
+ 1 + expected.length,
+ "The view has the expected number of rows"
+ );
+
+ // Check the visible rows (except the heuristic).
+ for (let i = 0; i < expected.length; i++) {
+ let { source, type, url } = expected[i];
+ let index = i + 1;
+ let row = rows.children[index];
+ Assert.ok(row, `rows[${index}] should exist`);
+ Assert.ok(
+ BrowserTestUtils.isVisible(row),
+ `rows[${index}] should be visible`
+ );
+ Assert.equal(
+ row.result.type,
+ type,
+ `rows[${index}].result.type should be as expected`
+ );
+ Assert.equal(
+ row.result.source,
+ source,
+ `rows[${index}].result.source should be as expected`
+ );
+ Assert.equal(
+ row.result.payload.url,
+ url,
+ `rows[${index}] URL should be as expected`
+ );
+ }
+
+ // Close the view. Blur the urlbar to end the session.
+ info("Closing view and blurring");
+ await UrlbarTestUtils.promisePopupClose(window);
+ gURLBar.blur();
+
+ // An exposure for the history result should have been recorded.
+ assertExposureTelemetry([{ results: "history" }]);
+
+ // Clean up.
+ await SpecialPowers.popPrefEnv();
+ Services.fog.testResetFOG();
+ gProvider.finishQueryPromise = null;
+}
+
+// Does the following:
+//
+// 1. Starts and finishes a query that fills up the view
+// 2. Starts a second query with results that cannot replace rows from the first
+// query and that therefore must be appended and hidden
+// 3. Before the second query finishes (i.e., before stale rows are removed),
+// starts and finishes a third query (after which stale rows are removed)
+//
+// Results in the third query should trigger an exposure since they become
+// visible when the query finishes (and stale rows are removed) in step 3.
+// Results in the second query should not trigger an exposure since they could
+// never be visible since the query is canceled before stale rows are removed.
+add_task(async function exposure_append_full_twice() {
+ for (let showExposureResults of [true, false]) {
+ await do_exposure_append_full_twice(showExposureResults);
+ }
+});
+
+async function do_exposure_append_full_twice(showExposureResults) {
+ info(
+ "Starting do_exposure_append_full_twice: " +
+ JSON.stringify({ showExposureResults })
+ );
+
+ // Exposure results are history and tab.
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.urlbar.exposureResults", "history,tab"],
+ ["browser.urlbar.showExposureResults", showExposureResults],
+ ],
+ });
+
+ // Make the provider return enough search suggestions to fill the view.
+ gProvider.results = [];
+ for (let i = 0; i < MAX_RESULT_COUNT; i++) {
+ gProvider.results.push(
+ new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.SEARCH,
+ UrlbarUtils.RESULT_SOURCE.SEARCH,
+ {
+ suggestion: "suggestion " + i,
+ engine: Services.search.defaultEngine.name,
+ }
+ )
+ );
+ }
+
+ // Do the first query to fill the view with search suggestions.
+ info("Doing first query");
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "test 1",
+ });
+
+ // Now make the provider return a history result, tab, and bookmark. If
+ // `showExposureResults` is true, the history and tab results will be added to
+ // the view but they should be hidden since the view is already full. If it's
+ // false, they shouldn't be added at all. The bookmark will always be added,
+ // which will tell us when the view has been updated either way. (It also will
+ // be hidden since the view is already full.)
+ let historyUrl = "https://example.com/history";
+ let tabUrl = "https://example.com/tab";
+ let bookmarkUrl = "https://example.com/bookmark";
+ gProvider.results = [
+ new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.URL,
+ UrlbarUtils.RESULT_SOURCE.HISTORY,
+ { url: historyUrl }
+ ),
+ new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
+ UrlbarUtils.RESULT_SOURCE.TABS,
+ { url: tabUrl }
+ ),
+ new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.URL,
+ UrlbarUtils.RESULT_SOURCE.BOOKMARKS,
+ { url: bookmarkUrl }
+ ),
+ ];
+
+ // When the provider's `startQuery()` is called, let it add its results but
+ // don't let it return. That will cause the view to be updated with the new
+ // results but prevent it from showing hidden rows since the query won't
+ // finish (so stale rows won't be removed).
+ let secondQueryResolver = Promise.withResolvers();
+ gProvider.finishQueryPromise = secondQueryResolver.promise;
+
+ // Observe when the view appends the bookmark row. This will tell us when the
+ // view has been updated with the provider's new results. The bookmark row
+ // will be hidden since the view is already full with search suggestions.
+ let lastRowPromise = promiseLastRowAppended(
+ row => row.result.payload.url == bookmarkUrl
+ );
+
+ // Now start the second query but don't await it.
+ info("Starting second query");
+ let secondQueryPromise = UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "test 2",
+ reopenOnBlur: false,
+ });
+
+ // Wait for the view to be updated.
+ info("Waiting for last row");
+ let lastRow = await lastRowPromise;
+ info("Done waiting for last row");
+
+ Assert.ok(
+ BrowserTestUtils.isHidden(lastRow),
+ "The new bookmark row should be hidden since the view is full"
+ );
+
+ // Make sure the view is full of visible rows as expected, plus the one or
+ // three hidden rows for the history, tab, and bookmark results.
+ let expected = [
+ {
+ source: UrlbarUtils.RESULT_SOURCE.BOOKMARKS,
+ type: UrlbarUtils.RESULT_TYPE.URL,
+ url: bookmarkUrl,
+ },
+ ];
+ if (showExposureResults) {
+ expected.unshift(
+ {
+ source: UrlbarUtils.RESULT_SOURCE.HISTORY,
+ type: UrlbarUtils.RESULT_TYPE.URL,
+ url: historyUrl,
+ },
+ {
+ source: UrlbarUtils.RESULT_SOURCE.TABS,
+ type: UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
+ url: tabUrl,
+ }
+ );
+ }
+ let rows = UrlbarTestUtils.getResultsContainer(window);
+ Assert.equal(
+ rows.children.length,
+ MAX_RESULT_COUNT + expected.length,
+ "The view has the expected number of rows"
+ );
+
+ // Check the visible rows.
+ for (let i = 0; i < MAX_RESULT_COUNT; i++) {
+ let row = rows.children[i];
+ Assert.ok(BrowserTestUtils.isVisible(row), `rows[${i}] should be visible`);
+ Assert.ok(
+ row.result.type == UrlbarUtils.RESULT_TYPE.SEARCH,
+ `rows[${i}].result.type should be SEARCH`
+ );
+ // The heuristic won't have a suggestion so skip it.
+ if (i > 0) {
+ Assert.ok(
+ row.result.payload.suggestion,
+ `rows[${i}] should have a suggestion`
+ );
+ }
+ }
+
+ // Check the hidden history, tab, and bookmark rows.
+ for (let i = 0; i < expected.length; i++) {
+ let { source, type, url } = expected[i];
+ let row = rows.children[MAX_RESULT_COUNT + i];
+ Assert.ok(row, `rows[${i}] should exist`);
+ Assert.ok(BrowserTestUtils.isHidden(row), `rows[${i}] should be hidden`);
+ Assert.equal(
+ row.result.type,
+ type,
+ `rows[${i}].result.type should be as expected`
+ );
+ Assert.equal(
+ row.result.source,
+ source,
+ `rows[${i}].result.source should be as expected`
+ );
+ Assert.equal(
+ row.result.payload.url,
+ url,
+ `rows[${i}] URL should be as expected`
+ );
+ }
+
+ // Now make the provider return only a history result.
+ gProvider.results = [
+ new UrlbarResult(
+ UrlbarUtils.RESULT_TYPE.URL,
+ UrlbarUtils.RESULT_SOURCE.HISTORY,
+ { url: historyUrl }
+ ),
+ ];
+
+ // Without waiting for the second query to finish (i.e., before stale rows are
+ // removed), do a third query and allow it to finish (so stale rows are
+ // removed). An exposure should be recorded for the history result since it's
+ // present in the third query. An exposure should not be recorded for the tab
+ // result because it could not have been visible since the second query did
+ // not finish.
+
+ let thirdQueryStartedPromise = new Promise(resolve => {
+ let queryListener = {
+ onQueryStarted: () => {
+ gURLBar.controller.removeQueryListener(queryListener);
+ resolve();
+ },
+ };
+ gURLBar.controller.addQueryListener(queryListener);
+ });
+
+ info("Starting third query");
+ let thirdQueryPromise = UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: "test 3",
+ reopenOnBlur: false,
+ });
+
+ // The test provider's `startQuery()` is still awaiting its
+ // `finishQueryPromise`, so we need to resolve it so the provider can respond
+ // to the third query. But before we do that, we need to make sure the third
+ // query has started and canceled the second query because otherwise the
+ // second query could finish and cause stale rows to be removed.
+ info("Waiting for third query to start");
+ await thirdQueryStartedPromise;
+ info("Resolving provider's finishQueryPromise");
+ secondQueryResolver.resolve();
+
+ // Now wait for the third query to finish.
+ info("Waiting for third query to finish");
+ await thirdQueryPromise;
+
+ expected = [];
+ if (showExposureResults) {
+ expected.unshift({
+ source: UrlbarUtils.RESULT_SOURCE.HISTORY,
+ type: UrlbarUtils.RESULT_TYPE.URL,
+ url: historyUrl,
+ });
+ }
+
+ rows = UrlbarTestUtils.getResultsContainer(window);
+ Assert.equal(
+ rows.children.length,
+ // + 1 for the heurustic.
+ 1 + expected.length,
+ "The view has the expected number of rows"
+ );
+
+ // Check the history row.
+ for (let i = 0; i < expected.length; i++) {
+ let { source, type, url } = expected[i];
+ let index = i + 1;
+ let row = rows.children[index];
+ Assert.ok(row, `rows[${index}] should exist`);
+ Assert.ok(
+ BrowserTestUtils.isVisible(row),
+ `rows[${index}] should be visible`
+ );
+ Assert.equal(
+ row.result.type,
+ type,
+ `rows[${index}].result.type should be as expected`
+ );
+ Assert.equal(
+ row.result.source,
+ source,
+ `rows[${index}].result.source should be as expected`
+ );
+ Assert.equal(
+ row.result.payload.url,
+ url,
+ `rows[${index}] URL should be as expected`
+ );
+ }
+
+ // Close the view. Blur the urlbar to end the session.
+ info("Closing view and blurring");
+ await UrlbarTestUtils.promisePopupClose(window);
+ gURLBar.blur();
+
+ // An exposure only for the history result should have been recorded. If an
+ // exposure was also incorrectly recorded for the tab result, this will fail
+ // with "history,tab" instead of only "history".
+ assertExposureTelemetry([{ results: "history" }]);
+
+ // Clean up.
+ await secondQueryPromise;
+ await SpecialPowers.popPrefEnv();
+ Services.fog.testResetFOG();
+ gProvider.finishQueryPromise = null;
}
/**
@@ -523,7 +1065,7 @@ class TestProvider extends UrlbarTestUtils.TestProvider {
function promiseLastRowAppended(predicate) {
return new Promise(resolve => {
let rows = UrlbarTestUtils.getResultsContainer(window);
- let observer = new MutationObserver(mutations => {
+ let observer = new MutationObserver(() => {
let lastRow = rows.children[rows.children.length - 1];
info(
"Observed mutation, lastRow.result is: " +
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_groups.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_groups.js
deleted file mode 100644
index 354876e512..0000000000
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_groups.js
+++ /dev/null
@@ -1,258 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-// Test for the following data of impression telemetry.
-// - groups
-// - results
-// - n_results
-
-// This test has many subtests and can time out in verify mode.
-requestLongerTimeout(5);
-
-add_setup(async function () {
- await initGroupTest();
- // Increase the pausing time to ensure to ready for all suggestions.
- await SpecialPowers.pushPrefEnv({
- set: [
- [
- "browser.urlbar.searchEngagementTelemetry.pauseImpressionIntervalMs",
- 500,
- ],
- ],
- });
-});
-
-add_task(async function heuristics() {
- await doHeuristicsTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- { reason: "pause", groups: "heuristic", results: "search_engine" },
- ]),
- });
-});
-
-add_task(async function adaptive_history() {
- await doAdaptiveHistoryTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "heuristic,adaptive_history",
- results: "search_engine,history",
- n_results: 2,
- },
- ]),
- });
-});
-
-add_task(async function search_history() {
- await doSearchHistoryTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "heuristic,search_history,search_history",
- results: "search_engine,search_history,search_history",
- n_results: 3,
- },
- ]),
- });
-});
-
-add_task(async function recent_search() {
- await doRecentSearchTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "recent_search,suggested_index",
- results: "recent_search,action",
- n_results: 2,
- },
- ]),
- });
-});
-
-add_task(async function search_suggest() {
- await doSearchSuggestTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "heuristic,search_suggest,search_suggest",
- results: "search_engine,search_suggest,search_suggest",
- n_results: 3,
- },
- ]),
- });
-
- await doTailSearchSuggestTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "heuristic,search_suggest",
- results: "search_engine,search_suggest",
- n_results: 2,
- },
- ]),
- });
-});
-
-add_task(async function top_pick() {
- await doTopPickTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "heuristic,top_pick,search_suggest,search_suggest",
- results:
- "search_engine,merino_top_picks,search_suggest,search_suggest",
- n_results: 4,
- },
- ]),
- });
-});
-
-add_task(async function top_site() {
- await doTopSiteTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "top_site,suggested_index",
- results: "top_site,action",
- n_results: 2,
- },
- ]),
- });
-});
-
-add_task(async function clipboard() {
- await doClipboardTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "general,suggested_index",
- results: "clipboard,action",
- n_results: 2,
- },
- ]),
- });
-});
-
-add_task(async function remote_tab() {
- await doRemoteTabTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "heuristic,remote_tab",
- results: "search_engine,remote_tab",
- n_results: 2,
- },
- ]),
- });
-});
-
-add_task(async function addon() {
- await doAddonTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "addon",
- results: "addon",
- n_results: 1,
- },
- ]),
- });
-});
-
-add_task(async function general() {
- await doGeneralBookmarkTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "heuristic,suggested_index,general",
- results: "search_engine,action,bookmark",
- n_results: 3,
- },
- ]),
- });
-
- await doGeneralHistoryTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "heuristic,general",
- results: "search_engine,history",
- n_results: 2,
- },
- ]),
- });
-});
-
-add_task(async function suggest() {
- await doSuggestTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- groups: "heuristic,suggest",
- results: UrlbarPrefs.get("quickSuggestRustEnabled")
- ? "search_engine,rust_adm_nonsponsored"
- : "search_engine,rs_adm_nonsponsored",
- n_results: 2,
- },
- ]),
- });
-});
-
-add_task(async function about_page() {
- await doAboutPageTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "heuristic,about_page,about_page",
- results: "search_engine,history,history",
- n_results: 3,
- },
- ]),
- });
-});
-
-add_task(async function suggested_index() {
- await doSuggestedIndexTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- {
- reason: "pause",
- groups: "heuristic,suggested_index",
- results: "search_engine,unit",
- n_results: 2,
- },
- ]),
- });
-});
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction.js
deleted file mode 100644
index a16b55cac6..0000000000
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction.js
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-// Test for the following data of impression telemetry.
-// - interaction
-
-add_setup(async function () {
- await initInteractionTest();
-});
-
-add_task(async function topsites() {
- await doTopsitesTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([{ reason: "pause", interaction: "topsites" }]),
- });
-});
-
-add_task(async function typed() {
- await doTypedTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([{ reason: "pause", interaction: "typed" }]),
- });
-
- await doTypedWithResultsPopupTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([{ reason: "pause", interaction: "typed" }]),
- });
-});
-
-add_task(async function pasted() {
- await doPastedTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([{ reason: "pause", interaction: "pasted" }]),
- });
-
- await doPastedWithResultsPopupTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([{ reason: "pause", interaction: "pasted" }]),
- });
-});
-
-add_task(async function topsite_search() {
- await doTopsitesSearchTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- { reason: "pause", interaction: "topsite_search" },
- ]),
- });
-});
-
-add_task(async function returned_restarted_refined() {
- await doReturnedRestartedRefinedTest({
- trigger: () => waitForPauseImpression(),
- assert: expected =>
- assertImpressionTelemetry([
- { reason: "pause" },
- { reason: "pause", interaction: expected },
- ]),
- });
-});
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction_persisted_search_terms_disabled.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction_persisted_search_terms_disabled.js
deleted file mode 100644
index af7134b3a0..0000000000
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction_persisted_search_terms_disabled.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-// Test impression telemetry with persisted search terms disabled.
-
-// Allow more time for Mac machines so they don't time out in verify mode.
-if (AppConstants.platform == "macosx") {
- requestLongerTimeout(3);
-}
-
-add_setup(async function () {
- await initInteractionTest();
-
- await SpecialPowers.pushPrefEnv({
- set: [["browser.urlbar.showSearchTerms.featureGate", false]],
- });
-});
-
-add_task(async function persisted_search_terms() {
- await doPersistedSearchTermsTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- { reason: "pause" },
- { reason: "pause", interaction: "typed" },
- ]),
- });
-});
-
-add_task(async function persisted_search_terms_restarted_refined() {
- await doPersistedSearchTermsRestartedRefinedTest({
- enabled: false,
- trigger: () => waitForPauseImpression(),
- assert: expected =>
- assertImpressionTelemetry([
- { reason: "pause" },
- { reason: "pause", interaction: expected },
- ]),
- });
-});
-
-add_task(
- async function persisted_search_terms_restarted_refined_via_abandonment() {
- await doPersistedSearchTermsRestartedRefinedViaAbandonmentTest({
- enabled: false,
- trigger: () => waitForPauseImpression(),
- assert: expected =>
- assertImpressionTelemetry([
- { reason: "pause" },
- { reason: "pause" },
- { reason: "pause", interaction: expected },
- ]),
- });
- }
-);
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction_persisted_search_terms_enabled.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction_persisted_search_terms_enabled.js
deleted file mode 100644
index a29ff98b78..0000000000
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_interaction_persisted_search_terms_enabled.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-// Test impression telemetry with persisted search terms enabled.
-
-// Allow more time for Mac machines so they don't time out in verify mode.
-if (AppConstants.platform == "macosx") {
- requestLongerTimeout(3);
-}
-
-add_setup(async function () {
- await initInteractionTest();
-
- await SpecialPowers.pushPrefEnv({
- set: [
- ["browser.urlbar.showSearchTerms.featureGate", true],
- ["browser.urlbar.showSearchTerms.enabled", true],
- ["browser.search.widget.inNavBar", false],
- ],
- });
-});
-
-add_task(async function interaction_persisted_search_terms() {
- await doPersistedSearchTermsTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- { reason: "pause" },
- { reason: "pause", interaction: "persisted_search_terms" },
- ]),
- });
-});
-
-add_task(async function interaction_persisted_search_terms_restarted_refined() {
- await doPersistedSearchTermsRestartedRefinedTest({
- enabled: true,
- trigger: () => waitForPauseImpression(),
- assert: expected =>
- assertImpressionTelemetry([
- { reason: "pause" },
- { reason: "pause", interaction: expected },
- ]),
- });
-});
-
-add_task(
- async function interaction_persisted_search_terms_restarted_refined_via_abandonment() {
- await doPersistedSearchTermsRestartedRefinedViaAbandonmentTest({
- enabled: true,
- trigger: () => waitForPauseImpression(),
- assert: expected =>
- assertImpressionTelemetry([
- { reason: "pause" },
- { reason: "pause" },
- { reason: "pause", interaction: expected },
- ]),
- });
- }
-);
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_n_chars_n_words.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_n_chars_n_words.js
deleted file mode 100644
index 528cc318e0..0000000000
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_n_chars_n_words.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-// Test for the following data of impression telemetry.
-// - n_chars
-// - n_words
-
-add_setup(async function () {
- await initNCharsAndNWordsTest();
-});
-
-add_task(async function n_chars() {
- await doNCharsTest({
- trigger: () => waitForPauseImpression(),
- assert: nChars =>
- assertImpressionTelemetry([{ reason: "pause", n_chars: nChars }]),
- });
-
- await doNCharsWithOverMaxTextLengthCharsTest({
- trigger: () => waitForPauseImpression(),
- assert: nChars =>
- assertImpressionTelemetry([{ reason: "pause", n_chars: nChars }]),
- });
-});
-
-add_task(async function n_words() {
- await doNWordsTest({
- trigger: () => waitForPauseImpression(),
- assert: nWords =>
- assertImpressionTelemetry([{ reason: "pause", n_words: nWords }]),
- });
-
- await doNWordsWithOverMaxTextLengthCharsTest({
- trigger: () => waitForPauseImpression(),
- assert: nWords =>
- assertImpressionTelemetry([{ reason: "pause", n_words: nWords }]),
- });
-});
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_preferences.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_preferences.js
deleted file mode 100644
index 344e238e24..0000000000
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_preferences.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-// Test the impression telemetry behavior with its preferences.
-
-add_setup(async function () {
- await setup();
-});
-
-add_task(async function pauseImpressionIntervalMs() {
- const additionalInterval = 1000;
- const originalInterval = UrlbarPrefs.get(
- "searchEngagementTelemetry.pauseImpressionIntervalMs"
- );
- await SpecialPowers.pushPrefEnv({
- set: [
- [
- "browser.urlbar.searchEngagementTelemetry.pauseImpressionIntervalMs",
- originalInterval + additionalInterval,
- ],
- ],
- });
-
- await doTest(async browser => {
- await openPopup("https://example.com");
-
- // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
- await new Promise(r => setTimeout(r, originalInterval));
- await Services.fog.testFlushAllChildren();
- assertImpressionTelemetry([]);
-
- // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
- await new Promise(r => setTimeout(r, additionalInterval));
- await Services.fog.testFlushAllChildren();
- assertImpressionTelemetry([{ sap: "urlbar_newtab" }]);
- });
-
- await SpecialPowers.popPrefEnv();
-});
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_sap.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_sap.js
deleted file mode 100644
index 482b906024..0000000000
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_sap.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-// Test for the following data of impression telemetry.
-// - sap
-
-add_setup(async function () {
- await initSapTest();
-});
-
-add_task(async function urlbar() {
- await doUrlbarTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- { reason: "pause", sap: "urlbar_newtab" },
- { reason: "pause", sap: "urlbar" },
- ]),
- });
-});
-
-add_task(async function handoff() {
- await doHandoffTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([{ reason: "pause", sap: "handoff" }]),
- });
-});
-
-add_task(async function urlbar_addonpage() {
- await doUrlbarAddonpageTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([{ reason: "pause", sap: "urlbar_addonpage" }]),
- });
-});
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_search_engine_default_id.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_search_engine_default_id.js
deleted file mode 100644
index c5bd983d7f..0000000000
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_search_engine_default_id.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-// Test for the following data of impression telemetry.
-// - search_engine_default_id
-
-add_setup(async function () {
- await initSearchEngineDefaultIdTest();
- // Increase the pausing time to ensure to ready for all suggestions.
- await SpecialPowers.pushPrefEnv({
- set: [
- [
- "browser.urlbar.searchEngagementTelemetry.pauseImpressionIntervalMs",
- 500,
- ],
- ],
- });
-});
-
-add_task(async function basic() {
- await doSearchEngineDefaultIdTest({
- trigger: () => waitForPauseImpression(),
- assert: engineId =>
- assertImpressionTelemetry([{ search_engine_default_id: engineId }]),
- });
-});
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_search_mode.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_search_mode.js
deleted file mode 100644
index 727afa3cef..0000000000
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_search_mode.js
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-// Test for the following data of impression telemetry.
-// - search_mode
-
-add_setup(async function () {
- await initSearchModeTest();
- // Increase the pausing time to ensure entering search mode.
- await SpecialPowers.pushPrefEnv({
- set: [
- [
- "browser.urlbar.searchEngagementTelemetry.pauseImpressionIntervalMs",
- 1000,
- ],
- ],
- });
-});
-
-add_task(async function not_search_mode() {
- await doNotSearchModeTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([{ reason: "pause", search_mode: "" }]),
- });
-});
-
-add_task(async function search_engine() {
- await doSearchEngineTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- { reason: "pause", search_mode: "search_engine" },
- ]),
- });
-});
-
-add_task(async function bookmarks() {
- await doBookmarksTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([
- { reason: "pause", search_mode: "bookmarks" },
- ]),
- });
-});
-
-add_task(async function history() {
- await doHistoryTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([{ reason: "pause", search_mode: "history" }]),
- });
-});
-
-add_task(async function tabs() {
- await doTabTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([{ reason: "pause", search_mode: "tabs" }]),
- });
-});
-
-add_task(async function actions() {
- await doActionsTest({
- trigger: () => waitForPauseImpression(),
- assert: () =>
- assertImpressionTelemetry([{ reason: "pause", search_mode: "actions" }]),
- });
-});
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_timing.js b/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_timing.js
deleted file mode 100644
index 31f64996f3..0000000000
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/browser_glean_telemetry_impression_timing.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
- * http://creativecommons.org/publicdomain/zero/1.0/ */
-
-"use strict";
-
-// Test for the taking timing for the impression telemetry.
-
-add_setup(async function () {
- await setup();
-});
-
-add_task(async function cancelImpressionTimerByEngagementEvent() {
- const additionalInterval = 1000;
- const originalInterval = UrlbarPrefs.get(
- "searchEngagementTelemetry.pauseImpressionIntervalMs"
- );
- await SpecialPowers.pushPrefEnv({
- set: [
- [
- "browser.urlbar.searchEngagementTelemetry.pauseImpressionIntervalMs",
- originalInterval + additionalInterval,
- ],
- ],
- });
-
- for (const trigger of [doEnter, doBlur]) {
- await doTest(async browser => {
- await openPopup("https://example.com");
- await trigger();
-
- // Check whether the impression timer was canceled.
- await new Promise(r =>
- // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
- setTimeout(r, originalInterval + additionalInterval)
- );
- assertImpressionTelemetry([]);
- });
- }
-
- await SpecialPowers.popPrefEnv();
-});
-
-add_task(async function cancelInpressionTimerByType() {
- const originalInterval = UrlbarPrefs.get(
- "searchEngagementTelemetry.pauseImpressionIntervalMs"
- );
-
- await doTest(async browser => {
- await openPopup("x");
- await new Promise(r =>
- // eslint-disable-next-line mozilla/no-arbitrary-setTimeout
- setTimeout(r, originalInterval / 10)
- );
- assertImpressionTelemetry([]);
-
- EventUtils.synthesizeKey(" ");
- EventUtils.synthesizeKey("z");
- await UrlbarTestUtils.promiseSearchComplete(window);
- assertImpressionTelemetry([]);
- await waitForPauseImpression();
-
- assertImpressionTelemetry([{ n_chars: 3 }]);
- });
-});
-
-add_task(async function oneImpressionInOneSession() {
- await doTest(async browser => {
- await openPopup("x");
- await waitForPauseImpression();
-
- // Sanity check.
- assertImpressionTelemetry([{ n_chars: 1 }]);
-
- // Add a keyword to start new query.
- EventUtils.synthesizeKey(" ");
- EventUtils.synthesizeKey("z");
- await UrlbarTestUtils.promiseSearchComplete(window);
- await waitForPauseImpression();
-
- // No more taking impression telemetry.
- assertImpressionTelemetry([{ n_chars: 1 }]);
-
- // Finish the current session.
- await doEnter();
-
- // Should take pause impression since new session started.
- await openPopup("x z y");
- await waitForPauseImpression();
- assertImpressionTelemetry([{ n_chars: 1 }, { n_chars: 5 }]);
- });
-});
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/head-groups.js b/browser/components/urlbar/tests/engagementTelemetry/browser/head-groups.js
index e86c664b46..cc73c7509f 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/head-groups.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/head-groups.js
@@ -11,7 +11,7 @@ ChromeUtils.defineESModuleGetters(this, {
});
async function doHeuristicsTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("x");
await trigger();
@@ -24,7 +24,7 @@ async function doAdaptiveHistoryTest({ trigger, assert }) {
set: [["browser.urlbar.autoFill", false]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await PlacesTestUtils.addVisits(["https://example.com/test"]);
await UrlbarUtils.addToInputHistory("https://example.com/test", "examp");
@@ -46,7 +46,7 @@ async function doSearchHistoryTest({ trigger, assert }) {
],
});
- await doTest(async browser => {
+ await doTest(async () => {
await UrlbarTestUtils.formHistory.add(["foofoo", "foobar"]);
await openPopup("foo");
@@ -64,7 +64,7 @@ async function doRecentSearchTest({ trigger, assert }) {
set: [["browser.urlbar.recentsearches.featureGate", true]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await UrlbarTestUtils.formHistory.add([
{ value: "foofoo", source: Services.search.defaultEngine.name },
]);
@@ -87,7 +87,7 @@ async function doSearchSuggestTest({ trigger, assert }) {
],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("foo");
await selectRowByURL("http://mochi.test:8888/?terms=foofoo");
@@ -101,7 +101,7 @@ async function doSearchSuggestTest({ trigger, assert }) {
async function doTailSearchSuggestTest({ trigger, assert }) {
const cleanup = await _useTailSuggestionsEngine();
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("hello");
await selectRowByProvider("SearchSuggestions");
@@ -127,7 +127,7 @@ async function doTopPickTest({ trigger, assert }) {
],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("navigational");
await selectRowByURL("https://example.com/navigational-suggestion");
@@ -139,7 +139,7 @@ async function doTopPickTest({ trigger, assert }) {
}
async function doTopSiteTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await addTopSites("https://example.com/");
await showResultByArrowDown();
@@ -158,7 +158,7 @@ async function doClipboardTest({ trigger, assert }) {
],
});
SpecialPowers.clipboardCopyString("https://example.com/clipboard");
- await doTest(async browser => {
+ await doTest(async () => {
await showResultByArrowDown();
await selectRowByURL("https://example.com/clipboard");
@@ -173,7 +173,7 @@ async function doClipboardTest({ trigger, assert }) {
async function doRemoteTabTest({ trigger, assert }) {
const remoteTab = await loadRemoteTab("https://example.com");
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("example");
await selectRowByProvider("RemoteTabs");
@@ -188,7 +188,7 @@ async function doAddonTest({ trigger, assert }) {
const addon = loadOmniboxAddon({ keyword: "omni" });
await addon.startup();
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("omni test");
await trigger();
@@ -199,7 +199,7 @@ async function doAddonTest({ trigger, assert }) {
}
async function doGeneralBookmarkTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
url: "https://example.com/bookmark",
@@ -219,7 +219,7 @@ async function doGeneralHistoryTest({ trigger, assert }) {
set: [["browser.urlbar.autoFill", false]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await PlacesTestUtils.addVisits("https://example.com/test");
await openPopup("example");
@@ -235,7 +235,7 @@ async function doGeneralHistoryTest({ trigger, assert }) {
async function doSuggestTest({ trigger, assert }) {
const cleanupQuickSuggest = await ensureQuickSuggestInit();
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("nonsponsored");
await selectRowByURL("https://example.com/nonsponsored");
@@ -251,7 +251,7 @@ async function doAboutPageTest({ trigger, assert }) {
set: [["browser.urlbar.maxRichResults", 3]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("about:");
await selectRowByURL("about:robots");
@@ -267,7 +267,7 @@ async function doSuggestedIndexTest({ trigger, assert }) {
set: [["browser.urlbar.unitConversion.enabled", true]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("1m to cm");
await selectRowByProvider("UnitConversion");
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/head-interaction.js b/browser/components/urlbar/tests/engagementTelemetry/browser/head-interaction.js
index 244e27d272..58c55b416f 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/head-interaction.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/head-interaction.js
@@ -14,7 +14,7 @@ ChromeUtils.defineESModuleGetters(this, {
});
async function doTopsitesTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await addTopSites("https://example.com/");
await showResultByArrowDown();
@@ -120,7 +120,7 @@ async function doTopsitesSearchTest({ trigger, assert }) {
}
async function doTypedTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("x");
await trigger();
@@ -129,7 +129,7 @@ async function doTypedTest({ trigger, assert }) {
}
async function doTypedWithResultsPopupTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await showResultByArrowDown();
EventUtils.synthesizeKey("x");
await UrlbarTestUtils.promiseSearchComplete(window);
@@ -140,7 +140,7 @@ async function doTypedWithResultsPopupTest({ trigger, assert }) {
}
async function doPastedTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await doPaste("www.example.com");
await trigger();
@@ -149,7 +149,7 @@ async function doPastedTest({ trigger, assert }) {
}
async function doPastedWithResultsPopupTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await showResultByArrowDown();
await doPaste("x");
@@ -189,9 +189,8 @@ async function doReturnedRestartedRefinedTest({ trigger, assert }) {
];
for (const { firstInput, secondInput, expected } of testData) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup(firstInput);
- await waitForPauseImpression();
await doBlur();
await UrlbarTestUtils.promisePopupOpen(window, () => {
@@ -211,9 +210,8 @@ async function doReturnedRestartedRefinedTest({ trigger, assert }) {
}
async function doPersistedSearchTermsTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("x");
- await waitForPauseImpression();
await doEnter();
await openPopup("x");
@@ -258,9 +256,8 @@ async function doPersistedSearchTermsRestartedRefinedTest({
];
for (const { firstInput, secondInput, expected } of testData) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup(firstInput);
- await waitForPauseImpression();
await doEnter();
await UrlbarTestUtils.promisePopupOpen(window, () => {
@@ -314,13 +311,11 @@ async function doPersistedSearchTermsRestartedRefinedViaAbandonmentTest({
];
for (const { firstInput, secondInput, expected } of testData) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("any search");
- await waitForPauseImpression();
await doEnter();
await openPopup(firstInput);
- await waitForPauseImpression();
await doBlur();
await UrlbarTestUtils.promisePopupOpen(window, () => {
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/head-n_chars_n_words.js b/browser/components/urlbar/tests/engagementTelemetry/browser/head-n_chars_n_words.js
index 6d4c61c7f0..154f3ec11c 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/head-n_chars_n_words.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/head-n_chars_n_words.js
@@ -7,7 +7,7 @@
async function doNCharsTest({ trigger, assert }) {
for (const input of ["x", "xx", "xx x", "xx x "]) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup(input);
await trigger();
@@ -17,7 +17,7 @@ async function doNCharsTest({ trigger, assert }) {
}
async function doNCharsWithOverMaxTextLengthCharsTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
let input = "";
for (let i = 0; i < UrlbarUtils.MAX_TEXT_LENGTH * 2; i++) {
input += "x";
@@ -31,7 +31,7 @@ async function doNCharsWithOverMaxTextLengthCharsTest({ trigger, assert }) {
async function doNWordsTest({ trigger, assert }) {
for (const input of ["x", "xx", "xx x", "xx x "]) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup(input);
await trigger();
@@ -42,7 +42,7 @@ async function doNWordsTest({ trigger, assert }) {
}
async function doNWordsWithOverMaxTextLengthCharsTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
const word = "1234 ";
let input = "";
while (input.length < UrlbarUtils.MAX_TEXT_LENGTH * 2) {
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/head-sap.js b/browser/components/urlbar/tests/engagementTelemetry/browser/head-sap.js
index ef95873813..ee74136b22 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/head-sap.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/head-sap.js
@@ -6,7 +6,7 @@
/* import-globals-from head.js */
async function doUrlbarNewTabTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("x");
await trigger();
@@ -15,9 +15,8 @@ async function doUrlbarNewTabTest({ trigger, assert }) {
}
async function doUrlbarTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("x");
- await waitForPauseImpression();
await doEnter();
await openPopup("y");
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/head-search_engine_default_id.js b/browser/components/urlbar/tests/engagementTelemetry/browser/head-search_engine_default_id.js
index c0af764e7f..5bf8cc3735 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/head-search_engine_default_id.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/head-search_engine_default_id.js
@@ -6,7 +6,7 @@
/* import-globals-from head.js */
async function doSearchEngineDefaultIdTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
info("Test with current engine");
const defaultEngine = await Services.search.getDefault();
@@ -15,7 +15,7 @@ async function doSearchEngineDefaultIdTest({ trigger, assert }) {
await assert(defaultEngine.telemetryId);
});
- await doTest(async browser => {
+ await doTest(async () => {
info("Test with new engine");
const defaultEngine = await Services.search.getDefault();
const newEngineName = "NewDummyEngine";
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/head-search_mode.js b/browser/components/urlbar/tests/engagementTelemetry/browser/head-search_mode.js
index 5c877da05f..86151e1ba3 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/head-search_mode.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/head-search_mode.js
@@ -6,7 +6,7 @@
/* import-globals-from head.js */
async function doNotSearchModeTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("x");
await trigger();
@@ -15,7 +15,7 @@ async function doNotSearchModeTest({ trigger, assert }) {
}
async function doSearchEngineTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("x");
await UrlbarTestUtils.enterSearchMode(window);
@@ -25,7 +25,7 @@ async function doSearchEngineTest({ trigger, assert }) {
}
async function doBookmarksTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await PlacesUtils.bookmarks.insert({
parentGuid: PlacesUtils.bookmarks.unfiledGuid,
url: "https://example.com/bookmark",
@@ -47,7 +47,7 @@ async function doHistoryTest({ trigger, assert }) {
set: [["browser.urlbar.autoFill", false]],
});
- await doTest(async browser => {
+ await doTest(async () => {
await PlacesTestUtils.addVisits("https://example.com/test");
await openPopup("example");
await UrlbarTestUtils.enterSearchMode(window, {
@@ -65,7 +65,7 @@ async function doHistoryTest({ trigger, assert }) {
async function doTabTest({ trigger, assert }) {
const tab = BrowserTestUtils.addTab(gBrowser, "https://example.com/");
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("example");
await UrlbarTestUtils.enterSearchMode(window, {
source: UrlbarUtils.RESULT_SOURCE.TABS,
@@ -80,7 +80,7 @@ async function doTabTest({ trigger, assert }) {
}
async function doActionsTest({ trigger, assert }) {
- await doTest(async browser => {
+ await doTest(async () => {
await openPopup("add");
await UrlbarTestUtils.enterSearchMode(window, {
source: UrlbarUtils.RESULT_SOURCE.ACTIONS,
diff --git a/browser/components/urlbar/tests/engagementTelemetry/browser/head.js b/browser/components/urlbar/tests/engagementTelemetry/browser/head.js
index 367387b0e8..4317a50930 100644
--- a/browser/components/urlbar/tests/engagementTelemetry/browser/head.js
+++ b/browser/components/urlbar/tests/engagementTelemetry/browser/head.js
@@ -58,10 +58,6 @@ function assertEngagementTelemetry(expectedExtraList) {
_assertGleanTelemetry("engagement", expectedExtraList);
}
-function assertImpressionTelemetry(expectedExtraList) {
- _assertGleanTelemetry("impression", expectedExtraList);
-}
-
function assertExposureTelemetry(expectedExtraList) {
_assertGleanTelemetry("exposure", expectedExtraList);
}
@@ -204,12 +200,6 @@ async function doPasteAndGo(data) {
async function doTest(testFn) {
await Services.fog.testFlushAllChildren();
Services.fog.testResetFOG();
- // Enable recording telemetry for impression, as it is disabled by default.
- Services.fog.setMetricsFeatureConfig(
- JSON.stringify({
- "urlbar.impression": true,
- })
- );
gURLBar.controller.engagementEvent.reset();
await PlacesUtils.history.clear();
@@ -223,8 +213,8 @@ async function doTest(testFn) {
try {
await BrowserTestUtils.withNewTab(gBrowser, testFn);
- } finally {
- Services.fog.setMetricsFeatureConfig("{}");
+ } catch (e) {
+ console.error(e);
}
}
@@ -423,10 +413,6 @@ async function setup() {
["browser.urlbar.quickactions.minimumSearchString", 0],
["browser.urlbar.suggest.quickactions", true],
["browser.urlbar.shortcuts.quickactions", true],
- [
- "browser.urlbar.searchEngagementTelemetry.pauseImpressionIntervalMs",
- 100,
- ],
],
});
@@ -461,13 +447,3 @@ async function showResultByArrowDown() {
});
await UrlbarTestUtils.promiseSearchComplete(window);
}
-
-async function waitForPauseImpression() {
- await new Promise(r =>
- setTimeout(
- r,
- UrlbarPrefs.get("searchEngagementTelemetry.pauseImpressionIntervalMs")
- )
- );
- await Services.fog.testFlushAllChildren();
-}
diff --git a/browser/components/urlbar/tests/quicksuggest/MerinoTestUtils.sys.mjs b/browser/components/urlbar/tests/quicksuggest/MerinoTestUtils.sys.mjs
index 6cda9bb9a7..1828ddbceb 100644
--- a/browser/components/urlbar/tests/quicksuggest/MerinoTestUtils.sys.mjs
+++ b/browser/components/urlbar/tests/quicksuggest/MerinoTestUtils.sys.mjs
@@ -355,20 +355,16 @@ class _MerinoTestUtils {
lazy.QuickSuggest.weather._test_fetchIntervalMs = WEATHER_FETCH_INTERVAL_MS;
- // Enabling weather will trigger a fetch. Wait for it to finish so the
- // suggestion is ready when this function returns.
- this.info("MockMerinoServer initializing weather, waiting for fetch");
- let fetchPromise = lazy.QuickSuggest.weather.waitForFetches();
+ // Enabling weather will trigger a fetch. Queue another fetch and await it
+ // so no fetches are ongoing when this function returns.
+ this.info("MockMerinoServer initializing weather, setting prefs");
lazy.UrlbarPrefs.set("weather.featureGate", true);
lazy.UrlbarPrefs.set("suggest.weather", true);
- await fetchPromise;
- this.info("MockMerinoServer initializing weather, got fetch");
-
- this.Assert.equal(
- lazy.QuickSuggest.weather._test_pendingFetchCount,
- 0,
- "No pending fetches after awaiting initial fetch"
+ this.info(
+ "MockMerinoServer initializing weather, done setting prefs, starting fetch"
);
+ await lazy.QuickSuggest.weather._test_fetch();
+ this.info("MockMerinoServer initializing weather, done awaiting fetch");
this.registerCleanupFunction?.(async () => {
lazy.UrlbarPrefs.clear("weather.featureGate");
diff --git a/browser/components/urlbar/tests/quicksuggest/RemoteSettingsServer.sys.mjs b/browser/components/urlbar/tests/quicksuggest/RemoteSettingsServer.sys.mjs
index 32b42198c3..c2aeca1991 100644
--- a/browser/components/urlbar/tests/quicksuggest/RemoteSettingsServer.sys.mjs
+++ b/browser/components/urlbar/tests/quicksuggest/RemoteSettingsServer.sys.mjs
@@ -9,7 +9,6 @@ ChromeUtils.defineESModuleGetters(lazy, {
HttpError: "resource://testing-common/httpd.sys.mjs",
HttpServer: "resource://testing-common/httpd.sys.mjs",
HTTP_404: "resource://testing-common/httpd.sys.mjs",
- Log: "resource://gre/modules/Log.sys.mjs",
});
const SERVER_PREF = "services.settings.server";
@@ -23,23 +22,16 @@ export class RemoteSettingsServer {
* The server must be started by calling `start()`.
*
* @param {object} options
- * @param {number} options.logLevel
- * A `Log.Level` value from `Log.sys.mjs`. `Log.Level.Info` logs basic info
- * on requests and responses like paths and status codes. Pass
- * `Log.Level.Debug` to log more info like headers, response bodies, and
- * added and removed records.
+ * @param {number} options.maxLogLevel
+ * A log level value as defined by ConsoleInstance. `Info` logs basic info
+ * on requests and responses like paths and status codes. Pass `Debug` to
+ * log more info like headers, response bodies, added and removed records.
*/
- constructor({ logLevel = lazy.Log.Level.Info } = {}) {
- this.#log = lazy.Log.repository.getLogger("RemoteSettingsServer");
- this.#log.level = logLevel;
-
- // Use `DumpAppender` instead of `ConsoleAppender`. The xpcshell and browser
- // test harnesses buffer console messages and log them later, which makes it
- // really hard to debug problems. `DumpAppender` logs to stdout, which the
- // harnesses log immediately.
- this.#log.addAppender(
- new lazy.Log.DumpAppender(new lazy.Log.BasicFormatter())
- );
+ constructor({ maxLogLevel = "Info" } = {}) {
+ this.#log = console.createInstance({
+ prefix: "RemoteSettingsServer",
+ maxLogLevel,
+ });
}
/**
@@ -587,14 +579,12 @@ export class RemoteSettingsServer {
* The associated request.
* @param {integer} options.status
* The HTTP status code of the response.
- * @param {string} options.statusText
- * The description of the status code.
* @param {object} options.headers
* An object mapping from response header names to values.
* @param {object} options.body
* The response body, if any.
*/
- #logResponse({ request, status, statusText, headers, body }) {
+ #logResponse({ request, status, headers, body }) {
this.#log.info(`> ${status} ${request.path}`);
for (let [name, value] of Object.entries(headers)) {
this.#log.debug(`${name}: ${value}`);
diff --git a/browser/components/urlbar/tests/quicksuggest/browser/browser_quicksuggest_onboardingDialog.js b/browser/components/urlbar/tests/quicksuggest/browser/browser_quicksuggest_onboardingDialog.js
index 6256a5aec2..dbd8f59ade 100644
--- a/browser/components/urlbar/tests/quicksuggest/browser/browser_quicksuggest_onboardingDialog.js
+++ b/browser/components/urlbar/tests/quicksuggest/browser/browser_quicksuggest_onboardingDialog.js
@@ -373,7 +373,6 @@ const VARIATION_TEST_DATA = [
"onboardingNext",
"onboardingAccept",
"onboardingLearnMore",
- "onboardingReject",
"onboardingSkipLink",
"onboardingDialog",
"onboardingAccept",
@@ -706,7 +705,6 @@ const VARIATION_TEST_DATA = [
"onboardingNext",
"onboardingLearnMore",
"onboardingAccept",
- "onboardingReject",
"onboardingSkipLink",
"onboardingDialog",
"onboardingLearnMore",
@@ -762,7 +760,6 @@ const VARIATION_TEST_DATA = [
defaultFocusOrder: [
"onboardingLearnMore",
"onboardingAccept",
- "onboardingReject",
"onboardingSkipLink",
"onboardingDialog",
"onboardingLearnMore",
diff --git a/browser/components/urlbar/tests/quicksuggest/browser/browser_telemetry_impressionEdgeCases.js b/browser/components/urlbar/tests/quicksuggest/browser/browser_telemetry_impressionEdgeCases.js
index 8682f1f53a..821c5cf470 100644
--- a/browser/components/urlbar/tests/quicksuggest/browser/browser_telemetry_impressionEdgeCases.js
+++ b/browser/components/urlbar/tests/quicksuggest/browser/browser_telemetry_impressionEdgeCases.js
@@ -172,7 +172,7 @@ add_task(async function hiddenRow() {
// mutation listener to the view so we can tell when the quick suggest row is
// added.
let mutationPromise = new Promise(resolve => {
- let observer = new MutationObserver(mutations => {
+ let observer = new MutationObserver(() => {
let rows = UrlbarTestUtils.getResultsContainer(window).children;
for (let row of rows) {
if (row.result.providerName == "UrlbarProviderQuickSuggest") {
diff --git a/browser/components/urlbar/tests/quicksuggest/browser/browser_weather.js b/browser/components/urlbar/tests/quicksuggest/browser/browser_weather.js
index 1c3f0e62e7..e10e87b516 100644
--- a/browser/components/urlbar/tests/quicksuggest/browser/browser_weather.js
+++ b/browser/components/urlbar/tests/quicksuggest/browser/browser_weather.js
@@ -11,6 +11,11 @@ ChromeUtils.defineESModuleGetters(this, {
UrlbarProviderWeather: "resource:///modules/UrlbarProviderWeather.sys.mjs",
});
+// This test takes a while and can time out in verify mode. Each task is run
+// twice, once with Rust enabled and once with it disabled. Once we remove the
+// JS backend this should improve a lot, but for now request a longer timeout.
+requestLongerTimeout(5);
+
add_setup(async function () {
await QuickSuggestTestUtils.ensureQuickSuggestInit({
remoteSettingsRecords: [
@@ -21,6 +26,15 @@ add_setup(async function () {
],
});
await MerinoTestUtils.initWeather();
+
+ // When `add_tasks_with_rust()` disables the Rust backend and forces sync, the
+ // JS backend will sync `Weather` with remote settings. Since keywords are
+ // present in remote settings at that point (we added them above), `Weather`
+ // will then start fetching. The fetch may or may not be done before our test
+ // task starts. To make sure it's done, queue another fetch and await it.
+ registerAddTasksWithRustSetup(async () => {
+ await QuickSuggest.weather._test_fetch();
+ });
});
// Basic checks of the row DOM.
@@ -341,11 +355,8 @@ async function doDismissTest(command) {
await UrlbarTestUtils.promisePopupClose(window);
// Enable the weather suggestion again and wait for it to be fetched.
- let fetchPromise = QuickSuggest.weather.waitForFetches();
UrlbarPrefs.clear("suggest.weather");
- info("Waiting for weather fetch after re-enabling the suggestion");
- await fetchPromise;
- info("Got weather fetch");
+ await QuickSuggest.weather._test_fetch();
// Wait for keywords to be re-synced from remote settings.
await QuickSuggestTestUtils.forceSync();
@@ -396,6 +407,94 @@ async function doSessionOngoingCommandTest(command) {
await doDismissTest("not_interested");
}
+// Test for menu item to mange the suggest.
+add_tasks_with_rust(async function manage() {
+ await BrowserTestUtils.withNewTab({ gBrowser }, async browser => {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: MerinoTestUtils.WEATHER_KEYWORD,
+ });
+
+ let resultIndex = 1;
+ let details = await UrlbarTestUtils.getDetailsOfResultAt(
+ window,
+ resultIndex
+ );
+ assertIsWeatherResult(details.result, true);
+
+ const managePage = "about:preferences#search";
+ let onManagePageLoaded = BrowserTestUtils.browserLoaded(
+ browser,
+ false,
+ managePage
+ );
+ // Click the command.
+ await UrlbarTestUtils.openResultMenuAndClickItem(window, "manage", {
+ resultIndex,
+ });
+ await onManagePageLoaded;
+ Assert.equal(
+ browser.currentURI.spec,
+ managePage,
+ "The manage page is loaded"
+ );
+
+ await UrlbarTestUtils.promisePopupClose(window);
+ });
+});
+
+// Test for simple UI.
+add_tasks_with_rust(async function simpleUI() {
+ const testData = [
+ {
+ weatherSimpleUI: true,
+ expectedSummary:
+ MerinoTestUtils.WEATHER_SUGGESTION.current_conditions.summary,
+ },
+ {
+ weatherSimpleUI: false,
+ expectedSummary: `${MerinoTestUtils.WEATHER_SUGGESTION.current_conditions.summary}; ${MerinoTestUtils.WEATHER_SUGGESTION.forecast.summary}`,
+ },
+ ];
+
+ for (let { weatherSimpleUI, expectedSummary } of testData) {
+ let nimbusCleanup = await UrlbarTestUtils.initNimbusFeature({
+ weatherSimpleUI,
+ });
+
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: MerinoTestUtils.WEATHER_KEYWORD,
+ });
+
+ let resultIndex = 1;
+ let details = await UrlbarTestUtils.getDetailsOfResultAt(
+ window,
+ resultIndex
+ );
+ assertIsWeatherResult(details.result, true);
+
+ let { row } = details.element;
+ let summary = row.querySelector(".urlbarView-dynamic-weather-summaryText");
+
+ // `getViewUpdate()` is allowed to be async and `UrlbarView` awaits it even
+ // though the `Weather` implementation is not async. That means the summary
+ // text content will be updated asyncly, so we need to wait for it.
+ await TestUtils.waitForCondition(
+ () => summary.textContent == expectedSummary,
+ "Waiting for the row's summary text to be updated"
+ );
+ Assert.equal(
+ summary.textContent,
+ expectedSummary,
+ "The summary text should be correct"
+ );
+
+ await UrlbarTestUtils.promisePopupClose(window);
+ await nimbusCleanup();
+ }
+});
+
function assertIsWeatherResult(result, isWeatherResult) {
let provider = UrlbarPrefs.get("quickSuggestRustEnabled")
? UrlbarProviderQuickSuggest
diff --git a/browser/components/urlbar/tests/quicksuggest/browser/head.js b/browser/components/urlbar/tests/quicksuggest/browser/head.js
index 7d62a44d45..cc5f449e94 100644
--- a/browser/components/urlbar/tests/quicksuggest/browser/head.js
+++ b/browser/components/urlbar/tests/quicksuggest/browser/head.js
@@ -636,20 +636,49 @@ function _assertGleanPing(ping) {
}
}
+let gAddTasksWithRustSetup;
+
/**
* Adds two tasks: One with the Rust backend disabled and one with it enabled.
* The names of the task functions will be the name of the passed-in task
- * function appended with "_rustDisabled" and "_rustEnabled" respectively. Call
- * with the usual `add_task()` arguments.
+ * function appended with "_rustDisabled" and "_rustEnabled". If the passed-in
+ * task doesn't have a name, "anonymousTask" will be used.
+ *
+ * Call this with the usual `add_task()` arguments. Additionally, an object with
+ * the following properties can be specified as any argument:
+ *
+ * {boolean} skip_if_rust_enabled
+ * If true, a "_rustEnabled" task won't be added. Useful when Rust is enabled
+ * by default but the task doesn't make sense with Rust and you still want to
+ * test some behavior when Rust is disabled.
*
* @param {...any} args
* The usual `add_task()` arguments.
*/
function add_tasks_with_rust(...args) {
+ let skipIfRustEnabled = false;
+ let i = args.findIndex(a => a.skip_if_rust_enabled);
+ if (i >= 0) {
+ skipIfRustEnabled = true;
+ args.splice(i, 1);
+ }
+
let taskFnIndex = args.findIndex(a => typeof a == "function");
let taskFn = args[taskFnIndex];
for (let rustEnabled of [false, true]) {
+ let newTaskName =
+ (taskFn.name || "anonymousTask") +
+ (rustEnabled ? "_rustEnabled" : "_rustDisabled");
+
+ if (rustEnabled && skipIfRustEnabled) {
+ info(
+ "add_tasks_with_rust: Skipping due to skip_if_rust_enabled: " +
+ newTaskName
+ );
+ continue;
+ }
+
let newTaskFn = async (...taskFnArgs) => {
info("add_tasks_with_rust: Setting rustEnabled: " + rustEnabled);
UrlbarPrefs.set("quicksuggest.rustEnabled", rustEnabled);
@@ -660,12 +689,30 @@ function add_tasks_with_rust(...args) {
await QuickSuggestTestUtils.forceSync();
info("add_tasks_with_rust: Done forcing sync");
+ if (gAddTasksWithRustSetup) {
+ info("add_tasks_with_rust: Calling setup function");
+ await gAddTasksWithRustSetup();
+ info("add_tasks_with_rust: Done calling setup function");
+ }
+
let rv;
try {
info(
"add_tasks_with_rust: Calling original task function: " + taskFn.name
);
rv = await taskFn(...taskFnArgs);
+ } catch (e) {
+ // Clearly report any unusual errors to make them easier to spot and to
+ // make the flow of the test clearer. The harness throws NS_ERROR_ABORT
+ // when a normal assertion fails, so don't report that.
+ if (e.result != Cr.NS_ERROR_ABORT) {
+ Assert.ok(
+ false,
+ "add_tasks_with_rust: The original task function threw an error: " +
+ e
+ );
+ }
+ throw e;
} finally {
info(
"add_tasks_with_rust: Done calling original task function: " +
@@ -683,11 +730,32 @@ function add_tasks_with_rust(...args) {
return rv;
};
- Object.defineProperty(newTaskFn, "name", {
- value: taskFn.name + (rustEnabled ? "_rustEnabled" : "_rustDisabled"),
- });
- let addTaskArgs = [...args];
- addTaskArgs[taskFnIndex] = newTaskFn;
+ Object.defineProperty(newTaskFn, "name", { value: newTaskName });
+
+ let addTaskArgs = [];
+ for (let j = 0; j < args.length; j++) {
+ addTaskArgs[j] =
+ j == taskFnIndex
+ ? newTaskFn
+ : Cu.cloneInto(args[j], this, { cloneFunctions: true });
+ }
add_task(...addTaskArgs);
}
}
+
+/**
+ * Registers a setup function that `add_tasks_with_rust()` will await before
+ * calling each of your original tasks. Call this at most once in your test file
+ * (i.e., in `add_setup()`). This is useful when enabling/disabling Rust has
+ * side effects related to your particular test that need to be handled or
+ * awaited for each of your tasks. On the other hand, if only one or two of your
+ * tasks need special setup, do it directly in those tasks instead of using
+ * this. The passed-in `setupFn` is automatically unregistered on cleanup.
+ *
+ * @param {Function} setupFn
+ * A function that will be awaited before your original tasks are called.
+ */
+function registerAddTasksWithRustSetup(setupFn) {
+ gAddTasksWithRustSetup = setupFn;
+ registerCleanupFunction(() => (gAddTasksWithRustSetup = null));
+}
diff --git a/browser/components/urlbar/tests/quicksuggest/unit/head.js b/browser/components/urlbar/tests/quicksuggest/unit/head.js
index c468e4526f..73bedf468e 100644
--- a/browser/components/urlbar/tests/quicksuggest/unit/head.js
+++ b/browser/components/urlbar/tests/quicksuggest/unit/head.js
@@ -20,18 +20,49 @@ add_setup(async function setUpQuickSuggestXpcshellTest() {
UrlbarPrefs._testSkipTelemetryEnvironmentInit = true;
});
+let gAddTasksWithRustSetup;
+
/**
* Adds two tasks: One with the Rust backend disabled and one with it enabled.
* The names of the task functions will be the name of the passed-in task
* function appended with "_rustDisabled" and "_rustEnabled". If the passed-in
- * task doesn't have a name, "anonymousTask" will be used. Call this with the
- * usual `add_task()` arguments.
+ * task doesn't have a name, "anonymousTask" will be used.
+ *
+ * Call this with the usual `add_task()` arguments. Additionally, an object with
+ * the following properties can be specified as any argument:
+ *
+ * {boolean} skip_if_rust_enabled
+ * If true, a "_rustEnabled" task won't be added. Useful when Rust is enabled
+ * by default but the task doesn't make sense with Rust and you still want to
+ * test some behavior when Rust is disabled.
+ *
+ * @param {...any} args
+ * The usual `add_task()` arguments.
*/
function add_tasks_with_rust(...args) {
+ let skipIfRustEnabled = false;
+ let i = args.findIndex(a => a.skip_if_rust_enabled);
+ if (i >= 0) {
+ skipIfRustEnabled = true;
+ args.splice(i, 1);
+ }
+
let taskFnIndex = args.findIndex(a => typeof a == "function");
let taskFn = args[taskFnIndex];
for (let rustEnabled of [false, true]) {
+ let newTaskName =
+ (taskFn.name || "anonymousTask") +
+ (rustEnabled ? "_rustEnabled" : "_rustDisabled");
+
+ if (rustEnabled && skipIfRustEnabled) {
+ info(
+ "add_tasks_with_rust: Skipping due to skip_if_rust_enabled: " +
+ newTaskName
+ );
+ continue;
+ }
+
let newTaskFn = async (...taskFnArgs) => {
info("add_tasks_with_rust: Setting rustEnabled: " + rustEnabled);
UrlbarPrefs.set("quicksuggest.rustEnabled", rustEnabled);
@@ -42,6 +73,12 @@ function add_tasks_with_rust(...args) {
await QuickSuggestTestUtils.forceSync();
info("add_tasks_with_rust: Done forcing sync");
+ if (gAddTasksWithRustSetup) {
+ info("add_tasks_with_rust: Calling setup function");
+ await gAddTasksWithRustSetup();
+ info("add_tasks_with_rust: Done calling setup function");
+ }
+
let rv;
try {
info(
@@ -77,18 +114,36 @@ function add_tasks_with_rust(...args) {
return rv;
};
- Object.defineProperty(newTaskFn, "name", {
- value:
- (taskFn.name || "anonymousTask") +
- (rustEnabled ? "_rustEnabled" : "_rustDisabled"),
- });
- let addTaskArgs = [...args];
- addTaskArgs[taskFnIndex] = newTaskFn;
+ Object.defineProperty(newTaskFn, "name", { value: newTaskName });
+
+ let addTaskArgs = [];
+ for (let j = 0; j < args.length; j++) {
+ addTaskArgs[j] =
+ j == taskFnIndex
+ ? newTaskFn
+ : Cu.cloneInto(args[j], this, { cloneFunctions: true });
+ }
add_task(...addTaskArgs);
}
}
/**
+ * Registers a setup function that `add_tasks_with_rust()` will await before
+ * calling each of your original tasks. Call this at most once in your test file
+ * (i.e., in `add_setup()`). This is useful when enabling/disabling Rust has
+ * side effects related to your particular test that need to be handled or
+ * awaited for each of your tasks. On the other hand, if only one or two of your
+ * tasks need special setup, do it directly in those tasks instead of using
+ * this.
+ *
+ * @param {Function} setupFn
+ * A function that will be awaited before your original tasks are called.
+ */
+function registerAddTasksWithRustSetup(setupFn) {
+ gAddTasksWithRustSetup = setupFn;
+}
+
+/**
* Returns an expected Wikipedia (non-sponsored) result that can be passed to
* `check_results()` regardless of whether the Rust backend is enabled.
*
@@ -106,7 +161,7 @@ function makeWikipediaResult({
iconBlob = new Blob([new Uint8Array([])]),
impressionUrl = "http://example.com/wikipedia-impression",
clickUrl = "http://example.com/wikipedia-click",
- blockId = 1,
+ blockId = 2,
advertiser = "Wikipedia",
iabCategory = "5 - Education",
suggestedIndex = -1,
@@ -362,7 +417,6 @@ function makeWeatherResult({
temperatureUnit,
url: MerinoTestUtils.WEATHER_SUGGESTION.url,
iconId: "6",
- helpUrl: QuickSuggest.HELP_URL,
requestId: MerinoTestUtils.server.response.body.request_id,
source: "merino",
provider: "accuweather",
@@ -909,3 +963,40 @@ async function doRustProvidersTests({ searchString, tests }) {
UrlbarPrefs.clear("quicksuggest.rustEnabled");
await QuickSuggestTestUtils.forceSync();
}
+
+/**
+ * Waits for `Weather` to start and finish a new fetch. Typically you call this
+ * before you know a new fetch will start, save but don't await the promise, do
+ * the thing that triggers the new fetch, and then await the promise to wait for
+ * the fetch to finish.
+ *
+ * If a fetch is currently ongoing, this will first wait for a new fetch to
+ * start, which might not be what you want. If you only want to wait for any
+ * ongoing fetch to finish, await `QuickSuggest.weather.fetchPromise` instead.
+ */
+async function waitForNewWeatherFetch() {
+ let { fetchPromise: oldFetchPromise } = QuickSuggest.weather;
+
+ // Wait for a new fetch to start.
+ let newFetchPromise;
+ await TestUtils.waitForCondition(() => {
+ let { fetchPromise } = QuickSuggest.weather;
+ if (
+ (oldFetchPromise && fetchPromise != oldFetchPromise) ||
+ (!oldFetchPromise && fetchPromise)
+ ) {
+ newFetchPromise = fetchPromise;
+ return true;
+ }
+ return false;
+ }, "Waiting for a new weather fetch to start");
+
+ Assert.equal(
+ QuickSuggest.weather.fetchPromise,
+ newFetchPromise,
+ "Sanity check: fetchPromise hasn't changed since waitForCondition returned"
+ );
+
+ // Wait for the new fetch to finish.
+ await newFetchPromise;
+}
diff --git a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest.js b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest.js
index e4c145aabb..59c0b26241 100644
--- a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest.js
+++ b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest.js
@@ -18,6 +18,8 @@ const HTTP_SEARCH_STRING = "http prefix";
const HTTPS_SEARCH_STRING = "https prefix";
const PREFIX_SUGGESTIONS_STRIPPED_URL = "example.com/prefix-test";
+const ONE_CHAR_SEARCH_STRINGS = ["x", "x ", " x", " x "];
+
const { TIMESTAMP_TEMPLATE, TIMESTAMP_LENGTH } = QuickSuggest;
const TIMESTAMP_SEARCH_STRING = "timestamp";
const TIMESTAMP_SUGGESTION_URL = `http://example.com/timestamp-${TIMESTAMP_TEMPLATE}`;
@@ -69,6 +71,11 @@ const REMOTE_SETTINGS_RESULTS = [
iab_category: "22 - Shopping",
icon: "1234",
},
+ QuickSuggestTestUtils.ampRemoteSettings({
+ keywords: [...ONE_CHAR_SEARCH_STRINGS, "12", "a longer keyword"],
+ title: "Suggestion with 1-char keyword",
+ url: "http://example.com/1-char-keyword",
+ }),
];
function expectedNonSponsoredResult() {
@@ -751,10 +758,10 @@ async function doDedupeAgainstURLTest({
}
// Tests the remote settings latency histogram.
-add_task(
+add_tasks_with_rust(
{
// Not supported by the Rust backend.
- skip_if: () => UrlbarPrefs.get("quickSuggestRustEnabled"),
+ skip_if_rust_enabled: true,
},
async function latencyTelemetry() {
UrlbarPrefs.set("suggest.quicksuggest.nonsponsored", true);
@@ -791,10 +798,10 @@ add_task(
// Tests setup and teardown of the remote settings client depending on whether
// quick suggest is enabled.
-add_task(
+add_tasks_with_rust(
{
// Not supported by the Rust backend.
- skip_if: () => UrlbarPrefs.get("quickSuggestRustEnabled"),
+ skip_if_rust_enabled: true,
},
async function setupAndTeardown() {
Assert.ok(
@@ -885,7 +892,7 @@ add_task(
"Remote settings backend is disabled after enabling the Rust backend"
);
- UrlbarPrefs.clear("quicksuggest.rustEnabled");
+ UrlbarPrefs.set("quicksuggest.rustEnabled", false);
Assert.ok(
QuickSuggest.jsBackend.rs,
"Settings client is non-null after disabling the Rust backend"
@@ -898,6 +905,7 @@ add_task(
// Leave the prefs in the same state as when the task started.
UrlbarPrefs.clear("suggest.quicksuggest.nonsponsored");
UrlbarPrefs.clear("suggest.quicksuggest.sponsored");
+ UrlbarPrefs.clear("quicksuggest.rustEnabled");
UrlbarPrefs.set("quicksuggest.enabled", true);
Assert.ok(
!QuickSuggest.jsBackend.rs,
@@ -1349,10 +1357,10 @@ add_tasks_with_rust(async function block_timestamp() {
// Makes sure remote settings data is fetched using the correct `type` based on
// the value of the `quickSuggestRemoteSettingsDataType` Nimbus variable.
-add_task(
+add_tasks_with_rust(
{
// Not supported by the Rust backend.
- skip_if: () => UrlbarPrefs.get("quickSuggestRustEnabled"),
+ skip_if_rust_enabled: true,
},
async function remoteSettingsDataType() {
UrlbarPrefs.set("suggest.quicksuggest.sponsored", true);
@@ -1509,7 +1517,7 @@ add_tasks_with_rust(async function tabToSearch() {
// search heuristic
makeSearchResult(context, {
engineName: Services.search.defaultEngine.name,
- engineIconUri: Services.search.defaultEngine.getIconURL(),
+ engineIconUri: await Services.search.defaultEngine.getIconURL(),
heuristic: true,
}),
// tab to search
@@ -1595,7 +1603,7 @@ add_tasks_with_rust(async function position() {
// search heuristic
makeSearchResult(context, {
engineName: Services.search.defaultEngine.name,
- engineIconUri: Services.search.defaultEngine.getIconURL(),
+ engineIconUri: await Services.search.defaultEngine.getIconURL(),
heuristic: true,
}),
// best match whose backing suggestion has a `position`
@@ -1659,3 +1667,35 @@ add_task(async function rustProviders() {
],
});
});
+
+// Tests the keyword/search-string-length threshold. Keywords/search strings
+// must be at least two characters long to be matched.
+add_tasks_with_rust(async function keywordLengthThreshold() {
+ UrlbarPrefs.set("suggest.quicksuggest.sponsored", true);
+ await QuickSuggestTestUtils.forceSync();
+
+ let tests = [
+ ...ONE_CHAR_SEARCH_STRINGS.map(keyword => ({ keyword, expected: false })),
+ { keyword: "12", expected: true },
+ { keyword: "a longer keyword", expected: true },
+ ];
+
+ for (let { keyword, expected } of tests) {
+ await check_results({
+ context: createContext(keyword, {
+ providers: [UrlbarProviderQuickSuggest.name],
+ isPrivate: false,
+ }),
+ matches: !expected
+ ? []
+ : [
+ makeAmpResult({
+ keyword,
+ title: "Suggestion with 1-char keyword",
+ url: "http://example.com/1-char-keyword",
+ originalUrl: "http://example.com/1-char-keyword",
+ }),
+ ],
+ });
+ }
+});
diff --git a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_addons.js b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_addons.js
index c17f3f1655..806685eff7 100644
--- a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_addons.js
+++ b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_addons.js
@@ -42,7 +42,7 @@ const REMOTE_SETTINGS_RESULTS = [
icon: "https://example.com/first-addon.svg",
title: "First Addon",
rating: "4.7",
- keywords: ["first", "1st", "two words", "a b c"],
+ keywords: ["first", "1st", "two words", "aa b c"],
description: "Description for the First Addon",
number_of_ratings: 1256,
score: 0.25,
@@ -353,35 +353,35 @@ add_tasks_with_rust(async function remoteSettings() {
}),
},
{
- input: "a",
+ input: "aa",
expected: makeExpectedResult({
suggestion: REMOTE_SETTINGS_RESULTS[0].attachment[0],
source: "remote-settings",
}),
},
{
- input: "a ",
+ input: "aa ",
expected: makeExpectedResult({
suggestion: REMOTE_SETTINGS_RESULTS[0].attachment[0],
source: "remote-settings",
}),
},
{
- input: "a b",
+ input: "aa b",
expected: makeExpectedResult({
suggestion: REMOTE_SETTINGS_RESULTS[0].attachment[0],
source: "remote-settings",
}),
},
{
- input: "a b ",
+ input: "aa b ",
expected: makeExpectedResult({
suggestion: REMOTE_SETTINGS_RESULTS[0].attachment[0],
source: "remote-settings",
}),
},
{
- input: "a b c",
+ input: "aa b c",
expected: makeExpectedResult({
suggestion: REMOTE_SETTINGS_RESULTS[0].attachment[0],
source: "remote-settings",
diff --git a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_pocket.js b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_pocket.js
index 29133a8579..79b4df2b77 100644
--- a/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_pocket.js
+++ b/browser/components/urlbar/tests/quicksuggest/unit/test_quicksuggest_pocket.js
@@ -214,9 +214,9 @@ add_tasks_with_rust(async function lowPrefixes() {
// starting at "how to" instead of the first word.
//
// Note: The Rust implementation doesn't support this.
-add_task(
+add_tasks_with_rust(
{
- skip_if: () => UrlbarPrefs.get("quickSuggestRustEnabled"),
+ skip_if_rust_enabled: true,
},
async function lowPrefixes_howTo() {
// search string -> should match
diff --git a/browser/components/urlbar/tests/quicksuggest/unit/test_rust_ingest.js b/browser/components/urlbar/tests/quicksuggest/unit/test_rust_ingest.js
index e6ec61bcd4..f2e3f96c1f 100644
--- a/browser/components/urlbar/tests/quicksuggest/unit/test_rust_ingest.js
+++ b/browser/components/urlbar/tests/quicksuggest/unit/test_rust_ingest.js
@@ -78,11 +78,15 @@ add_task(async function firstRun() {
await checkSuggestions();
- // Disable and re-enable the backend. No new ingestion should start
- // immediately since this isn't the first time the backend has been enabled.
+ // Disable and re-enable the backend. Another ingest should start immediately
+ // since ingest is done every time the backend is re-enabled.
UrlbarPrefs.set("quicksuggest.rustEnabled", false);
UrlbarPrefs.set("quicksuggest.rustEnabled", true);
- await assertNoNewIngestStarted(ingestPromise);
+ ({ ingestPromise } = await waitForIngestStart(ingestPromise));
+
+ info("Awaiting ingest promise");
+ await ingestPromise;
+ info("Done awaiting ingest promise");
await checkSuggestions();
@@ -101,14 +105,18 @@ add_task(async function interval() {
"Sanity check: Rust backend is initially disabled"
);
- // Set a small interval and enable the backend. No new ingestion should start
- // immediately since this isn't the first time the backend has been enabled.
+ // Set a small interval and enable the backend. A new ingest will immediately
+ // start.
let intervalSecs = 1;
UrlbarPrefs.set("quicksuggest.rustIngestIntervalSeconds", intervalSecs);
UrlbarPrefs.set("quicksuggest.rustEnabled", true);
- await assertNoNewIngestStarted(ingestPromise);
+ ({ ingestPromise } = await waitForIngestStart(ingestPromise));
- // Wait for a few ingests to happen.
+ info("Awaiting ingest promise");
+ await ingestPromise;
+ info("Done awaiting ingest promise");
+
+ // Wait for a few ingests to happen due to the timer firing.
for (let i = 0; i < 3; i++) {
info("Preparing for ingest at index " + i);
@@ -193,17 +201,6 @@ async function waitForIngestStart(oldIngestPromise) {
return { ingestPromise: newIngestPromise };
}
-async function assertNoNewIngestStarted(oldIngestPromise) {
- for (let i = 0; i < 3; i++) {
- await TestUtils.waitForTick();
- }
- Assert.equal(
- QuickSuggest.rustBackend.ingestPromise,
- oldIngestPromise,
- "No new ingest started"
- );
-}
-
async function checkSuggestions(expected = [REMOTE_SETTINGS_SUGGESTION]) {
let actual = await QuickSuggest.rustBackend.query("amp");
Assert.deepEqual(
diff --git a/browser/components/urlbar/tests/quicksuggest/unit/test_weather.js b/browser/components/urlbar/tests/quicksuggest/unit/test_weather.js
index 28801904a1..cd794f435b 100644
--- a/browser/components/urlbar/tests/quicksuggest/unit/test_weather.js
+++ b/browser/components/urlbar/tests/quicksuggest/unit/test_weather.js
@@ -34,6 +34,15 @@ add_setup(async () => {
// `lastFetchTimeMs` is expected to be `fetchDelayAfterComingOnlineMs`, we can
// be sure the value actually came from `fetchDelayAfterComingOnlineMs`.
QuickSuggest.weather._test_fetchDelayAfterComingOnlineMs = 53;
+
+ // When `add_tasks_with_rust()` disables the Rust backend and forces sync, the
+ // JS backend will sync `Weather` with remote settings. Since keywords are
+ // present in remote settings at that point (we added them above), `Weather`
+ // will then start fetching. The fetch may or may not be done before our test
+ // task starts. To make sure it's done, queue another fetch and await it.
+ registerAddTasksWithRustSetup(async () => {
+ await QuickSuggest.weather._test_fetch();
+ });
});
// The feature should be properly uninitialized when it's disabled and then
@@ -52,17 +61,15 @@ add_tasks_with_rust(async function disableAndEnable_suggestPref() {
async function doBasicDisableAndEnableTest(pref) {
// Sanity check initial state.
- assertEnabled({
+ await assertEnabled({
message: "Sanity check initial state",
hasSuggestion: true,
- pendingFetchCount: 0,
});
// Disable the feature. It should be immediately uninitialized.
UrlbarPrefs.set(pref, false);
assertDisabled({
message: "After disabling",
- pendingFetchCount: 0,
});
// No suggestion should be returned for a search.
@@ -83,19 +90,17 @@ async function doBasicDisableAndEnableTest(pref) {
// Re-enable the feature. It should be immediately initialized and a fetch
// should start.
info("Re-enable the feature");
- let fetchPromise = QuickSuggest.weather.waitForFetches();
+ let fetchPromise = waitForNewWeatherFetch();
UrlbarPrefs.set(pref, true);
- assertEnabled({
+ await assertEnabled({
message: "Immediately after re-enabling",
hasSuggestion: false,
- pendingFetchCount: 1,
});
await fetchPromise;
- assertEnabled({
+ await assertEnabled({
message: "After awaiting fetch",
hasSuggestion: true,
- pendingFetchCount: 0,
});
Assert.equal(
@@ -126,16 +131,15 @@ async function doBasicDisableAndEnableTest(pref) {
// This task is only appropriate for the JS backend, not Rust, since fetching is
// always active with Rust.
-add_task(
+add_tasks_with_rust(
{
- skip_if: () => UrlbarPrefs.get("quickSuggestRustEnabled"),
+ skip_if_rust_enabled: true,
},
async function keywordsNotDefined() {
// Sanity check initial state.
- assertEnabled({
+ await assertEnabled({
message: "Sanity check initial state",
hasSuggestion: true,
- pendingFetchCount: 0,
});
// Set RS data without any keywords. Fetching should immediately stop.
@@ -147,7 +151,6 @@ add_task(
]);
assertDisabled({
message: "After setting RS data without keywords",
- pendingFetchCount: 0,
});
// No suggestion should be returned for a search.
@@ -162,24 +165,22 @@ add_task(
// Set keywords. Fetching should immediately start.
info("Setting keywords");
- let fetchPromise = QuickSuggest.weather.waitForFetches();
+ let fetchPromise = waitForNewWeatherFetch();
await QuickSuggestTestUtils.setRemoteSettingsRecords([
{
type: "weather",
weather: MerinoTestUtils.WEATHER_RS_DATA,
},
]);
- assertEnabled({
+ await assertEnabled({
message: "Immediately after setting keywords",
hasSuggestion: false,
- pendingFetchCount: 1,
});
await fetchPromise;
- assertEnabled({
+ await assertEnabled({
message: "After awaiting fetch",
hasSuggestion: true,
- pendingFetchCount: 0,
});
Assert.equal(
@@ -211,27 +212,24 @@ add_task(
// it should be discarded since the feature is disabled.
add_tasks_with_rust(async function disableAndEnable_immediate1() {
// Sanity check initial state.
- assertEnabled({
+ await assertEnabled({
message: "Sanity check initial state",
hasSuggestion: true,
- pendingFetchCount: 0,
});
// Disable the feature. It should be immediately uninitialized.
UrlbarPrefs.set("weather.featureGate", false);
assertDisabled({
message: "After disabling",
- pendingFetchCount: 0,
});
// Re-enable the feature. It should be immediately initialized and a fetch
// should start.
- let fetchPromise = QuickSuggest.weather.waitForFetches();
+ let fetchPromise = waitForNewWeatherFetch();
UrlbarPrefs.set("weather.featureGate", true);
- assertEnabled({
+ await assertEnabled({
message: "Immediately after re-enabling",
hasSuggestion: false,
- pendingFetchCount: 1,
});
// Disable it again. The fetch will remain ongoing since pending fetches
@@ -239,7 +237,6 @@ add_tasks_with_rust(async function disableAndEnable_immediate1() {
UrlbarPrefs.set("weather.featureGate", false);
assertDisabled({
message: "After disabling again",
- pendingFetchCount: 1,
});
// Wait for the fetch to finish.
@@ -249,21 +246,19 @@ add_tasks_with_rust(async function disableAndEnable_immediate1() {
// uninitialized.
assertDisabled({
message: "After awaiting fetch",
- pendingFetchCount: 0,
});
// Clean up by re-enabling the feature for the remaining tasks.
- fetchPromise = QuickSuggest.weather.waitForFetches();
+ fetchPromise = waitForNewWeatherFetch();
UrlbarPrefs.set("weather.featureGate", true);
await fetchPromise;
// Wait for keywords to be re-synced from remote settings.
await QuickSuggestTestUtils.forceSync();
- assertEnabled({
+ await assertEnabled({
message: "On cleanup",
hasSuggestion: true,
- pendingFetchCount: 0,
});
});
@@ -279,26 +274,23 @@ add_tasks_with_rust(async function disableAndEnable_immediate1() {
// from step 2 should be discarded.
add_tasks_with_rust(async function disableAndEnable_immediate2() {
// Sanity check initial state.
- assertEnabled({
+ await assertEnabled({
message: "Sanity check initial state",
hasSuggestion: true,
- pendingFetchCount: 0,
});
// Disable the feature. It should be immediately uninitialized.
UrlbarPrefs.set("weather.featureGate", false);
assertDisabled({
message: "After disabling",
- pendingFetchCount: 0,
});
// Re-enable the feature. It should be immediately initialized and a fetch
// should start.
UrlbarPrefs.set("weather.featureGate", true);
- assertEnabled({
+ await assertEnabled({
message: "Immediately after re-enabling",
hasSuggestion: false,
- pendingFetchCount: 1,
});
// Disable it again. The fetch will remain ongoing since pending fetches
@@ -306,25 +298,21 @@ add_tasks_with_rust(async function disableAndEnable_immediate2() {
UrlbarPrefs.set("weather.featureGate", false);
assertDisabled({
message: "After disabling again",
- pendingFetchCount: 1,
});
- // Re-enable it. A new fetch should start, so now there will be two pending
- // fetches.
- let fetchPromise = QuickSuggest.weather.waitForFetches();
+ // Re-enable it. A new fetch should start.
+ let fetchPromise = waitForNewWeatherFetch();
UrlbarPrefs.set("weather.featureGate", true);
- assertEnabled({
+ await assertEnabled({
message: "Immediately after re-enabling again",
hasSuggestion: false,
- pendingFetchCount: 2,
});
- // Wait for both fetches to finish.
+ // Wait for it to finish.
await fetchPromise;
- assertEnabled({
+ await assertEnabled({
message: "Immediately after re-enabling again",
hasSuggestion: true,
- pendingFetchCount: 0,
});
// Wait for keywords to be re-synced from remote settings.
@@ -334,10 +322,9 @@ add_tasks_with_rust(async function disableAndEnable_immediate2() {
// A fetch that doesn't return a suggestion should cause the last-fetched
// suggestion to be discarded.
add_tasks_with_rust(async function noSuggestion() {
- assertEnabled({
+ await assertEnabled({
message: "Sanity check initial state",
hasSuggestion: true,
- pendingFetchCount: 0,
});
let histograms = MerinoTestUtils.getAndClearHistograms({
@@ -350,10 +337,9 @@ add_tasks_with_rust(async function noSuggestion() {
await QuickSuggest.weather._test_fetch();
- assertEnabled({
+ await assertEnabled({
message: "After fetch",
hasSuggestion: false,
- pendingFetchCount: 0,
});
Assert.equal(
QuickSuggest.weather._test_merino.lastFetchStatus,
@@ -381,19 +367,17 @@ add_tasks_with_rust(async function noSuggestion() {
// Clean up by forcing another fetch so the suggestion is non-null for the
// remaining tasks.
await QuickSuggest.weather._test_fetch();
- assertEnabled({
+ await assertEnabled({
message: "On cleanup",
hasSuggestion: true,
- pendingFetchCount: 0,
});
});
// A network error should cause the last-fetched suggestion to be discarded.
add_tasks_with_rust(async function networkError() {
- assertEnabled({
+ await assertEnabled({
message: "Sanity check initial state",
hasSuggestion: true,
- pendingFetchCount: 0,
});
let histograms = MerinoTestUtils.getAndClearHistograms({
@@ -411,10 +395,9 @@ add_tasks_with_rust(async function networkError() {
QuickSuggest.weather._test_setTimeoutMs(-1);
- assertEnabled({
+ await assertEnabled({
message: "After fetch",
hasSuggestion: false,
- pendingFetchCount: 0,
});
Assert.equal(
QuickSuggest.weather._test_merino.lastFetchStatus,
@@ -440,19 +423,17 @@ add_tasks_with_rust(async function networkError() {
// Clean up by forcing another fetch so the suggestion is non-null for the
// remaining tasks.
await QuickSuggest.weather._test_fetch();
- assertEnabled({
+ await assertEnabled({
message: "On cleanup",
hasSuggestion: true,
- pendingFetchCount: 0,
});
});
// An HTTP error should cause the last-fetched suggestion to be discarded.
add_tasks_with_rust(async function httpError() {
- assertEnabled({
+ await assertEnabled({
message: "Sanity check initial state",
hasSuggestion: true,
- pendingFetchCount: 0,
});
let histograms = MerinoTestUtils.getAndClearHistograms({
@@ -463,10 +444,9 @@ add_tasks_with_rust(async function httpError() {
MerinoTestUtils.server.response = { status: 500 };
await QuickSuggest.weather._test_fetch();
- assertEnabled({
+ await assertEnabled({
message: "After fetch",
hasSuggestion: false,
- pendingFetchCount: 0,
});
Assert.equal(
QuickSuggest.weather._test_merino.lastFetchStatus,
@@ -494,20 +474,18 @@ add_tasks_with_rust(async function httpError() {
MerinoTestUtils.server.reset();
MerinoTestUtils.server.response.body.suggestions = [WEATHER_SUGGESTION];
await QuickSuggest.weather._test_fetch();
- assertEnabled({
+ await assertEnabled({
message: "On cleanup",
hasSuggestion: true,
- pendingFetchCount: 0,
});
});
// A fetch that doesn't return a suggestion due to a client timeout should cause
// the last-fetched suggestion to be discarded.
add_tasks_with_rust(async function clientTimeout() {
- assertEnabled({
+ await assertEnabled({
message: "Sanity check initial state",
hasSuggestion: true,
- pendingFetchCount: 0,
});
let histograms = MerinoTestUtils.getAndClearHistograms({
@@ -528,10 +506,9 @@ add_tasks_with_rust(async function clientTimeout() {
await QuickSuggest.weather._test_fetch();
- assertEnabled({
+ await assertEnabled({
message: "After fetch",
hasSuggestion: false,
- pendingFetchCount: 0,
});
Assert.equal(
QuickSuggest.weather._test_merino.lastFetchStatus,
@@ -573,10 +550,9 @@ add_tasks_with_rust(async function clientTimeout() {
// Clean up by forcing another fetch so the suggestion is non-null for the
// remaining tasks.
await QuickSuggest.weather._test_fetch();
- assertEnabled({
+ await assertEnabled({
message: "On cleanup",
hasSuggestion: true,
- pendingFetchCount: 0,
});
});
@@ -662,10 +638,9 @@ async function doLocaleTest({ shouldRunTask, osUnit, unitsByLocale }) {
return;
}
- assertEnabled({
+ await assertEnabled({
message: "Sanity check initial state",
hasSuggestion: true,
- pendingFetchCount: 0,
});
// Sanity check initial locale info.
@@ -716,10 +691,9 @@ async function doLocaleTest({ shouldRunTask, osUnit, unitsByLocale }) {
// Blocks a result and makes sure the weather pref is disabled.
add_tasks_with_rust(async function block() {
// Sanity check initial state.
- assertEnabled({
+ await assertEnabled({
message: "Sanity check initial state",
hasSuggestion: true,
- pendingFetchCount: 0,
});
Assert.ok(
UrlbarPrefs.get("suggest.weather"),
@@ -775,17 +749,16 @@ add_tasks_with_rust(async function block() {
});
// Re-enable the pref and clean up.
- let fetchPromise = QuickSuggest.weather.waitForFetches();
+ let fetchPromise = waitForNewWeatherFetch();
UrlbarPrefs.set("suggest.weather", true);
await fetchPromise;
// Wait for keywords to be re-synced from remote settings.
await QuickSuggestTestUtils.forceSync();
- assertEnabled({
+ await assertEnabled({
message: "On cleanup",
hasSuggestion: true,
- pendingFetchCount: 0,
});
});
@@ -849,16 +822,12 @@ async function doWakeTest({
// Advance the clock and simulate wake.
info("Sending wake notification");
+ let fetchPromise = waitForNewWeatherFetch();
let nowOnWake = nowOnStart + sleepIntervalMs;
dateNowStub.returns(nowOnWake);
QuickSuggest.weather.observe(null, "wake_notification", "");
Assert.equal(
- QuickSuggest.weather._test_pendingFetchCount,
- 0,
- "After wake, next fetch should not have immediately started"
- );
- Assert.equal(
QuickSuggest.weather._test_lastFetchTimeMs,
nowOnStart,
"After wake, last fetch time should be unchanged"
@@ -891,18 +860,13 @@ async function doWakeTest({
// Wait for the fetch. If the wake didn't trigger it, then the caller should
// have passed in a `sleepIntervalMs` that will make it start soon.
info("Waiting for fetch after wake");
- await QuickSuggest.weather.waitForFetches();
+ await fetchPromise;
Assert.equal(
QuickSuggest.weather._test_fetchTimerMs,
QuickSuggest.weather._test_fetchIntervalMs,
"After post-wake fetch, timer period should remain full fetch interval"
);
- Assert.equal(
- QuickSuggest.weather._test_pendingFetchCount,
- 0,
- "After post-wake fetch, no more fetches should be pending"
- );
dateNowStub.restore();
}
@@ -958,11 +922,6 @@ async function doOnlineTestWithSuggestion({ topic, dataValues }) {
QuickSuggest.weather.observe(null, topic, data);
Assert.equal(
- QuickSuggest.weather._test_pendingFetchCount,
- 0,
- "Fetch should not have started"
- );
- Assert.equal(
QuickSuggest.weather._test_fetchTimer,
timer,
"Timer should not have been recreated"
@@ -1033,11 +992,6 @@ async function doOnlineTestWithNullSuggestion({
"Suggestion should remain null"
);
Assert.equal(
- QuickSuggest.weather._test_pendingFetchCount,
- 0,
- "Fetch should not have started"
- );
- Assert.equal(
QuickSuggest.weather._test_fetchTimer,
timer,
"Timer should not have been recreated"
@@ -1055,13 +1009,9 @@ async function doOnlineTestWithNullSuggestion({
Assert.ok(!QuickSuggest.weather.suggestion, "Suggestion should be null");
info("Sending notification: " + JSON.stringify({ topic, data }));
+ let fetchPromise = waitForNewWeatherFetch();
QuickSuggest.weather.observe(null, topic, data);
- Assert.equal(
- QuickSuggest.weather._test_pendingFetchCount,
- 0,
- "Fetch should not have started yet"
- );
Assert.notEqual(
QuickSuggest.weather._test_fetchTimer,
0,
@@ -1081,13 +1031,8 @@ async function doOnlineTestWithNullSuggestion({
timer = QuickSuggest.weather._test_fetchTimer;
info("Waiting for fetch after notification");
- await QuickSuggest.weather.waitForFetches();
+ await fetchPromise;
- Assert.equal(
- QuickSuggest.weather._test_pendingFetchCount,
- 0,
- "Fetch should not be pending"
- );
Assert.notEqual(
QuickSuggest.weather._test_fetchTimer,
0,
@@ -1164,20 +1109,23 @@ async function doManyNotificationsTest(notifications) {
MerinoTestUtils.WEATHER_SUGGESTION,
];
+ let { fetchPromise: oldFetchPromise } = QuickSuggest.weather;
+ let fetchPromise = waitForNewWeatherFetch();
+
// Send the notifications.
for (let [topic, data] of notifications) {
info("Sending notification: " + JSON.stringify({ topic, data }));
QuickSuggest.weather.observe(null, topic, data);
+ Assert.equal(
+ QuickSuggest.weather.fetchPromise,
+ oldFetchPromise,
+ "No new fetch should have started yet"
+ );
}
info("Waiting for fetch after notifications");
- await QuickSuggest.weather.waitForFetches();
+ await fetchPromise;
- Assert.equal(
- QuickSuggest.weather._test_pendingFetchCount,
- 0,
- "Fetch should not be pending"
- );
Assert.notEqual(
QuickSuggest.weather._test_fetchTimer,
0,
@@ -1241,7 +1189,7 @@ add_tasks_with_rust(async function vpn() {
// Simulate the link status changing. Since the mock link service still
// indicates a VPN is detected, the suggestion should remain null.
- let fetchPromise = QuickSuggest.weather.waitForFetches();
+ let fetchPromise = waitForNewWeatherFetch();
QuickSuggest.weather.observe(null, "network:link-status-changed", "changed");
await fetchPromise;
Assert.ok(!QuickSuggest.weather.suggestion, "Suggestion should remain null");
@@ -1251,7 +1199,7 @@ add_tasks_with_rust(async function vpn() {
Ci.nsINetworkLinkService.NONE_DETECTED;
// Simulate the link status changing again. The suggestion should be fetched.
- fetchPromise = QuickSuggest.weather.waitForFetches();
+ fetchPromise = waitForNewWeatherFetch();
QuickSuggest.weather.observe(null, "network:link-status-changed", "changed");
await fetchPromise;
Assert.ok(QuickSuggest.weather.suggestion, "Suggestion should be fetched");
@@ -1264,10 +1212,9 @@ add_tasks_with_rust(async function vpn() {
// weather record.
add_tasks_with_rust(async function nimbusOverride() {
// Sanity check initial state.
- assertEnabled({
+ await assertEnabled({
message: "Sanity check initial state",
hasSuggestion: true,
- pendingFetchCount: 0,
});
let defaultResult = makeWeatherResult();
@@ -1349,7 +1296,7 @@ add_tasks_with_rust(async function nimbusOverride() {
});
});
-function assertEnabled({ message, hasSuggestion, pendingFetchCount }) {
+async function assertEnabled({ message, hasSuggestion }) {
info("Asserting feature is enabled");
if (message) {
info(message);
@@ -1360,20 +1307,20 @@ function assertEnabled({ message, hasSuggestion, pendingFetchCount }) {
hasSuggestion,
"Suggestion is null or non-null as expected"
);
+ Assert.ok(QuickSuggest.weather._test_merino, "Merino client is non-null");
+
+ await TestUtils.waitForCondition(
+ () => QuickSuggest.weather._test_fetchTimer,
+ "Waiting for fetch timer to become non-zero"
+ );
Assert.notEqual(
QuickSuggest.weather._test_fetchTimer,
0,
"Fetch timer is non-zero"
);
- Assert.ok(QuickSuggest.weather._test_merino, "Merino client is non-null");
- Assert.equal(
- QuickSuggest.weather._test_pendingFetchCount,
- pendingFetchCount,
- "Expected pending fetch count"
- );
}
-function assertDisabled({ message, pendingFetchCount }) {
+function assertDisabled({ message }) {
info("Asserting feature is disabled");
if (message) {
info(message);
@@ -1394,9 +1341,4 @@ function assertDisabled({ message, pendingFetchCount }) {
null,
"Merino client is null"
);
- Assert.equal(
- QuickSuggest.weather._test_pendingFetchCount,
- pendingFetchCount,
- "Expected pending fetch count"
- );
}
diff --git a/browser/components/urlbar/tests/quicksuggest/unit/test_weather_keywords.js b/browser/components/urlbar/tests/quicksuggest/unit/test_weather_keywords.js
index efa5922c3e..559e0cc1fa 100644
--- a/browser/components/urlbar/tests/quicksuggest/unit/test_weather_keywords.js
+++ b/browser/components/urlbar/tests/quicksuggest/unit/test_weather_keywords.js
@@ -23,6 +23,15 @@ add_setup(async () => {
prefs: [["suggest.quicksuggest.nonsponsored", true]],
});
await MerinoTestUtils.initWeather();
+
+ // When `add_tasks_with_rust()` disables the Rust backend and forces sync, the
+ // JS backend will sync `Weather` with remote settings. Since keywords are
+ // present in remote settings at that point (we added them above), `Weather`
+ // will then start fetching. The fetch may or may not be done before our test
+ // task starts. To make sure it's done, queue another fetch and await it.
+ registerAddTasksWithRustSetup(async () => {
+ await QuickSuggest.weather._test_fetch();
+ });
});
// * Settings data: none
@@ -89,9 +98,9 @@ add_tasks_with_rust(async function () {
//
// JS backend only. The Rust component expects settings data to contain
// min_keyword_length.
-add_task(
+add_tasks_with_rust(
{
- skip_if: () => UrlbarPrefs.get("quickSuggestRustEnabled"),
+ skip_if_rust_enabled: true,
},
async function () {
await doKeywordsTest({
@@ -128,9 +137,9 @@ add_task(
//
// JS backend only. The Rust component doesn't treat minKeywordLength == 0 as a
// special case.
-add_task(
+add_tasks_with_rust(
{
- skip_if: () => UrlbarPrefs.get("quickSuggestRustEnabled"),
+ skip_if_rust_enabled: true,
},
async function () {
await doKeywordsTest({
@@ -296,9 +305,9 @@ add_tasks_with_rust(async function () {
//
// JS backend only. The Rust component expects settings data to contain
// min_keyword_length.
-add_task(
+add_tasks_with_rust(
{
- skip_if: () => UrlbarPrefs.get("quickSuggestRustEnabled"),
+ skip_if_rust_enabled: true,
},
async function () {
await doKeywordsTest({
@@ -338,9 +347,9 @@ add_task(
//
// JS backend only. The Rust component doesn't treat minKeywordLength == 0 as a
// special case.
-add_task(
+add_tasks_with_rust(
{
- skip_if: () => UrlbarPrefs.get("quickSuggestRustEnabled"),
+ skip_if_rust_enabled: true,
},
async function () {
await doKeywordsTest({
@@ -578,9 +587,9 @@ add_tasks_with_rust(async function () {
// TODO bug 1879209: This doesn't work with the Rust backend because if
// min_keyword_length isn't specified on ingest, the Rust database will retain
// the last known good min_keyword_length, which interferes with this task.
-add_task(
+add_tasks_with_rust(
{
- skip_if: () => UrlbarPrefs.get("quickSuggestRustEnabled"),
+ skip_if_rust_enabled: true,
},
async function () {
await doKeywordsTest({
@@ -618,9 +627,9 @@ add_task(
// TODO bug 1879209: This doesn't work with the Rust backend because if
// min_keyword_length isn't specified on ingest, the Rust database will retain
// the last known good min_keyword_length, which interferes with this task.
-add_task(
+add_tasks_with_rust(
{
- skip_if: () => UrlbarPrefs.get("quickSuggestRustEnabled"),
+ skip_if_rust_enabled: true,
},
async function () {
await doKeywordsTest({
@@ -817,7 +826,7 @@ async function doKeywordsTest({
!UrlbarPrefs.get("quickSuggestRustEnabled") &&
(nimbusValues?.weatherKeywords || settingsData?.keywords)
) {
- fetchPromise = QuickSuggest.weather.waitForFetches();
+ fetchPromise = waitForNewWeatherFetch();
}
let nimbusCleanup;
@@ -838,7 +847,6 @@ async function doKeywordsTest({
if (fetchPromise) {
info("Waiting for fetch");
- assertFetchingStarted({ pendingFetchCount: 1 });
await fetchPromise;
info("Got fetch");
}
@@ -872,10 +880,10 @@ async function doKeywordsTest({
await nimbusCleanup?.();
- fetchPromise = null;
if (!QuickSuggest.weather.suggestion) {
- fetchPromise = QuickSuggest.weather.waitForFetches();
+ fetchPromise = waitForNewWeatherFetch();
}
+
await QuickSuggestTestUtils.setRemoteSettingsRecords([
{
type: "weather",
@@ -905,28 +913,8 @@ async function doMatchingQuickSuggestTest(pref, isSponsored) {
let keyword = "test";
let attachment = isSponsored
- ? {
- id: 1,
- url: "http://example.com/amp",
- title: "AMP Suggestion",
- keywords: [keyword],
- click_url: "http://example.com/amp-click",
- impression_url: "http://example.com/amp-impression",
- advertiser: "Amp",
- iab_category: "22 - Shopping",
- icon: "1234",
- }
- : {
- id: 2,
- url: "http://example.com/wikipedia",
- title: "Wikipedia Suggestion",
- keywords: [keyword],
- click_url: "http://example.com/wikipedia-click",
- impression_url: "http://example.com/wikipedia-impression",
- advertiser: "Wikipedia",
- iab_category: "5 - Education",
- icon: "1234",
- };
+ ? QuickSuggestTestUtils.ampRemoteSettings({ keywords: [keyword] })
+ : QuickSuggestTestUtils.wikipediaRemoteSettings({ keywords: [keyword] });
// Add a remote settings result to quick suggest.
let oldPrefValue = UrlbarPrefs.get(pref);
@@ -943,27 +931,6 @@ async function doMatchingQuickSuggestTest(pref, isSponsored) {
]);
// First do a search to verify the quick suggest result matches the keyword.
- let payload;
- if (!UrlbarPrefs.get("quickSuggestRustEnabled")) {
- payload = {
- source: "remote-settings",
- provider: "AdmWikipedia",
- sponsoredImpressionUrl: attachment.impression_url,
- sponsoredClickUrl: attachment.click_url,
- sponsoredBlockId: attachment.id,
- };
- } else {
- payload = {
- source: "rust",
- provider: isSponsored ? "Amp" : "Wikipedia",
- };
- if (isSponsored) {
- payload.sponsoredImpressionUrl = attachment.impression_url;
- payload.sponsoredClickUrl = attachment.click_url;
- payload.sponsoredBlockId = attachment.id;
- }
- }
-
info("Doing first search for quick suggest result");
await check_results({
context: createContext(keyword, {
@@ -971,35 +938,9 @@ async function doMatchingQuickSuggestTest(pref, isSponsored) {
isPrivate: false,
}),
matches: [
- {
- type: UrlbarUtils.RESULT_TYPE.URL,
- source: UrlbarUtils.RESULT_SOURCE.SEARCH,
- heuristic: false,
- payload: {
- ...payload,
- telemetryType: isSponsored ? "adm_sponsored" : "adm_nonsponsored",
- qsSuggestion: keyword,
- title: attachment.title,
- url: attachment.url,
- displayUrl: attachment.url.replace(/[/]$/, ""),
- originalUrl: attachment.url,
- icon: null,
- sponsoredAdvertiser: attachment.advertiser,
- sponsoredIabCategory: attachment.iab_category,
- isSponsored,
- descriptionL10n: isSponsored
- ? { id: "urlbar-result-action-sponsored" }
- : undefined,
- helpUrl: QuickSuggest.HELP_URL,
- helpL10n: {
- id: "urlbar-result-menu-learn-more-about-firefox-suggest",
- },
- isBlockable: true,
- blockL10n: {
- id: "urlbar-result-menu-dismiss-firefox-suggest",
- },
- },
- },
+ isSponsored
+ ? makeAmpResult({ keyword })
+ : makeWikipediaResult({ keyword }),
],
});
@@ -1398,7 +1339,7 @@ async function doIncrementTest({
!UrlbarPrefs.get("quickSuggestRustEnabled") &&
(nimbusValues?.weatherKeywords || settingsData?.weather?.keywords)
) {
- fetchPromise = QuickSuggest.weather.waitForFetches();
+ fetchPromise = waitForNewWeatherFetch();
}
let nimbusCleanup;
@@ -1419,7 +1360,6 @@ async function doIncrementTest({
if (fetchPromise) {
info("Waiting for fetch");
- assertFetchingStarted({ pendingFetchCount: 1 });
await fetchPromise;
info("Got fetch");
}
@@ -1472,9 +1412,8 @@ async function doIncrementTest({
await nimbusCleanup?.();
- fetchPromise = null;
if (!QuickSuggest.weather.suggestion) {
- fetchPromise = QuickSuggest.weather.waitForFetches();
+ fetchPromise = waitForNewWeatherFetch();
}
await QuickSuggestTestUtils.setRemoteSettingsRecords([
{
@@ -1485,19 +1424,3 @@ async function doIncrementTest({
UrlbarPrefs.clear("weather.minKeywordLength");
await fetchPromise;
}
-
-function assertFetchingStarted() {
- info("Asserting fetching has started");
-
- Assert.notEqual(
- QuickSuggest.weather._test_fetchTimer,
- 0,
- "Fetch timer is non-zero"
- );
- Assert.ok(QuickSuggest.weather._test_merino, "Merino client is non-null");
- Assert.equal(
- QuickSuggest.weather._test_pendingFetchCount,
- 1,
- "Expected pending fetch count"
- );
-}
diff --git a/browser/components/urlbar/tests/quicksuggest/unit/xpcshell.toml b/browser/components/urlbar/tests/quicksuggest/unit/xpcshell.toml
index ceab478795..1f0e226684 100644
--- a/browser/components/urlbar/tests/quicksuggest/unit/xpcshell.toml
+++ b/browser/components/urlbar/tests/quicksuggest/unit/xpcshell.toml
@@ -49,3 +49,4 @@ skip-if = ["true"] # Bug 1880214
["test_weather.js"]
["test_weather_keywords.js"]
+skip-if = ["verify"] # Bug 1880214 - Takes a very long time due to add_tasks_with_rust()
diff --git a/browser/components/urlbar/tests/unit/head.js b/browser/components/urlbar/tests/unit/head.js
index 6f78608c94..da96d5704f 100644
--- a/browser/components/urlbar/tests/unit/head.js
+++ b/browser/components/urlbar/tests/unit/head.js
@@ -1110,44 +1110,13 @@ async function getOriginFrecency(prefix, aHost) {
}
/**
- * Returns the origin frecency stats.
- *
- * @returns {object}
- * An object { count, sum, squares }.
- */
-async function getOriginFrecencyStats() {
- let db = await PlacesUtils.promiseDBConnection();
- let rows = await db.execute(`
- SELECT
- IFNULL((SELECT value FROM moz_meta WHERE key = 'origin_frecency_count'), 0),
- IFNULL((SELECT value FROM moz_meta WHERE key = 'origin_frecency_sum'), 0),
- IFNULL((SELECT value FROM moz_meta WHERE key = 'origin_frecency_sum_of_squares'), 0)
- `);
- let count = rows[0].getResultByIndex(0);
- let sum = rows[0].getResultByIndex(1);
- let squares = rows[0].getResultByIndex(2);
- return { count, sum, squares };
-}
-
-/**
* Returns the origin autofill frecency threshold.
*
* @returns {number}
* The threshold.
*/
async function getOriginAutofillThreshold() {
- let { count, sum, squares } = await getOriginFrecencyStats();
- if (!count) {
- return 0;
- }
- if (count == 1) {
- return sum;
- }
- let stddevMultiplier = UrlbarPrefs.get("autoFill.stddevMultiplier");
- return (
- sum / count +
- stddevMultiplier * Math.sqrt((squares - (sum * sum) / count) / count)
- );
+ return PlacesUtils.metadata.get("origin_frecency_threshold", 2.0);
}
/**
diff --git a/browser/components/urlbar/tests/unit/test_UrlbarPrefs.js b/browser/components/urlbar/tests/unit/test_UrlbarPrefs.js
index d30739f03e..7fb3256f6c 100644
--- a/browser/components/urlbar/tests/unit/test_UrlbarPrefs.js
+++ b/browser/components/urlbar/tests/unit/test_UrlbarPrefs.js
@@ -363,10 +363,10 @@ add_task(async function onNimbusChanged() {
// Add an observer that throws an Error and an observer that does not define
// anything to check whether the other observers can get notifications.
UrlbarPrefs.addObserver({
- onPrefChanged(pref) {
+ onPrefChanged() {
throw new Error("From onPrefChanged");
},
- onNimbusChanged(pref) {
+ onNimbusChanged() {
throw new Error("From onNimbusChanged");
},
});
@@ -407,10 +407,10 @@ add_task(async function onPrefChanged() {
// Add an observer that throws an Error and an observer that does not define
// anything to check whether the other observers can get notifications.
UrlbarPrefs.addObserver({
- onPrefChanged(pref) {
+ onPrefChanged() {
throw new Error("From onPrefChanged");
},
- onNimbusChanged(pref) {
+ onNimbusChanged() {
throw new Error("From onNimbusChanged");
},
});
diff --git a/browser/components/urlbar/tests/unit/test_UrlbarSearchUtils.js b/browser/components/urlbar/tests/unit/test_UrlbarSearchUtils.js
index fe33228007..28cbd381f1 100644
--- a/browser/components/urlbar/tests/unit/test_UrlbarSearchUtils.js
+++ b/browser/components/urlbar/tests/unit/test_UrlbarSearchUtils.js
@@ -65,14 +65,10 @@ add_task(async function onlyEnabled_option_nomatch() {
let domain = engine.searchUrlDomain;
let token = domain.substr(0, 1);
engine.hideOneOffButton = true;
- let matchedEngines = await UrlbarSearchUtils.enginesForDomainPrefix(token, {
- onlyEnabled: true,
- });
+ let matchedEngines = await UrlbarSearchUtils.enginesForDomainPrefix(token);
Assert.notEqual(matchedEngines[0].searchUrlDomain, domain);
engine.hideOneOffButton = false;
- matchedEngines = await UrlbarSearchUtils.enginesForDomainPrefix(token, {
- onlyEnabled: true,
- });
+ matchedEngines = await UrlbarSearchUtils.enginesForDomainPrefix(token);
Assert.equal(matchedEngines[0].searchUrlDomain, domain);
});
@@ -95,7 +91,7 @@ add_task(async function add_search_engine_match() {
Assert.ok(matchedEngine);
Assert.equal(matchedEngine.searchForm, "https://www.bacon.moz");
Assert.equal(matchedEngine.name, "bacon");
- Assert.equal(matchedEngine.getIconURL(), null);
+ Assert.equal(await matchedEngine.getIconURL(), null);
info("also type part of the public suffix");
matchedEngine = (
await UrlbarSearchUtils.enginesForDomainPrefix("bacon.m")
@@ -103,7 +99,7 @@ add_task(async function add_search_engine_match() {
Assert.ok(matchedEngine);
Assert.equal(matchedEngine.searchForm, "https://www.bacon.moz");
Assert.equal(matchedEngine.name, "bacon");
- Assert.equal(matchedEngine.getIconURL(), null);
+ Assert.equal(await matchedEngine.getIconURL(), null);
});
add_task(async function match_multiple_search_engines() {
@@ -134,19 +130,19 @@ add_task(async function test_aliased_search_engine_match() {
Assert.ok(matchedEngine);
Assert.equal(matchedEngine.name, "bacon");
Assert.ok(matchedEngine.aliases.includes("pork"));
- Assert.equal(matchedEngine.getIconURL(), null);
+ Assert.equal(await matchedEngine.getIconURL(), null);
// Upper case
matchedEngine = await UrlbarSearchUtils.engineForAlias("PORK");
Assert.ok(matchedEngine);
Assert.equal(matchedEngine.name, "bacon");
Assert.ok(matchedEngine.aliases.includes("pork"));
- Assert.equal(matchedEngine.getIconURL(), null);
+ Assert.equal(await matchedEngine.getIconURL(), null);
// Cap case
matchedEngine = await UrlbarSearchUtils.engineForAlias("Pork");
Assert.ok(matchedEngine);
Assert.equal(matchedEngine.name, "bacon");
Assert.ok(matchedEngine.aliases.includes("pork"));
- Assert.equal(matchedEngine.getIconURL(), null);
+ Assert.equal(await matchedEngine.getIconURL(), null);
});
add_task(async function test_aliased_search_engine_match_upper_case_alias() {
@@ -164,19 +160,19 @@ add_task(async function test_aliased_search_engine_match_upper_case_alias() {
Assert.ok(matchedEngine);
Assert.equal(matchedEngine.name, "patch");
Assert.ok(matchedEngine.aliases.includes("PR"));
- Assert.equal(matchedEngine.getIconURL(), null);
+ Assert.equal(await matchedEngine.getIconURL(), null);
// Upper case
matchedEngine = await UrlbarSearchUtils.engineForAlias("PR");
Assert.ok(matchedEngine);
Assert.equal(matchedEngine.name, "patch");
Assert.ok(matchedEngine.aliases.includes("PR"));
- Assert.equal(matchedEngine.getIconURL(), null);
+ Assert.equal(await matchedEngine.getIconURL(), null);
// Cap case
matchedEngine = await UrlbarSearchUtils.engineForAlias("Pr");
Assert.ok(matchedEngine);
Assert.equal(matchedEngine.name, "patch");
Assert.ok(matchedEngine.aliases.includes("PR"));
- Assert.equal(matchedEngine.getIconURL(), null);
+ Assert.equal(await matchedEngine.getIconURL(), null);
});
add_task(async function remove_search_engine_nomatch() {
diff --git a/browser/components/urlbar/tests/unit/test_about_urls.js b/browser/components/urlbar/tests/unit/test_about_urls.js
index 277ddb8ee1..82a8ef2750 100644
--- a/browser/components/urlbar/tests/unit/test_about_urls.js
+++ b/browser/components/urlbar/tests/unit/test_about_urls.js
@@ -76,8 +76,10 @@ add_task(async function aboutAboutAndAboutAddons() {
heuristic: true,
}),
makeVisitResult(context, {
+ source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
uri: "about:addons",
title: "about:addons",
+ iconUri: "page-icon:about:addons",
tags: null,
providerName: "AboutPages",
}),
@@ -93,8 +95,10 @@ add_task(async function aboutColonMatchesOnlyAboutPages() {
const aboutPageNames = AboutPagesUtils.visibleAboutUrls.slice(0, 9);
const aboutPageResults = aboutPageNames.map(aboutPageName => {
return makeVisitResult(context, {
+ source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
uri: aboutPageName,
title: aboutPageName,
+ iconUri: "page-icon:" + aboutPageName,
tags: null,
providerName: "AboutPages",
});
@@ -165,8 +169,10 @@ add_task(async function after_general() {
title: "Guide to about:addons in Firefox",
}),
makeVisitResult(context, {
+ source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
uri: "about:addons",
title: "about:addons",
+ iconUri: "page-icon:about:addons",
tags: null,
providerName: "AboutPages",
}),
diff --git a/browser/components/urlbar/tests/unit/test_autofill_originsAndQueries.js b/browser/components/urlbar/tests/unit/test_autofill_originsAndQueries.js
index 05e3a230f1..7164ae8911 100644
--- a/browser/components/urlbar/tests/unit/test_autofill_originsAndQueries.js
+++ b/browser/components/urlbar/tests/unit/test_autofill_originsAndQueries.js
@@ -893,8 +893,11 @@ add_autofill_task(async function bookmarkBelowThreshold() {
await cleanup();
});
-// Bookmarked places should be autofilled when they *do* meet the threshold.
+// Bookmarked places should be autofilled also when they meet the threshold.
add_autofill_task(async function bookmarkAboveThreshold() {
+ // Add a visit to the URL, otherwise origin frecency will be too small, note
+ // it would be filled anyway as bookmarks are always filled.
+ await PlacesTestUtils.addVisits(["http://" + url]);
// Bookmark a URL.
await PlacesTestUtils.addBookmarkWithDetails({
uri: "http://" + url,
@@ -957,13 +960,10 @@ add_autofill_task(async function zeroThreshold() {
);
Assert.equal(placeFrecency, -1);
- // Make sure the origin's frecency is 0.
let originFrecency = await getOriginFrecency("http://", host);
- Assert.equal(originFrecency, 0);
-
- // Make sure the autofill threshold is 0.
+ Assert.equal(originFrecency, 1, "Check expected origin's frecency");
let threshold = await getOriginAutofillThreshold();
- Assert.equal(threshold, 0);
+ Assert.equal(threshold, 1, "Check expected origins threshold");
let context = createContext(search, { isPrivate: false });
await check_results({
diff --git a/browser/components/urlbar/tests/unit/test_heuristic_cancel.js b/browser/components/urlbar/tests/unit/test_heuristic_cancel.js
index 6f6f2fbd8a..a78004f2bd 100644
--- a/browser/components/urlbar/tests/unit/test_heuristic_cancel.js
+++ b/browser/components/urlbar/tests/unit/test_heuristic_cancel.js
@@ -126,7 +126,7 @@ add_task(async function timerIsCancelled() {
// Then they will be queued up in a _heuristicProvidersTimer, waiting for
// the results from SlowProvider.
let resultsAddedPromise = new Promise(resolve => {
- let observe = async (subject, topic, data) => {
+ let observe = async () => {
Services.obs.removeObserver(observe, "results-added");
// Fire the second query to cancel the first.
await controller.startQuery(secondContext);
diff --git a/browser/components/urlbar/tests/unit/test_hideSponsoredHistory.js b/browser/components/urlbar/tests/unit/test_hideSponsoredHistory.js
index d49aaf2fb7..79d3e3b17c 100644
--- a/browser/components/urlbar/tests/unit/test_hideSponsoredHistory.js
+++ b/browser/components/urlbar/tests/unit/test_hideSponsoredHistory.js
@@ -78,7 +78,7 @@ add_task(async function test() {
makeSearchResult(context, {
heuristic: true,
engineName: engine.name,
- engineIconUri: engine.getIconURL(),
+ engineIconUri: await engine.getIconURL(),
}),
];
if (shouldAppear) {
diff --git a/browser/components/urlbar/tests/unit/test_match_javascript.js b/browser/components/urlbar/tests/unit/test_match_javascript.js
index 3d3eab19ba..bba0af1376 100644
--- a/browser/components/urlbar/tests/unit/test_match_javascript.js
+++ b/browser/components/urlbar/tests/unit/test_match_javascript.js
@@ -32,7 +32,10 @@ add_task(async function test_javascript_match() {
await PlacesFrecencyRecalculator.recalculateAnyOutdatedFrecencies();
info("Match non-javascript: with plain search");
- let context = createContext("a", { isPrivate: false });
+ let context = createContext("a", {
+ isPrivate: false,
+ allowAutofill: false /* avoid autofilling abc, as it's not necessary */,
+ });
await check_results({
context,
matches: [
diff --git a/browser/components/urlbar/tests/unit/test_providerHistoryUrlHeuristic.js b/browser/components/urlbar/tests/unit/test_providerHistoryUrlHeuristic.js
index 7eb62fbeea..8cf643393f 100644
--- a/browser/components/urlbar/tests/unit/test_providerHistoryUrlHeuristic.js
+++ b/browser/components/urlbar/tests/unit/test_providerHistoryUrlHeuristic.js
@@ -185,8 +185,10 @@ add_task(async function test_unsupported_protocol() {
title: "Robots!",
}),
makeVisitResult(context, {
+ source: UrlbarUtils.RESULT_SOURCE.OTHER_LOCAL,
uri: "about:robots",
title: "about:robots",
+ iconUri: "page-icon:about:robots",
tags: null,
providerName: "AboutPages",
}),
diff --git a/browser/components/urlbar/tests/unit/test_providerOpenTabs.js b/browser/components/urlbar/tests/unit/test_providerOpenTabs.js
index f85f547ac3..689ecf614f 100644
--- a/browser/components/urlbar/tests/unit/test_providerOpenTabs.js
+++ b/browser/components/urlbar/tests/unit/test_providerOpenTabs.js
@@ -3,23 +3,24 @@
"use strict";
+const userContextId1 = 3;
+const userContextId2 = 5;
+const url = "http://foo.mozilla.org/";
+const url2 = "http://foo2.mozilla.org/";
+
add_task(async function test_openTabs() {
- const userContextId1 = 3;
- const userContextId2 = 5;
- const url = "http://foo.mozilla.org/";
- const url2 = "http://foo2.mozilla.org/";
UrlbarProviderOpenTabs.registerOpenTab(url, userContextId1, false);
UrlbarProviderOpenTabs.registerOpenTab(url, userContextId1, false);
UrlbarProviderOpenTabs.registerOpenTab(url2, userContextId1, false);
UrlbarProviderOpenTabs.registerOpenTab(url, userContextId2, false);
Assert.deepEqual(
[url, url2],
- UrlbarProviderOpenTabs.getOpenTabs(userContextId1),
+ UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId(userContextId1),
"Found all the expected tabs"
);
Assert.deepEqual(
[url],
- UrlbarProviderOpenTabs.getOpenTabs(userContextId2),
+ UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId(userContextId2),
"Found all the expected tabs"
);
await PlacesUtils.promiseLargeCacheDBConnection();
@@ -37,13 +38,13 @@ add_task(async function test_openTabs() {
await UrlbarProviderOpenTabs.unregisterOpenTab(url2, userContextId1, false);
Assert.deepEqual(
[url],
- UrlbarProviderOpenTabs.getOpenTabs(userContextId1),
+ UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId(userContextId1),
"Found all the expected tabs"
);
await UrlbarProviderOpenTabs.unregisterOpenTab(url, userContextId1, false);
Assert.deepEqual(
[url],
- UrlbarProviderOpenTabs.getOpenTabs(userContextId1),
+ UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId(userContextId1),
"Found all the expected tabs"
);
Assert.deepEqual(
@@ -77,4 +78,86 @@ add_task(async function test_openTabs() {
Assert.equal(matchCount, 2, "Found the expected number of matches");
// Sanity check that this doesn't throw.
provider.cancelQuery(context);
+ await UrlbarProviderOpenTabs.unregisterOpenTab(url, userContextId1, false);
+ await UrlbarProviderOpenTabs.unregisterOpenTab(url, userContextId2, false);
+});
+
+add_task(async function test_openTabs_mixedtype_input() {
+ // Passing the userContextId as a string, rather than a number, is a fairly
+ // common mistake, check the API handles both properly.
+ Assert.deepEqual(
+ [],
+ UrlbarProviderOpenTabs.getOpenTabUrls(1),
+ "Found all the expected tabs"
+ );
+ Assert.deepEqual(
+ [],
+ UrlbarProviderOpenTabs.getOpenTabUrls(2),
+ "Found all the expected tabs"
+ );
+ UrlbarProviderOpenTabs.registerOpenTab(url, 1, false);
+ UrlbarProviderOpenTabs.registerOpenTab(url, "2", false);
+ Assert.deepEqual(
+ [url],
+ UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId(1),
+ "Found all the expected tabs"
+ );
+ Assert.deepEqual(
+ [url],
+ UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId(2),
+ "Found all the expected tabs"
+ );
+ Assert.deepEqual(
+ UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId(1),
+ UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId("1"),
+ "Also check getOpenTabs adapts to the argument type"
+ );
+ UrlbarProviderOpenTabs.unregisterOpenTab(url, "1", false);
+ UrlbarProviderOpenTabs.unregisterOpenTab(url, 2, false);
+ Assert.deepEqual(
+ [],
+ UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId(1),
+ "Found all the expected tabs"
+ );
+ Assert.deepEqual(
+ [],
+ UrlbarProviderOpenTabs.getOpenTabUrlsForUserContextId(2),
+ "Found all the expected tabs"
+ );
+});
+
+add_task(async function test_openTabs() {
+ Assert.equal(
+ 0,
+ UrlbarProviderOpenTabs.getOpenTabUrls().size,
+ "Check there's no open tabs"
+ );
+ Assert.equal(
+ 0,
+ UrlbarProviderOpenTabs.getOpenTabUrls(true).size,
+ "Check there's no private open tabs"
+ );
+ await UrlbarProviderOpenTabs.registerOpenTab(url, userContextId1, false);
+ await UrlbarProviderOpenTabs.registerOpenTab(url, userContextId2, false);
+ await UrlbarProviderOpenTabs.registerOpenTab(url2, 0, true);
+ Assert.equal(
+ 1,
+ UrlbarProviderOpenTabs.getOpenTabUrls().size,
+ "Check open tabs"
+ );
+ Assert.deepEqual(
+ [userContextId1, userContextId2],
+ Array.from(UrlbarProviderOpenTabs.getOpenTabUrls().get(url)),
+ "Check the tab is in 2 userContextIds"
+ );
+ Assert.equal(
+ 1,
+ UrlbarProviderOpenTabs.getOpenTabUrls(true).size,
+ "Check open private tabs"
+ );
+ Assert.deepEqual(
+ [-1],
+ Array.from(UrlbarProviderOpenTabs.getOpenTabUrls(true).get(url2)),
+ "Check the tab is in the private userContextId"
+ );
});
diff --git a/browser/components/urlbar/tests/unit/test_providerTabToSearch.js b/browser/components/urlbar/tests/unit/test_providerTabToSearch.js
index 0a8bfbead5..32bf450654 100644
--- a/browser/components/urlbar/tests/unit/test_providerTabToSearch.js
+++ b/browser/components/urlbar/tests/unit/test_providerTabToSearch.js
@@ -87,7 +87,7 @@ add_task(async function noAutofill() {
matches: [
makeSearchResult(context, {
engineName: Services.search.defaultEngine.name,
- engineIconUri: Services.search.defaultEngine.getIconURL(),
+ engineIconUri: await Services.search.defaultEngine.getIconURL(),
heuristic: true,
providerName: "HeuristicFallback",
}),
@@ -423,7 +423,7 @@ add_task(async function test_publicSuffix() {
matches: [
makeSearchResult(context, {
engineName: Services.search.defaultEngine.name,
- engineIconUri: Services.search.defaultEngine.getIconURL(),
+ engineIconUri: await Services.search.defaultEngine.getIconURL(),
heuristic: true,
providerName: "HeuristicFallback",
}),
diff --git a/browser/components/urlbar/tests/unit/test_providersManager_filtering.js b/browser/components/urlbar/tests/unit/test_providersManager_filtering.js
index 094eb42437..4a1eb5c0ef 100644
--- a/browser/components/urlbar/tests/unit/test_providersManager_filtering.js
+++ b/browser/components/urlbar/tests/unit/test_providersManager_filtering.js
@@ -205,10 +205,10 @@ add_task(async function test_filter_queryContext() {
get type() {
return UrlbarUtils.PROVIDER_TYPE.PROFILE;
}
- isActive(context) {
+ isActive(_context) {
return true;
}
- async startQuery(context, add) {
+ async startQuery(_context, _add) {
Assert.ok(false, "Provider should no be invoked");
}
}
@@ -360,7 +360,7 @@ add_task(async function test_filter_priority() {
super({ priority, name: `${priority}` + namePart });
this._shouldBeInvoked = shouldBeInvoked;
}
- async startQuery(context, add) {
+ async startQuery(_context, _add) {
Assert.ok(this._shouldBeInvoked, `${this.name} was invoked`);
}
}
diff --git a/browser/components/urlbar/tests/unit/test_remote_tabs.js b/browser/components/urlbar/tests/unit/test_remote_tabs.js
index bb0e708162..a73721d7dc 100644
--- a/browser/components/urlbar/tests/unit/test_remote_tabs.js
+++ b/browser/components/urlbar/tests/unit/test_remote_tabs.js
@@ -28,7 +28,7 @@ let MockClientsEngine = {
Assert.ok(guid.endsWith("desktop") || guid.endsWith("mobile"));
return guid.endsWith("mobile") ? "phone" : "desktop";
},
- remoteClientExists(id) {
+ remoteClientExists(_id) {
return true;
},
getClientName(id) {
@@ -662,7 +662,7 @@ add_task(async function test_duplicate_remote_tabs() {
let url = "http://foo.remote.com/";
let tabs = Array(3)
.fill(0)
- .map((e, i) => ({
+ .map(() => ({
urlHistory: [url],
title: "A title",
lastUsed: Math.floor(Date.now() / 1000),
diff --git a/browser/components/urlbar/tests/unit/test_search_suggestions.js b/browser/components/urlbar/tests/unit/test_search_suggestions.js
index dc7185149f..22f1ec7617 100644
--- a/browser/components/urlbar/tests/unit/test_search_suggestions.js
+++ b/browser/components/urlbar/tests/unit/test_search_suggestions.js
@@ -430,7 +430,7 @@ add_task(async function remoteSuggestionsDupeSearchString() {
add_task(async function queryIsNotASubstring() {
Services.prefs.setBoolPref(SUGGEST_PREF, true);
- setSuggestionsFn(searchStr => {
+ setSuggestionsFn(() => {
return ["aaa", "bbb"];
});
@@ -1550,7 +1550,7 @@ add_task(async function restrict_remote_suggestions_after_no_results() {
// maxCharsForSearchSuggestions returns 0 results. We set it to 4 here to
// avoid constructing a 100+ character string.
Services.prefs.setIntPref("browser.urlbar.maxCharsForSearchSuggestions", 4);
- setSuggestionsFn(searchStr => {
+ setSuggestionsFn(() => {
return [];
});
diff --git a/browser/components/urlbar/tests/unit/xpcshell.toml b/browser/components/urlbar/tests/unit/xpcshell.toml
index 188f4390c7..b168d3b987 100644
--- a/browser/components/urlbar/tests/unit/xpcshell.toml
+++ b/browser/components/urlbar/tests/unit/xpcshell.toml
@@ -128,10 +128,6 @@ prefs = [
["test_providerOmnibox.js"]
["test_providerOpenTabs.js"]
-skip-if = [
- "os == 'mac' && debug", # Bug 1781972
- "os == 'win' && debug", # Bug 1781972
-]
["test_providerPlaces.js"]