chrome-devtools-frontend 1.0.1721762 → 1.0.1726686
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agents/skills/review-ui-widgets/SKILL.md +7 -7
- package/.agents/skills/ui-eng-vision-local-lit-renderer/SKILL.md +12 -0
- package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +3 -3
- package/.agents/skills/ui-widgets/SKILL.md +2 -1
- package/docs/cookbook/dependencies.md +57 -11
- package/docs/get_the_code.md +15 -0
- package/front_end/core/i18n/collect-ui-strings.js +58 -12
- package/front_end/core/i18n/i18nImpl.ts +1 -1
- package/front_end/core/root/Runtime.ts +1 -1
- package/front_end/core/sdk/ResourceTreeModel.ts +16 -0
- package/front_end/core/sdk/WebAuthnModel.ts +17 -10
- package/front_end/entrypoints/js_app/js_app.ts +2 -5
- package/front_end/entrypoints/node_app/node_app.ts +2 -3
- package/front_end/generated/InspectorBackendCommands.ts +3 -3
- package/front_end/generated/protocol.ts +17 -0
- package/front_end/models/ai_assistance/skills/lighthouse.md +2 -1
- package/front_end/models/ai_assistance/skills/network.md +1 -0
- package/front_end/models/ai_assistance/tools/ExecuteJavaScript.ts +26 -2
- package/front_end/models/ai_assistance/tools/GetLighthouseAudits.ts +1 -1
- package/front_end/models/ai_assistance/tools/ListNetworkRequests.ts +2 -7
- package/front_end/models/ai_assistance/tools/RunLighthouse.ts +2 -2
- package/front_end/models/comment_manager/CD4ABridge.ts +4 -0
- package/front_end/models/comment_manager/CommentManager.ts +0 -6
- package/front_end/models/comment_manager/CommentThread.ts +39 -19
- package/front_end/models/elements/StyleChanges.ts +66 -0
- package/front_end/models/trace/EventsSerializer.ts +2 -7
- package/front_end/models/trace/ModelImpl.ts +0 -2
- package/front_end/models/trace/handlers/FlowsHandler.ts +37 -29
- package/front_end/models/trace/handlers/NetworkRequestsHandler.ts +13 -6
- package/front_end/models/trace/helpers/SyntheticEvents.ts +10 -37
- package/front_end/models/trace/insights/RenderBlocking.ts +3 -1
- package/front_end/models/trace/lantern/simulation/Simulator.ts +4 -0
- package/front_end/models/trace/lantern/types/Lantern.ts +1 -0
- package/front_end/panels/accessibility/AccessibilityAnnouncementRecordingView.ts +92 -0
- package/front_end/panels/accessibility/SourceOrderView.ts +1 -1
- package/front_end/panels/accessibility/accessibilityAnnouncementRecordingListView.css +3 -1
- package/front_end/panels/accessibility/accessibilityAnnouncementRecordingView.css +12 -1
- package/front_end/panels/application/ApplicationPanelSidebar.ts +90 -0
- package/front_end/panels/application/StorageView.ts +348 -254
- package/front_end/panels/application/SubAppsView.ts +159 -0
- package/front_end/panels/application/application.ts +2 -0
- package/front_end/panels/application/preloading/PreloadingView.ts +360 -336
- package/front_end/panels/application/preloading/components/PreloadingDisabledInfobar.ts +3 -3
- package/front_end/panels/application/preloading/components/PreloadingGrid.ts +6 -3
- package/front_end/panels/application/preloading/components/RuleSetGrid.ts +17 -17
- package/front_end/panels/application/preloading/components/UsedPreloadingView.ts +2 -2
- package/front_end/panels/application/preloading/preloadingView.css +12 -4
- package/front_end/panels/application/preloading/preloadingViewDropDown.css +1 -1
- package/front_end/panels/application/storageView.css +16 -21
- package/front_end/panels/application/subAppsView.css +21 -0
- package/front_end/panels/browser_debugger/CategorizedBreakpointsSidebarPane.ts +2 -2
- package/front_end/panels/browser_debugger/browser_debugger-meta.ts +6 -8
- package/front_end/panels/comments/CommentsPane.ts +26 -9
- package/front_end/panels/comments/commentsPane.css +25 -6
- package/front_end/panels/common/CommentThreadWidget.ts +2 -2
- package/front_end/panels/common/CommentsOverlayWidget.ts +94 -35
- package/front_end/panels/common/commentThreadWidget.css +17 -0
- package/front_end/panels/common/commentsOverlay.css +5 -10
- package/front_end/panels/common/common-meta.ts +11 -1
- package/front_end/panels/elements/ClassesPaneWidget.ts +133 -89
- package/front_end/panels/elements/ColorSwatchPopoverIcon.ts +7 -33
- package/front_end/panels/elements/DOMTreeElementWidget.ts +3 -1
- package/front_end/panels/elements/DOMTreeWidget.ts +19 -3
- package/front_end/panels/elements/ElementStatePaneWidget.ts +11 -1
- package/front_end/panels/elements/PropertyRenderer.ts +3 -2
- package/front_end/panels/elements/StyleEditorWidget.ts +87 -39
- package/front_end/panels/elements/StylePropertiesSection.ts +32 -5
- package/front_end/panels/elements/StylePropertyTreeElement.ts +227 -162
- package/front_end/panels/elements/StylesSidebarPane.ts +1 -0
- package/front_end/panels/event_listeners/EventListenersView.ts +11 -8
- package/front_end/panels/layer_viewer/Layers3DView.ts +21 -37
- package/front_end/panels/linear_memory_inspector/components/ValueInterpreterSettings.ts +1 -1
- package/front_end/panels/network/NetworkConfigView.ts +12 -10
- package/front_end/panels/network/NetworkDataGridNode.ts +3 -1
- package/front_end/panels/network/RequestConditionsDrawer.ts +1 -1
- package/front_end/panels/network/RequestPayloadView.ts +12 -5
- package/front_end/panels/network/networkConfigView.css +8 -8
- package/front_end/panels/profiler/HeapProfileView.ts +28 -6
- package/front_end/panels/profiler/HeapSnapshotDataGrids.ts +7 -3
- package/front_end/panels/protocol_monitor/JSONEditor.ts +0 -1
- package/front_end/panels/recorder/RecorderPanel.ts +2 -2
- package/front_end/panels/screencast/ScreencastView.ts +3 -6
- package/front_end/panels/security/SecurityPanelSidebar.ts +0 -31
- package/front_end/panels/settings/SettingsScreen.ts +1 -1
- package/front_end/panels/settings/emulation/DevicesSettingsTab.ts +9 -16
- package/front_end/panels/settings/emulation/components/UserAgentClientHintsForm.ts +358 -345
- package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +136 -121
- package/front_end/panels/sources/NavigatorView.ts +105 -45
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +8 -5
- package/front_end/panels/sources/SourcesNavigator.ts +421 -213
- package/front_end/panels/sources/SourcesPanel.ts +9 -5
- package/front_end/panels/sources/TabbedEditorContainer.ts +41 -18
- package/front_end/panels/sources/UISourceCodeFrame.ts +1 -1
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +10 -5
- package/front_end/panels/sources/sources-meta.ts +4 -15
- package/front_end/panels/sources/sourcesNavigator.css +5 -0
- package/front_end/panels/timeline/ModificationsManager.ts +0 -2
- package/front_end/panels/timeline/README.md +2 -0
- package/front_end/panels/timeline/TimelineCommentContext.ts +171 -0
- package/front_end/panels/timeline/TimelineCommentController.ts +168 -30
- package/front_end/panels/timeline/TimelinePanel.ts +4 -0
- package/front_end/panels/timeline/components/IgnoreListSetting.ts +1 -1
- package/front_end/panels/timeline/timeline.ts +2 -0
- package/front_end/panels/timeline/utils/Treemap.ts +8 -0
- package/front_end/panels/webauthn/WebauthnPane.ts +15 -13
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +113 -3
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +21311 -20981
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +36 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +22 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +20 -18
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.d.ts +20 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +40 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +3 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js +41 -5
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/locators/locators.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.js +23 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Input.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js +13 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.js +18 -11
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/core/Request.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.js +8 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Accessibility.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +2 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +24 -12
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.js +13 -7
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/EmulationManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js +5 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Frame.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.d.ts +22 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js +75 -9
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.d.ts +18 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.js +8 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkEventManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js +65 -26
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/NetworkManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js +19 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.js +4 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/ScreenRecording.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js +4 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Target.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js +95 -8
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/TargetManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.d.ts +0 -8
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js +8 -24
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.d.ts +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js +5 -4
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/BrowserWebSocketTransport.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts +9 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/ConnectOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.js +10 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/WaitTask.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts +10 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js +30 -5
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js +33 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/Poller.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js +1 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/BrowserLauncher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js +1 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/NodeWebSocketTransport.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/encoding.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/encoding.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +113 -3
- package/front_end/third_party/puppeteer/package/package.json +4 -4
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +42 -0
- package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +25 -22
- package/front_end/third_party/puppeteer/package/src/api/HTTPRequest.ts +22 -2
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +45 -2
- package/front_end/third_party/puppeteer/package/src/api/locators/locators.ts +79 -32
- package/front_end/third_party/puppeteer/package/src/bidi/HTTPRequest.ts +32 -12
- package/front_end/third_party/puppeteer/package/src/bidi/Input.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/bidi/Page.ts +18 -2
- package/front_end/third_party/puppeteer/package/src/bidi/core/Request.ts +21 -13
- package/front_end/third_party/puppeteer/package/src/cdp/Accessibility.ts +12 -2
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +37 -16
- package/front_end/third_party/puppeteer/package/src/cdp/EmulationManager.ts +14 -11
- package/front_end/third_party/puppeteer/package/src/cdp/Frame.ts +7 -1
- package/front_end/third_party/puppeteer/package/src/cdp/HTTPRequest.ts +101 -14
- package/front_end/third_party/puppeteer/package/src/cdp/NetworkEventManager.ts +26 -6
- package/front_end/third_party/puppeteer/package/src/cdp/NetworkManager.ts +111 -29
- package/front_end/third_party/puppeteer/package/src/cdp/Page.ts +37 -1
- package/front_end/third_party/puppeteer/package/src/cdp/ScreenRecording.ts +5 -4
- package/front_end/third_party/puppeteer/package/src/cdp/Target.ts +5 -0
- package/front_end/third_party/puppeteer/package/src/cdp/TargetManager.ts +122 -7
- package/front_end/third_party/puppeteer/package/src/common/BrowserConnector.ts +13 -33
- package/front_end/third_party/puppeteer/package/src/common/BrowserWebSocketTransport.ts +10 -5
- package/front_end/third_party/puppeteer/package/src/common/ConnectOptions.ts +10 -0
- package/front_end/third_party/puppeteer/package/src/common/WaitTask.ts +12 -0
- package/front_end/third_party/puppeteer/package/src/common/util.ts +39 -5
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/injected/Poller.ts +35 -3
- package/front_end/third_party/puppeteer/package/src/node/BrowserLauncher.ts +4 -2
- package/front_end/third_party/puppeteer/package/src/node/NodeWebSocketTransport.ts +5 -0
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/encoding.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/comments/CommentAnchorResolver.ts +3 -0
- package/front_end/ui/comments/CommentOverlayManager.ts +2 -4
- package/front_end/ui/components/lists/List.ts +14 -1
- package/front_end/ui/components/panel_feedback/PreviewToggle.ts +1 -1
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +23 -14
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +3 -0
- package/front_end/ui/helpers/OpenInNewTab.ts +8 -0
- package/front_end/ui/legacy/LinkContextMenuProvider.ts +1 -1
- package/front_end/ui/legacy/ListWidget.ts +14 -18
- package/front_end/ui/legacy/TabbedPane.ts +46 -3
- package/front_end/ui/legacy/Toolbar.ts +0 -1
- package/front_end/ui/legacy/Treeoutline.ts +10 -3
- package/front_end/ui/legacy/UIUtils.ts +5 -2
- package/front_end/ui/legacy/components/inline_editor/Swatches.ts +19 -6
- package/front_end/ui/legacy/components/object_ui/ObjectPropertiesSection.ts +20 -11
- package/front_end/ui/legacy/components/source_frame/XMLView.ts +27 -7
- package/front_end/ui/visual_logging/KnownContextValues.ts +5 -0
- package/package.json +1 -1
|
@@ -8,10 +8,12 @@ import type {Protocol} from 'devtools-protocol';
|
|
|
8
8
|
|
|
9
9
|
import {URLPattern} from '../../third_party/urlpattern-polyfill/urlpattern-polyfill.js';
|
|
10
10
|
import type {TargetFilterCallback} from '../api/Browser.js';
|
|
11
|
+
import type {NetworkRestrictions} from '../api/Browser.js';
|
|
11
12
|
import type {CDPSession} from '../api/CDPSession.js';
|
|
12
13
|
import {CDPSessionEvent} from '../api/CDPSession.js';
|
|
13
14
|
import {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';
|
|
14
15
|
import {EventEmitter} from '../common/EventEmitter.js';
|
|
16
|
+
import {assertSupportedUrlRestrictions} from '../common/util.js';
|
|
15
17
|
import {assert} from '../util/assert.js';
|
|
16
18
|
import {Deferred} from '../util/Deferred.js';
|
|
17
19
|
import {DisposableStack} from '../util/disposable.js';
|
|
@@ -107,6 +109,16 @@ export class TargetManager
|
|
|
107
109
|
#initialAttachDone = false;
|
|
108
110
|
#blocklist: Array<{pattern: URLPattern; rule: string}> = [];
|
|
109
111
|
#allowlist: Array<{pattern: URLPattern; rule: string}> = [];
|
|
112
|
+
/**
|
|
113
|
+
* All live sessions that network conditions are applied to, including
|
|
114
|
+
* sessions that are not exposed via a target's `_session()` (e.g. workers,
|
|
115
|
+
* manually attached targets and kept service worker sessions). Used to
|
|
116
|
+
* re-apply network conditions at runtime.
|
|
117
|
+
*/
|
|
118
|
+
#networkConditionsSessions = new Map<
|
|
119
|
+
CDPSession,
|
|
120
|
+
Protocol.Target.TargetInfo
|
|
121
|
+
>();
|
|
110
122
|
#logger?: Logger;
|
|
111
123
|
|
|
112
124
|
constructor(
|
|
@@ -119,7 +131,7 @@ export class TargetManager
|
|
|
119
131
|
logger?: Logger,
|
|
120
132
|
) {
|
|
121
133
|
super(undefined, logger);
|
|
122
|
-
if (blocklist && allowlist) {
|
|
134
|
+
if (blocklist?.length && allowlist?.length) {
|
|
123
135
|
throw new Error('Cannot specify both blockList and allowList');
|
|
124
136
|
}
|
|
125
137
|
|
|
@@ -241,6 +253,7 @@ export class TargetManager
|
|
|
241
253
|
|
|
242
254
|
#onSessionDetached = (session: CDPSession) => {
|
|
243
255
|
this.#removeAttachmentListeners(session);
|
|
256
|
+
this.#networkConditionsSessions.delete(session);
|
|
244
257
|
};
|
|
245
258
|
|
|
246
259
|
#onTargetCreated = async (event: Protocol.Target.TargetCreatedEvent) => {
|
|
@@ -334,6 +347,7 @@ export class TargetManager
|
|
|
334
347
|
}
|
|
335
348
|
|
|
336
349
|
if (!this.#connection.isAutoAttached(targetInfo.targetId)) {
|
|
350
|
+
this.#networkConditionsSessions.set(session, targetInfo);
|
|
337
351
|
await this.#maybeSetupNetworkConditions(session, targetInfo);
|
|
338
352
|
return;
|
|
339
353
|
}
|
|
@@ -358,10 +372,12 @@ export class TargetManager
|
|
|
358
372
|
// service worker instead: network conditions are reset when the session
|
|
359
373
|
// that set them detaches, so staying attached is what keeps the rules
|
|
360
374
|
// enforced for requests the worker issues, including the ones it forwards
|
|
361
|
-
// on behalf of controlled pages.
|
|
362
|
-
// idle-terminates service workers
|
|
375
|
+
// on behalf of controlled pages. Kept sessions are not released when rules
|
|
376
|
+
// are cleared, so the browser never idle-terminates these service workers
|
|
377
|
+
// once rules have been configured.
|
|
363
378
|
if (targetInfo.type === 'service_worker') {
|
|
364
379
|
if (this.#hasNetworkRules()) {
|
|
380
|
+
this.#networkConditionsSessions.set(session, targetInfo);
|
|
365
381
|
// The rules are applied before the worker is resumed so that requests
|
|
366
382
|
// made during `install` are covered as well:
|
|
367
383
|
// #maybeSetupNetworkConditions dispatches its commands synchronously,
|
|
@@ -376,8 +392,12 @@ export class TargetManager
|
|
|
376
392
|
this.#logger?.(DEBUG_PREFIXES.error)?.(error);
|
|
377
393
|
});
|
|
378
394
|
await networkConditionsSetUp;
|
|
395
|
+
// An already exposed WorkerTarget (created on the silent-detach path)
|
|
396
|
+
// proceeds to #attachServiceWorkerTarget() even when its script URL is
|
|
397
|
+
// now disallowed, so the target receives the kept session.
|
|
379
398
|
if (
|
|
380
|
-
!this.isUrlAllowed(targetInfo.url)
|
|
399
|
+
(!this.isUrlAllowed(targetInfo.url) &&
|
|
400
|
+
!this.#attachedTargetsByTargetId.has(targetInfo.targetId)) ||
|
|
381
401
|
this.#ignoredTargets.has(targetInfo.targetId) ||
|
|
382
402
|
!this.#discoveredTargetsByTargetId.has(targetInfo.targetId)
|
|
383
403
|
) {
|
|
@@ -453,6 +473,8 @@ export class TargetManager
|
|
|
453
473
|
this.#finishInitializationIfReady(parentTarget._targetId);
|
|
454
474
|
}
|
|
455
475
|
|
|
476
|
+
this.#networkConditionsSessions.set(session, targetInfo);
|
|
477
|
+
|
|
456
478
|
// The browser might be shutting down here, so we
|
|
457
479
|
// ignore potential errors.
|
|
458
480
|
await Promise.all([
|
|
@@ -493,7 +515,7 @@ export class TargetManager
|
|
|
493
515
|
this.#setupAttachmentListeners(session);
|
|
494
516
|
|
|
495
517
|
if (isExistingTarget) {
|
|
496
|
-
|
|
518
|
+
target._setSession(session);
|
|
497
519
|
} else {
|
|
498
520
|
target._initialize();
|
|
499
521
|
this.#attachedTargetsByTargetId.set(targetInfo.targetId, target);
|
|
@@ -573,6 +595,86 @@ export class TargetManager
|
|
|
573
595
|
return true;
|
|
574
596
|
};
|
|
575
597
|
|
|
598
|
+
async setNetworkConditions(
|
|
599
|
+
conditions?: NetworkRestrictions | null,
|
|
600
|
+
): Promise<void> {
|
|
601
|
+
const blocklist = conditions?.blocklist ?? [];
|
|
602
|
+
const allowlist = conditions?.allowlist ?? [];
|
|
603
|
+
|
|
604
|
+
assertSupportedUrlRestrictions({
|
|
605
|
+
blocklist: conditions?.blocklist,
|
|
606
|
+
allowlist: conditions?.allowlist,
|
|
607
|
+
});
|
|
608
|
+
|
|
609
|
+
const wasActive = this.#hasNetworkRules();
|
|
610
|
+
|
|
611
|
+
// Map both lists before assigning so that an invalid pattern does not
|
|
612
|
+
// leave the manager in a partially updated state.
|
|
613
|
+
const newBlocklist = this.#mapPatterns(blocklist);
|
|
614
|
+
const newAllowlist = this.#mapPatterns(allowlist);
|
|
615
|
+
this.#blocklist = newBlocklist;
|
|
616
|
+
this.#allowlist = newAllowlist;
|
|
617
|
+
|
|
618
|
+
const isActive = this.#hasNetworkRules();
|
|
619
|
+
|
|
620
|
+
if (isActive && !wasActive) {
|
|
621
|
+
await this.#attachToServiceWorkers();
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
if (isActive || wasActive) {
|
|
625
|
+
await this.#reapplyNetworkConditions(wasActive && !isActive);
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
async #reapplyNetworkConditions(forceClear?: boolean): Promise<void> {
|
|
630
|
+
const promises: Array<Promise<unknown>> = [];
|
|
631
|
+
// Iterate over all tracked sessions rather than `target._session()`, as
|
|
632
|
+
// the latter is undefined for workers and targets that were not
|
|
633
|
+
// auto-attached.
|
|
634
|
+
for (const [session, targetInfo] of this.#networkConditionsSessions) {
|
|
635
|
+
if (session.detached) {
|
|
636
|
+
this.#networkConditionsSessions.delete(session);
|
|
637
|
+
continue;
|
|
638
|
+
}
|
|
639
|
+
promises.push(
|
|
640
|
+
this.#maybeSetupNetworkConditions(
|
|
641
|
+
session,
|
|
642
|
+
targetInfo,
|
|
643
|
+
forceClear,
|
|
644
|
+
).catch(error => {
|
|
645
|
+
this.#logger?.(DEBUG_PREFIXES.error)?.(error);
|
|
646
|
+
}),
|
|
647
|
+
);
|
|
648
|
+
}
|
|
649
|
+
await Promise.all(promises);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
async #attachToServiceWorkers(): Promise<void> {
|
|
653
|
+
const trackedTargetIds = new Set<string>();
|
|
654
|
+
for (const [session, targetInfo] of this.#networkConditionsSessions) {
|
|
655
|
+
if (!session.detached) {
|
|
656
|
+
trackedTargetIds.add(targetInfo.targetId);
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
const promises: Array<Promise<unknown>> = [];
|
|
661
|
+
for (const targetInfo of this.#discoveredTargetsByTargetId.values()) {
|
|
662
|
+
if (
|
|
663
|
+
targetInfo.type !== 'service_worker' ||
|
|
664
|
+
trackedTargetIds.has(targetInfo.targetId) ||
|
|
665
|
+
this.#ignoredTargets.has(targetInfo.targetId)
|
|
666
|
+
) {
|
|
667
|
+
continue;
|
|
668
|
+
}
|
|
669
|
+
promises.push(
|
|
670
|
+
this.#connection._createSession(targetInfo, true).catch(error => {
|
|
671
|
+
this.#logger?.(DEBUG_PREFIXES.error)?.(error);
|
|
672
|
+
}),
|
|
673
|
+
);
|
|
674
|
+
}
|
|
675
|
+
await Promise.all(promises);
|
|
676
|
+
}
|
|
677
|
+
|
|
576
678
|
#mapPatterns(rules?: string[]): Array<{pattern: URLPattern; rule: string}> {
|
|
577
679
|
const result: Array<{pattern: URLPattern; rule: string}> = [];
|
|
578
680
|
for (const rule of rules ?? []) {
|
|
@@ -592,8 +694,9 @@ export class TargetManager
|
|
|
592
694
|
#maybeSetupNetworkConditions = (
|
|
593
695
|
session: CDPSession,
|
|
594
696
|
targetInfo: Protocol.Target.TargetInfo,
|
|
697
|
+
forceClear?: boolean,
|
|
595
698
|
): Promise<unknown> => {
|
|
596
|
-
if (!this.#hasNetworkRules()) {
|
|
699
|
+
if (!this.#hasNetworkRules() && !forceClear) {
|
|
597
700
|
return Promise.resolve();
|
|
598
701
|
}
|
|
599
702
|
|
|
@@ -636,9 +739,21 @@ export class TargetManager
|
|
|
636
739
|
if (needsNetwork) {
|
|
637
740
|
promises.push(session.send('Network.enable'));
|
|
638
741
|
}
|
|
742
|
+
// When clearing network conditions (lists are empty), we must explicitly pass
|
|
743
|
+
// `offline: false` to force CDP to clear any previously set global offline state.
|
|
744
|
+
// When an allowlist is active, we must pass `undefined` to prevent globally
|
|
745
|
+
// overriding the allowlist's catch-all offline rule. When a blocklist is
|
|
746
|
+
// active, we pass `true`.
|
|
747
|
+
let offline: boolean | undefined = undefined;
|
|
748
|
+
if (this.#blocklist.length === 0 && this.#allowlist.length === 0) {
|
|
749
|
+
offline = false;
|
|
750
|
+
} else if (this.#blocklist.length > 0) {
|
|
751
|
+
offline = true;
|
|
752
|
+
}
|
|
753
|
+
|
|
639
754
|
promises.push(
|
|
640
755
|
session.send('Network.emulateNetworkConditionsByRule', {
|
|
641
|
-
offline
|
|
756
|
+
offline,
|
|
642
757
|
matchedNetworkConditions,
|
|
643
758
|
}),
|
|
644
759
|
);
|
|
@@ -4,17 +4,17 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import {URLPattern} from '../../third_party/urlpattern-polyfill/urlpattern-polyfill.js';
|
|
8
7
|
import type {Browser} from '../api/Browser.js';
|
|
9
8
|
import {_connectToBiDiBrowser} from '../bidi/BrowserConnector.js';
|
|
10
9
|
import {_connectToCdpBrowser} from '../cdp/BrowserConnector.js';
|
|
11
10
|
import {environment, isNode} from '../environment.js';
|
|
12
11
|
import {assert} from '../util/assert.js';
|
|
13
|
-
import {isErrorLike} from '../util/ErrorLike.js';
|
|
12
|
+
import {isErrnoException, isErrorLike} from '../util/ErrorLike.js';
|
|
14
13
|
|
|
15
14
|
import type {ConnectionTransport} from './ConnectionTransport.js';
|
|
16
15
|
import type {ConnectOptions} from './ConnectOptions.js';
|
|
17
16
|
import type {Logger} from './Debug.js';
|
|
17
|
+
import {assertSupportedUrlRestrictions} from './util.js';
|
|
18
18
|
|
|
19
19
|
const getWebSocketTransportClass = async () => {
|
|
20
20
|
return isNode
|
|
@@ -29,37 +29,6 @@ const getWebSocketTransportClass = async () => {
|
|
|
29
29
|
*
|
|
30
30
|
* @internal
|
|
31
31
|
*/
|
|
32
|
-
export function assertSupportedUrlRestrictions(options: {
|
|
33
|
-
allowlist?: string[];
|
|
34
|
-
blocklist?: string[];
|
|
35
|
-
protocol?: string;
|
|
36
|
-
}): void {
|
|
37
|
-
if (options.blocklist && options.allowlist) {
|
|
38
|
-
throw new Error('Cannot specify both blocklist and allowlist');
|
|
39
|
-
}
|
|
40
|
-
if (
|
|
41
|
-
options.protocol === 'webDriverBiDi' &&
|
|
42
|
-
(options.blocklist || options.allowlist)
|
|
43
|
-
) {
|
|
44
|
-
throw new Error(
|
|
45
|
-
'blocklist and allowlist are only supported with the CDP protocol',
|
|
46
|
-
);
|
|
47
|
-
}
|
|
48
|
-
if (options.blocklist) {
|
|
49
|
-
for (const rule of options.blocklist) {
|
|
50
|
-
new URLPattern(rule);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
if (options.allowlist) {
|
|
54
|
-
for (const rule of options.allowlist) {
|
|
55
|
-
new URLPattern(rule);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* @internal
|
|
62
|
-
*/
|
|
63
32
|
export async function _connectToBrowser(
|
|
64
33
|
options: ConnectOptions & {logger: Logger},
|
|
65
34
|
): Promise<Browser> {
|
|
@@ -183,6 +152,17 @@ async function getConnectionTransport(
|
|
|
183
152
|
endpointUrl: browserWSEndpoint,
|
|
184
153
|
};
|
|
185
154
|
} catch (error) {
|
|
155
|
+
if (
|
|
156
|
+
isErrnoException(error) &&
|
|
157
|
+
(error.code === 'EPERM' || error.code === 'EACCES')
|
|
158
|
+
) {
|
|
159
|
+
throw new Error(
|
|
160
|
+
`Could not read DevToolsActivePort for ${options.channel} at ${portPath}: permission denied`,
|
|
161
|
+
{
|
|
162
|
+
cause: error,
|
|
163
|
+
},
|
|
164
|
+
);
|
|
165
|
+
}
|
|
186
166
|
throw new Error(
|
|
187
167
|
`Could not find DevToolsActivePort for ${options.channel} at ${portPath}`,
|
|
188
168
|
{
|
|
@@ -15,9 +15,14 @@ export class BrowserWebSocketTransport implements ConnectionTransport {
|
|
|
15
15
|
_headers: Record<string, string> | undefined,
|
|
16
16
|
logger: Logger,
|
|
17
17
|
// Accepted so this stays call-compatible with NodeWebSocketTransport, which
|
|
18
|
-
// BrowserConnector picks between at runtime. The keep-alive
|
|
19
|
-
// Node-only: the browser WebSocket API exposes
|
|
20
|
-
|
|
18
|
+
// BrowserConnector picks between at runtime. The keep-alive and handshake
|
|
19
|
+
// timeout options are Node-only: the browser WebSocket API exposes neither
|
|
20
|
+
// ping frames nor a handshake timeout.
|
|
21
|
+
_options?: {
|
|
22
|
+
keepAlive?: boolean;
|
|
23
|
+
keepAliveIntervalMs?: number;
|
|
24
|
+
handshakeTimeout?: number;
|
|
25
|
+
},
|
|
21
26
|
): Promise<BrowserWebSocketTransport> {
|
|
22
27
|
return new Promise((resolve, reject) => {
|
|
23
28
|
const ws = new WebSocket(url);
|
|
@@ -48,8 +53,8 @@ export class BrowserWebSocketTransport implements ConnectionTransport {
|
|
|
48
53
|
}
|
|
49
54
|
});
|
|
50
55
|
// Silently log all errors - we don't know what to do with them.
|
|
51
|
-
this.#ws.addEventListener('error',
|
|
52
|
-
this.#logger?.(DEBUG_PREFIXES.error);
|
|
56
|
+
this.#ws.addEventListener('error', err => {
|
|
57
|
+
this.#logger?.(DEBUG_PREFIXES.error)?.(err);
|
|
53
58
|
});
|
|
54
59
|
}
|
|
55
60
|
|
|
@@ -85,6 +85,16 @@ export interface WsOptions {
|
|
|
85
85
|
* @defaultValue `256 * 1024 * 1024`
|
|
86
86
|
*/
|
|
87
87
|
maxPayload?: number;
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Time in milliseconds to wait for the WebSocket opening handshake before
|
|
91
|
+
* failing. Without it, connecting to a host that accepts the TCP connection
|
|
92
|
+
* but never answers the upgrade request waits until the operating system
|
|
93
|
+
* gives up. Node.js only.
|
|
94
|
+
*
|
|
95
|
+
* @defaultValue no timeout
|
|
96
|
+
*/
|
|
97
|
+
handshakeTimeout?: number;
|
|
88
98
|
}
|
|
89
99
|
|
|
90
100
|
/**
|
|
@@ -147,10 +147,22 @@ export class WaitTask<T = unknown> {
|
|
|
147
147
|
break;
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
+
// Avoid starting a poller created after the task has already terminated.
|
|
151
|
+
if (this.#result.finished()) {
|
|
152
|
+
await this.terminate();
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
|
|
150
156
|
await this.#poller.evaluate(poller => {
|
|
151
157
|
void poller.start();
|
|
152
158
|
});
|
|
153
159
|
|
|
160
|
+
// Termination already stops the poller; only skip the result round trip.
|
|
161
|
+
if (this.#result.finished()) {
|
|
162
|
+
await this.terminate();
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
|
|
154
166
|
const result = await this.#poller.evaluateHandle(poller => {
|
|
155
167
|
return poller.result();
|
|
156
168
|
});
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
Observable,
|
|
16
16
|
timer,
|
|
17
17
|
} from '../../third_party/rxjs/rxjs.js';
|
|
18
|
+
import {URLPattern} from '../../third_party/urlpattern-polyfill/urlpattern-polyfill.js';
|
|
18
19
|
import type {CDPSession} from '../api/CDPSession.js';
|
|
19
20
|
import {environment} from '../environment.js';
|
|
20
21
|
import {assert} from '../util/assert.js';
|
|
@@ -333,11 +334,11 @@ export function parsePDFOptions(
|
|
|
333
334
|
waitForFonts: true,
|
|
334
335
|
};
|
|
335
336
|
|
|
336
|
-
let width =
|
|
337
|
-
let height =
|
|
337
|
+
let width = paperFormats.letter[lengthUnit].width;
|
|
338
|
+
let height = paperFormats.letter[lengthUnit].height;
|
|
338
339
|
if (options.format) {
|
|
339
340
|
const format =
|
|
340
|
-
paperFormats[options.format.toLowerCase() as LowerCasePaperFormat][
|
|
341
|
+
paperFormats[options.format.toLowerCase() as LowerCasePaperFormat]?.[
|
|
341
342
|
lengthUnit
|
|
342
343
|
];
|
|
343
344
|
assert(format, 'Unknown paper format: ' + options.format);
|
|
@@ -378,8 +379,10 @@ export function parsePDFOptions(
|
|
|
378
379
|
export const unitToPixels = {
|
|
379
380
|
px: 1,
|
|
380
381
|
in: 96,
|
|
381
|
-
cm:
|
|
382
|
-
mm:
|
|
382
|
+
cm: 96 / 2.54,
|
|
383
|
+
mm: 96 / 25.4,
|
|
384
|
+
pt: 96 / 72,
|
|
385
|
+
pc: 16,
|
|
383
386
|
};
|
|
384
387
|
|
|
385
388
|
function convertPrintParameterToInches(
|
|
@@ -472,3 +475,34 @@ export function filterAsync<T>(
|
|
|
472
475
|
);
|
|
473
476
|
});
|
|
474
477
|
}
|
|
478
|
+
|
|
479
|
+
/**
|
|
480
|
+
* @internal
|
|
481
|
+
*/
|
|
482
|
+
export function assertSupportedUrlRestrictions(options: {
|
|
483
|
+
allowlist?: string[];
|
|
484
|
+
blocklist?: string[];
|
|
485
|
+
protocol?: string;
|
|
486
|
+
}): void {
|
|
487
|
+
if (options.blocklist?.length && options.allowlist?.length) {
|
|
488
|
+
throw new Error('Cannot specify both blocklist and allowlist');
|
|
489
|
+
}
|
|
490
|
+
if (
|
|
491
|
+
options.protocol === 'webDriverBiDi' &&
|
|
492
|
+
(options.blocklist || options.allowlist)
|
|
493
|
+
) {
|
|
494
|
+
throw new Error(
|
|
495
|
+
'blocklist and allowlist are only supported with the CDP protocol',
|
|
496
|
+
);
|
|
497
|
+
}
|
|
498
|
+
if (options.blocklist) {
|
|
499
|
+
for (const rule of options.blocklist) {
|
|
500
|
+
new URLPattern(rule);
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
if (options.allowlist) {
|
|
504
|
+
for (const rule of options.allowlist) {
|
|
505
|
+
new URLPattern(rule);
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
}
|
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
*
|
|
6
6
|
* @internal
|
|
7
7
|
*/
|
|
8
|
-
export const source = "\"use strict\";var g=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)g(t,r,{get:e[r],enumerable:!0})},J=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Y(e))!G.call(t,n)&&n!==r&&g(t,n,{get:()=>e[n],enumerable:!(o=X(e,n))||o.enumerable});return t};var z=t=>J(g({},\"__esModule\",{value:!0}),t);var Se={};l(Se,{default:()=>Te});module.exports=z(Se);var b=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends b{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(n=>n instanceof t?(n.#s&&r.add(n),n.valueOrThrow()):n);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#t;#o;#n=new Promise(e=>{this.#o=e});#s;#l;constructor(e){e&&e.timeout>0&&(this.#l=new p(e.message),this.#s=setTimeout(()=>{this.reject(this.#l)},e.timeout))}#i(e){clearTimeout(this.#s),this.#t=e,this.#o()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#i(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#i(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#t}#a;valueOrThrow(){return this.#a||(this.#a=(async()=>{if(await this.#n,this.#r)throw this.#t;return this.#t})()),this.#a}};var W=new Map,F=t=>{let e=W.get(t);return e||(e=new Function(`return ${t}`)(),W.set(t,e),e)};var E={};l(E,{ariaQuerySelector:()=>K,ariaQuerySelectorAll:()=>x});var K=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var v={};l(v,{cssQuerySelector:()=>Z,cssQuerySelectorAll:()=>ee});var Z=(t,e)=>t.querySelector(e),ee=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(n,i)=>{for(let s of o(n,i))return s;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(n,i)=>{let s=o(n,i);return s?[s]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new y;var R={};l(R,{pierceQuerySelector:()=>te,pierceQuerySelectorAll:()=>re});var te=(t,e)=>{let r=null,o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&!r&&s.matches(e)&&(r=s)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},re=(t,e)=>{let r=[],o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&s.matches(e)&&r.push(s)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var oe={childList:!0,subtree:!0,attributes:!0};function ne(t){return t.nodeType===Node.ELEMENT_NODE||t.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function se(t){return t.parentNode??t.host??null}function ie(t,e){let r=t,o;for(;o=se(r);){if(e.has(o))return!0;r=o}return!1}var w=class{#e;#r;#t;#o=new WeakSet;#n;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#n=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new WeakSet,this.#t=new MutationObserver(async o=>{this.#l(o);let n=await this.#e();n&&(e.resolve(n),await this.stop())}),this.#s(this.#r)}#s(e){!this.#t||this.#o.has(e)||(this.#o.add(e),this.#t.observe(e,oe),this.#i(e))}#l(e){let r=new Set;for(let o of e)for(let n of o.addedNodes)ne(n)&&r.add(n);for(let o of r)ie(o,r)||this.#i(o)}#i(e){let r=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT);do{let{shadowRoot:o}=r.currentNode;o&&this.#s(o)}while(r.nextNode())}async stop(){u(this.#n,\"Polling never started.\"),this.#n.finished()||this.#n.reject(new Error(\"Polling stopped\")),this.#t&&(this.#t.disconnect(),this.#t=void 0)}result(){return u(this.#n,\"Polling never started.\"),this.#n.valueOrThrow()}},N=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let n=await this.#e();if(!n){window.requestAnimationFrame(o);return}e.resolve(n),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return u(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},T=class{#e;#r;#t;#o;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#o=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#t=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#o,\"Polling never started.\"),this.#o.finished()||this.#o.reject(new Error(\"Polling stopped\")),this.#t&&(clearInterval(this.#t),this.#t=void 0)}result(){return u(this.#o,\"Polling never started.\"),this.#o.valueOrThrow()}};var L={};l(L,{PCombinator:()=>V,pQuerySelector:()=>we,pQuerySelectorAll:()=>B});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var C={};l(C,{textQuerySelectorAll:()=>m});var le=new Set([\"checkbox\",\"image\",\"radio\"]),ae=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!le.has(t.type),ce=new Set([\"SCRIPT\",\"STYLE\"]),f=t=>!ce.has(t.nodeName)&&!document.head?.contains(t),O=new WeakMap,H=t=>{for(;t;)O.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},j=new WeakSet,I,ue=()=>{let t=globalThis.MutationObserver;if(!t)throw new Error(\"MutationObserver is not available in this environment.\");return I||(I=new t(e=>{for(let r of e)H(r.target)})),I},d=t=>{let e=O.get(t);if(e||(e={full:\"\",immediate:[]},!f(t)))return e;let r=\"\";if(ae(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{H(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),j.has(t)||(ue().observe(t,{childList:!0,characterData:!0,subtree:!0}),j.add(t))}return O.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let n;o.shadowRoot?n=m(o.shadowRoot,e):n=m(o,e);for(let i of n)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var k={};l(k,{checkVisibility:()=>fe,pierce:()=>S,pierceAll:()=>M});var de=[\"hidden\",\"collapse\"],fe=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement??t.parentNode?.host:t;if(!r)return e===!1;let o=window.getComputedStyle(r),n=o&&!de.includes(o.visibility)&&!me(r);return e===n?t:!1};function me(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var he=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*S(t){he(t)?yield t.shadowRoot:yield t}function*M(t){t=S(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var _={};l(_,{xpathQuerySelectorAll:()=>D});var D=function*(t,e,r=-1){let n=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],s;for(;(s=n.iterateNext())&&(i.push(s),!(r&&i.length===r)););for(let h=0;h<i.length;h++)s=i[h],yield s,i[h]=null};var pe=/[-\\w\\P{ASCII}*]/u,V=(r=>(r.Descendent=\">>>\",r.Child=\">>>>\",r))(V||{}),U=t=>\"querySelectorAll\"in t,q=class{#e;#r=[];#t=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#o()}async run(){for(typeof this.#t==\"string\"&&this.#t.trimStart()===\":scope\"&&this.#o();this.#t!==void 0;this.#o()){let e=this.#t;typeof e==\"string\"?e[0]&&pe.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){U(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!U(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let n of r.parentElement.children)if(++o,n===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*m(r,e.value);break;case\"xpath\":yield*D(r,e.value);break;case\"aria\":yield*x(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#o(){if(this.#r.length!==0){this.#t=this.#r.shift();return}if(this.#e.length===0){this.#t=void 0;return}let e=this.#e.shift();switch(e){case\">>>>\":{this.elements=a.flatMap(this.elements,S),this.#o();break}case\">>>\":{this.elements=a.flatMap(this.elements,M),this.#o();break}default:this.#r=e,this.#o();break}}},Q=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let n=0;for(let s=e.previousSibling;s;s=s.previousSibling)++n;let i=this.calculate(e.parentNode,[n]);return this.#e.set(e,i),[...i,...r]}},$=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[n=-1,...i]=e;return r===n?$(o,i):r<n?-1:1},ye=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new Q;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,n])=>$(o,n)).map(([o])=>o)},B=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let n=0;return o.some(i=>(typeof i==\"string\"?++n:n=0,n>1))}))throw new Error(\"Multiple deep combinators found in sequence.\");return ye(a.flatMap(r,o=>{let n=new q(t,o);return n.run(),n.elements}))},we=async function(t,e){for await(let r of B(t,e))return r;return null};var Ne=Object.freeze({...E,...A,...R,...L,...C,...k,..._,...v,Deferred:c,createFunction:F,createTextContent:d,IntervalPoller:T,isSuitableNodeForTextMatching:f,MutationPoller:w,RAFPoller:N}),Te=Ne;\n";
|
|
8
|
+
export const source = "\"use strict\";var b=Object.defineProperty;var X=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)b(t,r,{get:e[r],enumerable:!0})},J=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Y(e))!G.call(t,n)&&n!==r&&b(t,n,{get:()=>e[n],enumerable:!(o=X(e,n))||o.enumerable});return t};var z=t=>J(b({},\"__esModule\",{value:!0}),t);var Se={};l(Se,{default:()=>Te});module.exports=z(Se);var g=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},h=class extends g{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(n=>n instanceof t?(n.#s&&r.add(n),n.valueOrThrow()):n);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#t;#o;#n=new Promise(e=>{this.#o=e});#s;#l;constructor(e){e&&e.timeout>0&&(this.#l=new h(e.message),this.#s=setTimeout(()=>{this.reject(this.#l)},e.timeout))}#a(e){clearTimeout(this.#s),this.#t=e,this.#o()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#a(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#a(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#t}#i;valueOrThrow(){return this.#i||(this.#i=(async()=>{if(await this.#n,this.#r)throw this.#t;return this.#t})()),this.#i}};var W=new Map,F=t=>{let e=W.get(t);return e||(e=new Function(`return ${t}`)(),W.set(t,e),e)};var E={};l(E,{ariaQuerySelector:()=>K,ariaQuerySelectorAll:()=>x});var K=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var v={};l(v,{cssQuerySelector:()=>Z,cssQuerySelectorAll:()=>ee});var Z=(t,e)=>t.querySelector(e),ee=function(t,e){return t.querySelectorAll(e)};var P={};l(P,{CustomQuerySelectorRegistry:()=>p,customQuerySelectors:()=>A});var p=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(n,i)=>{for(let s of o(n,i))return s;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(n,i)=>{let s=o(n,i);return s?[s]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},A=new p;var R={};l(R,{pierceQuerySelector:()=>te,pierceQuerySelectorAll:()=>re});var te=(t,e)=>{let r=null,o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&!r&&s.matches(e)&&(r=s)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},re=(t,e)=>{let r=[],o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&s.matches(e)&&r.push(s)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var y=(t,e)=>{if(!t)throw new Error(e)};var oe={childList:!0,subtree:!0,attributes:!0};function ne(t){return t.nodeType===Node.ELEMENT_NODE||t.nodeType===Node.DOCUMENT_FRAGMENT_NODE}function se(t){return t.parentNode??t.host??null}function ie(t,e){let r=t,o;for(;o=se(r);){if(e.has(o))return!0;r=o}return!1}var w=class{#e;#r;#t;#o=new WeakSet;#n;#s=!1;constructor(e,r){this.#e=e,this.#r=r}async start(){if(this.#s)return;let e=this.#n=c.create(),r=await this.#e();if(!this.#s){if(r){e.resolve(r);return}this.#o=new WeakSet,this.#t=new MutationObserver(async o=>{this.#a(o);let n=await this.#e();n&&(e.resolve(n),await this.stop())}),this.#l(this.#r)}}#l(e){!this.#t||this.#o.has(e)||(this.#o.add(e),this.#t.observe(e,oe),this.#i(e))}#a(e){let r=new Set;for(let o of e)for(let n of o.addedNodes)ne(n)&&r.add(n);for(let o of r)ie(o,r)||this.#i(o)}#i(e){let r=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT);do{let{shadowRoot:o}=r.currentNode;o&&this.#l(o)}while(r.nextNode())}async stop(){this.#s=!0,this.#n&&(this.#n.finished()||this.#n.reject(new Error(\"Polling stopped\")),this.#t&&(this.#t.disconnect(),this.#t=void 0))}result(){return y(this.#n,\"Polling never started.\"),this.#n.valueOrThrow()}},N=class{#e;#r;#t=!1;constructor(e){this.#e=e}async start(){if(this.#t)return;let e=this.#r=c.create(),r=await this.#e();if(this.#t)return;if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let n=await this.#e();if(!n){window.requestAnimationFrame(o);return}e.resolve(n),await this.stop()};window.requestAnimationFrame(o)}async stop(){this.#t=!0,this.#r&&(this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\")))}result(){return y(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},T=class{#e;#r;#t;#o;#n=!1;constructor(e,r){this.#e=e,this.#r=r}async start(){if(this.#n)return;let e=this.#o=c.create(),r=await this.#e();if(!this.#n){if(r){e.resolve(r);return}this.#t=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}}async stop(){this.#n=!0,this.#o&&(this.#o.finished()||this.#o.reject(new Error(\"Polling stopped\")),this.#t&&(clearInterval(this.#t),this.#t=void 0))}result(){return y(this.#o,\"Polling never started.\"),this.#o.valueOrThrow()}};var L={};l(L,{PCombinator:()=>V,pQuerySelector:()=>we,pQuerySelectorAll:()=>B});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var C={};l(C,{textQuerySelectorAll:()=>f});var le=new Set([\"checkbox\",\"image\",\"radio\"]),ae=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!le.has(t.type),ce=new Set([\"SCRIPT\",\"STYLE\"]),d=t=>!ce.has(t.nodeName)&&!document.head?.contains(t),O=new WeakMap,H=t=>{for(;t;)O.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},j=new WeakSet,I,ue=()=>{let t=globalThis.MutationObserver;if(!t)throw new Error(\"MutationObserver is not available in this environment.\");return I||(I=new t(e=>{for(let r of e)H(r.target)})),I},u=t=>{let e=O.get(t);if(e||(e={full:\"\",immediate:[]},!d(t)))return e;let r=\"\";if(ae(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{H(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=u(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=u(t.shadowRoot).full),j.has(t)||(ue().observe(t,{childList:!0,characterData:!0,subtree:!0}),j.add(t))}return O.set(t,e),e};var f=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&d(o)){let n;o.shadowRoot?n=f(o.shadowRoot,e):n=f(o,e);for(let i of n)yield i,r=!0}r||t instanceof Element&&d(t)&&u(t).full.includes(e)&&(yield t)};var k={};l(k,{checkVisibility:()=>fe,pierce:()=>S,pierceAll:()=>M});var de=[\"hidden\",\"collapse\"],fe=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement??t.parentNode?.host:t;if(!r)return e===!1;let o=window.getComputedStyle(r),n=o&&!de.includes(o.visibility)&&!me(r);return e===n?t:!1};function me(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var he=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*S(t){he(t)?yield t.shadowRoot:yield t}function*M(t){t=S(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var _={};l(_,{xpathQuerySelectorAll:()=>D});var D=function*(t,e,r=-1){let n=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],s;for(;(s=n.iterateNext())&&(i.push(s),!(r&&i.length===r)););for(let m=0;m<i.length;m++)s=i[m],yield s,i[m]=null};var pe=/[-\\w\\P{ASCII}*]/u,V=(r=>(r.Descendent=\">>>\",r.Child=\">>>>\",r))(V||{}),U=t=>\"querySelectorAll\"in t,q=class{#e;#r=[];#t=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#o()}async run(){for(typeof this.#t==\"string\"&&this.#t.trimStart()===\":scope\"&&this.#o();this.#t!==void 0;this.#o()){let e=this.#t;typeof e==\"string\"?e[0]&&pe.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){U(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!U(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let n of r.parentElement.children)if(++o,n===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*f(r,e.value);break;case\"xpath\":yield*D(r,e.value);break;case\"aria\":yield*x(r,e.value);break;default:let o=A.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#o(){if(this.#r.length!==0){this.#t=this.#r.shift();return}if(this.#e.length===0){this.#t=void 0;return}let e=this.#e.shift();switch(e){case\">>>>\":{this.elements=a.flatMap(this.elements,S),this.#o();break}case\">>>\":{this.elements=a.flatMap(this.elements,M),this.#o();break}default:this.#r=e,this.#o();break}}},Q=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let n=0;for(let s=e.previousSibling;s;s=s.previousSibling)++n;let i=this.calculate(e.parentNode,[n]);return this.#e.set(e,i),[...i,...r]}},$=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[n=-1,...i]=e;return r===n?$(o,i):r<n?-1:1},ye=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new Q;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,n])=>$(o,n)).map(([o])=>o)},B=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let n=0;return o.some(i=>(typeof i==\"string\"?++n:n=0,n>1))}))throw new Error(\"Multiple deep combinators found in sequence.\");return ye(a.flatMap(r,o=>{let n=new q(t,o);return n.run(),n.elements}))},we=async function(t,e){for await(let r of B(t,e))return r;return null};var Ne=Object.freeze({...E,...P,...R,...L,...C,...k,..._,...v,Deferred:c,createFunction:F,createTextContent:u,IntervalPoller:T,isSuitableNodeForTextMatching:d,MutationPoller:w,RAFPoller:N}),Te=Ne;\n";
|
|
@@ -8,6 +8,8 @@ import {assert} from '../util/assert.js';
|
|
|
8
8
|
import {Deferred} from '../util/Deferred.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
+
* A stopped poller is single-use and does not restart.
|
|
12
|
+
*
|
|
11
13
|
* @internal
|
|
12
14
|
*/
|
|
13
15
|
export interface Poller<T> {
|
|
@@ -60,14 +62,21 @@ export class MutationPoller<T> implements Poller<T> {
|
|
|
60
62
|
#observer?: MutationObserver;
|
|
61
63
|
#observedRoots = new WeakSet<Node>();
|
|
62
64
|
#deferred?: Deferred<T>;
|
|
65
|
+
#stopped = false;
|
|
63
66
|
constructor(fn: () => Promise<T>, root: Node) {
|
|
64
67
|
this.#fn = fn;
|
|
65
68
|
this.#root = root;
|
|
66
69
|
}
|
|
67
70
|
|
|
68
71
|
async start(): Promise<void> {
|
|
72
|
+
if (this.#stopped) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
69
75
|
const deferred = (this.#deferred = Deferred.create<T>());
|
|
70
76
|
const result = await this.#fn();
|
|
77
|
+
if (this.#stopped) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
71
80
|
if (result) {
|
|
72
81
|
deferred.resolve(result);
|
|
73
82
|
return;
|
|
@@ -135,7 +144,10 @@ export class MutationPoller<T> implements Poller<T> {
|
|
|
135
144
|
}
|
|
136
145
|
|
|
137
146
|
async stop(): Promise<void> {
|
|
138
|
-
|
|
147
|
+
this.#stopped = true;
|
|
148
|
+
if (!this.#deferred) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
139
151
|
if (!this.#deferred.finished()) {
|
|
140
152
|
this.#deferred.reject(new Error('Polling stopped'));
|
|
141
153
|
}
|
|
@@ -157,13 +169,20 @@ export class MutationPoller<T> implements Poller<T> {
|
|
|
157
169
|
export class RAFPoller<T> implements Poller<T> {
|
|
158
170
|
#fn: () => Promise<T>;
|
|
159
171
|
#deferred?: Deferred<T>;
|
|
172
|
+
#stopped = false;
|
|
160
173
|
constructor(fn: () => Promise<T>) {
|
|
161
174
|
this.#fn = fn;
|
|
162
175
|
}
|
|
163
176
|
|
|
164
177
|
async start(): Promise<void> {
|
|
178
|
+
if (this.#stopped) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
165
181
|
const deferred = (this.#deferred = Deferred.create<T>());
|
|
166
182
|
const result = await this.#fn();
|
|
183
|
+
if (this.#stopped) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
167
186
|
if (result) {
|
|
168
187
|
deferred.resolve(result);
|
|
169
188
|
return;
|
|
@@ -185,7 +204,10 @@ export class RAFPoller<T> implements Poller<T> {
|
|
|
185
204
|
}
|
|
186
205
|
|
|
187
206
|
async stop(): Promise<void> {
|
|
188
|
-
|
|
207
|
+
this.#stopped = true;
|
|
208
|
+
if (!this.#deferred) {
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
189
211
|
if (!this.#deferred.finished()) {
|
|
190
212
|
this.#deferred.reject(new Error('Polling stopped'));
|
|
191
213
|
}
|
|
@@ -207,14 +229,21 @@ export class IntervalPoller<T> implements Poller<T> {
|
|
|
207
229
|
|
|
208
230
|
#interval?: NodeJS.Timeout;
|
|
209
231
|
#deferred?: Deferred<T>;
|
|
232
|
+
#stopped = false;
|
|
210
233
|
constructor(fn: () => Promise<T>, ms: number) {
|
|
211
234
|
this.#fn = fn;
|
|
212
235
|
this.#ms = ms;
|
|
213
236
|
}
|
|
214
237
|
|
|
215
238
|
async start(): Promise<void> {
|
|
239
|
+
if (this.#stopped) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
216
242
|
const deferred = (this.#deferred = Deferred.create<T>());
|
|
217
243
|
const result = await this.#fn();
|
|
244
|
+
if (this.#stopped) {
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
218
247
|
if (result) {
|
|
219
248
|
deferred.resolve(result);
|
|
220
249
|
return;
|
|
@@ -231,7 +260,10 @@ export class IntervalPoller<T> implements Poller<T> {
|
|
|
231
260
|
}
|
|
232
261
|
|
|
233
262
|
async stop(): Promise<void> {
|
|
234
|
-
|
|
263
|
+
this.#stopped = true;
|
|
264
|
+
if (!this.#deferred) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
235
267
|
if (!this.#deferred.finished()) {
|
|
236
268
|
this.#deferred.reject(new Error('Polling stopped'));
|
|
237
269
|
}
|
|
@@ -26,12 +26,14 @@ import {
|
|
|
26
26
|
import type {Browser, BrowserCloseCallback} from '../api/Browser.js';
|
|
27
27
|
import {CdpBrowser} from '../cdp/Browser.js';
|
|
28
28
|
import {Connection} from '../cdp/Connection.js';
|
|
29
|
-
import {assertSupportedUrlRestrictions} from '../common/BrowserConnector.js';
|
|
30
29
|
import type {WsOptions} from '../common/ConnectOptions.js';
|
|
31
30
|
import {DEBUG_PREFIXES, type Logger} from '../common/Debug.js';
|
|
32
31
|
import {TimeoutError} from '../common/Errors.js';
|
|
33
32
|
import type {SupportedBrowser} from '../common/SupportedBrowser.js';
|
|
34
|
-
import {
|
|
33
|
+
import {
|
|
34
|
+
assertSupportedUrlRestrictions,
|
|
35
|
+
DEFAULT_VIEWPORT,
|
|
36
|
+
} from '../common/util.js';
|
|
35
37
|
import type {Viewport} from '../common/Viewport.js';
|
|
36
38
|
import {
|
|
37
39
|
createIncrementalIdGenerator,
|
|
@@ -41,6 +41,10 @@ export interface NodeWebSocketTransportOptions {
|
|
|
41
41
|
* Maximum allowed message size in bytes.
|
|
42
42
|
*/
|
|
43
43
|
maxPayload?: number;
|
|
44
|
+
/**
|
|
45
|
+
* Time in milliseconds to wait for the opening handshake.
|
|
46
|
+
*/
|
|
47
|
+
handshakeTimeout?: number;
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
/**
|
|
@@ -59,6 +63,7 @@ export class NodeWebSocketTransport implements ConnectionTransport {
|
|
|
59
63
|
perMessageDeflate: false,
|
|
60
64
|
allowSynchronousEvents: false,
|
|
61
65
|
maxPayload: options.maxPayload ?? DEFAULT_MAX_PAYLOAD_BYTES,
|
|
66
|
+
handshakeTimeout: options.handshakeTimeout,
|
|
62
67
|
headers: {
|
|
63
68
|
'User-Agent': `Puppeteer ${packageVersion}`,
|
|
64
69
|
...headers,
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @internal
|
|
9
9
|
*/
|
|
10
10
|
export const PUPPETEER_REVISIONS = Object.freeze({
|
|
11
|
-
chrome: '
|
|
12
|
-
'chrome-headless-shell': '
|
|
13
|
-
firefox: 'stable_158.0',
|
|
11
|
+
chrome: '156.0.8078.47',
|
|
12
|
+
'chrome-headless-shell': '156.0.8078.47',
|
|
13
|
+
firefox: 'stable_158.0.1',
|
|
14
14
|
});
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
export function stringToTypedArray(
|
|
11
11
|
string: string,
|
|
12
12
|
base64Encoded = false,
|
|
13
|
-
): Uint8Array {
|
|
13
|
+
): Uint8Array<ArrayBuffer> {
|
|
14
14
|
if (base64Encoded) {
|
|
15
15
|
if ('fromBase64' in Uint8Array) {
|
|
16
16
|
// @ts-expect-error fromBase64 is newer than the types we use.
|
|
@@ -55,7 +55,7 @@ export function typedArrayToBase64(typedArray: Uint8Array): string {
|
|
|
55
55
|
/**
|
|
56
56
|
* @internal
|
|
57
57
|
*/
|
|
58
|
-
export function mergeUint8Arrays(items: Uint8Array[]): Uint8Array {
|
|
58
|
+
export function mergeUint8Arrays(items: Uint8Array[]): Uint8Array<ArrayBuffer> {
|
|
59
59
|
let length = 0;
|
|
60
60
|
for (const item of items) {
|
|
61
61
|
length += item.length;
|