chrome-devtools-frontend 1.0.937244 → 1.0.939066
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/.stylelintrc.json +15 -11
- package/config/gni/all_devtools_files.gni +0 -19
- package/config/gni/devtools_grd_files.gni +2 -9
- package/front_end/Images/whatsnew.avif +0 -0
- package/front_end/Tests.js +30 -30
- package/front_end/core/host/InspectorFrontendHost.ts +16 -30
- package/front_end/core/host/InspectorFrontendHostAPI.ts +1 -0
- package/front_end/core/host/UserMetrics.ts +25 -0
- package/front_end/core/i18n/locales/en-US.json +4 -1
- package/front_end/core/i18n/locales/en-XL.json +4 -1
- package/front_end/core/platform/string-utilities.ts +23 -0
- package/front_end/core/sdk/DOMModel.ts +1 -1
- package/front_end/core/sdk/EmulationModel.ts +11 -0
- package/front_end/core/sdk/NetworkManager.ts +1 -0
- package/front_end/core/sdk/sdk-meta.ts +30 -1
- package/front_end/entrypoints/devtools_app/devtools_app.json +0 -4
- package/front_end/entrypoints/inspector_main/RenderingOptions.ts +9 -2
- package/front_end/entrypoints/inspector_main/inspector_main-meta.ts +0 -3
- package/front_end/entrypoints/inspector_main/renderingOptions.css +2 -2
- package/front_end/entrypoints/lighthouse_worker/LighthouseService.ts +3 -1
- package/front_end/entrypoints/main/MainImpl.ts +15 -0
- package/front_end/entrypoints/main/main-meta.ts +0 -2
- package/front_end/entrypoints/node_app/node_app-meta.ts +0 -3
- package/front_end/entrypoints/node_app/node_app.js +3 -0
- package/front_end/entrypoints/node_main/nodeConnectionsPanel.css +2 -2
- package/front_end/entrypoints/shell/shell.json +3 -7
- package/front_end/entrypoints/worker_app/worker_app.json +0 -2
- package/front_end/generated/InspectorBackendCommands.js +14 -5
- package/front_end/generated/SupportedCSSProperties.js +8 -4
- package/front_end/generated/protocol-mapping.d.ts +10 -0
- package/front_end/generated/protocol-proxy-api.d.ts +19 -0
- package/front_end/generated/protocol.d.ts +56 -1
- package/front_end/legacy_test_runner/test_runner/test_runner.js +2 -4
- package/front_end/models/issues_manager/DeprecationIssue.ts +67 -0
- package/front_end/models/issues_manager/IssuesManager.ts +5 -0
- package/front_end/models/issues_manager/descriptions/deprecation.md +3 -0
- package/front_end/models/issues_manager/issues_manager.ts +2 -0
- package/front_end/models/persistence/editFileSystemView.css +1 -1
- package/front_end/models/persistence/workspaceSettingsTab.css +1 -1
- package/front_end/panels/accessibility/AXBreadcrumbsPane.ts +8 -1
- package/front_end/panels/accessibility/accessibility-meta.ts +0 -3
- package/front_end/panels/accessibility/accessibilityNode.css +2 -2
- package/front_end/panels/accessibility/axBreadcrumbs.css +1 -1
- package/front_end/panels/animation/animationTimeline.css +5 -5
- package/front_end/panels/application/components/ReportsGrid.ts +38 -4
- package/front_end/panels/application/components/frameDetailsReportView.css +1 -1
- package/front_end/panels/application/components/reportingApiGrid.css +4 -0
- package/front_end/panels/application/module.json +1 -3
- package/front_end/panels/application/resourcesPanel.css +1 -1
- package/front_end/panels/application/resourcesSidebar.css +1 -1
- package/front_end/panels/browser_debugger/browser_debugger-meta.ts +0 -5
- package/front_end/panels/browser_debugger/xhrBreakpointsSidebarPane.css +2 -5
- package/front_end/panels/changes/changesSidebar.css +1 -1
- package/front_end/panels/changes/changesView.css +2 -2
- package/front_end/panels/console/console-meta.ts +1 -3
- package/front_end/panels/console/consolePrompt.css +1 -1
- package/front_end/panels/console/consoleSidebar.css +4 -4
- package/front_end/panels/console/consoleView.css +2 -2
- package/front_end/panels/coverage/coverage-meta.ts +0 -3
- package/front_end/panels/css_overview/CSSOverviewCompletedView.ts +18 -17
- package/front_end/panels/css_overview/CSSOverviewPanel.ts +31 -10
- package/front_end/panels/css_overview/components/cssOverviewStartView.css +1 -1
- package/front_end/panels/css_overview/cssOverviewCompletedView.css +8 -8
- package/front_end/panels/elements/StylePropertyTreeElement.ts +3 -0
- package/front_end/panels/elements/classesPaneWidget.css +1 -1
- package/front_end/panels/elements/components/adornerSettingsPane.css +1 -1
- package/front_end/panels/elements/computedStyleWidgetTree.css +1 -1
- package/front_end/panels/elements/elements-meta.ts +0 -2
- package/front_end/panels/elements/elementsPanel.css +1 -1
- package/front_end/panels/elements/elementsTreeOutline.css +1 -1
- package/front_end/panels/elements/layoutPane.css +1 -1
- package/front_end/panels/elements/platformFontsWidget.css +1 -1
- package/front_end/panels/elements/stylesSectionTree.css +1 -1
- package/front_end/panels/elements/stylesSidebarPane.css +8 -0
- package/front_end/panels/event_listeners/EventListenersView.ts +5 -4
- package/front_end/panels/event_listeners/eventListenersView.css +3 -2
- package/front_end/panels/help/ReleaseNoteText.ts +28 -0
- package/front_end/panels/issues/IssueKindView.ts +0 -6
- package/front_end/panels/issues/IssueView.ts +19 -27
- package/front_end/panels/issues/components/HideIssuesMenu.ts +7 -11
- package/front_end/panels/issues/components/hideIssuesMenu.css +8 -0
- package/front_end/panels/issues/issuesTree.css +28 -5
- package/front_end/panels/lighthouse/lighthouseStartView.css +2 -2
- package/front_end/panels/lighthouse/module.json +0 -1
- package/front_end/panels/media/module.json +0 -1
- package/front_end/panels/media/playerListView.css +1 -1
- package/front_end/panels/mobile_throttling/throttlingSettingsTab.css +1 -1
- package/front_end/panels/network/NetworkSearchScope.ts +3 -1
- package/front_end/panels/network/blockedURLsPane.css +1 -1
- package/front_end/panels/network/module.json +0 -1
- package/front_end/panels/network/networkConfigView.css +1 -1
- package/front_end/panels/network/networkLogView.css +3 -3
- package/front_end/panels/profiler/profileLauncherView.css +3 -3
- package/front_end/panels/protocol_monitor/ProtocolMonitor.ts +3 -0
- package/front_end/panels/protocol_monitor/protocol_monitor-meta.ts +0 -2
- package/front_end/panels/security/mainView.css +2 -2
- package/front_end/panels/security/originView.css +1 -1
- package/front_end/panels/sensors/sensors.css +2 -2
- package/front_end/panels/settings/emulation/components/userAgentClientHintsForm.css +1 -1
- package/front_end/panels/settings/emulation/devicesSettingsTab.css +4 -4
- package/front_end/panels/settings/frameworkIgnoreListSettingsTab.css +1 -1
- package/front_end/panels/settings/settingsScreen.css +2 -2
- package/front_end/panels/sources/CoveragePlugin.ts +7 -2
- package/front_end/panels/sources/JavaScriptBreakpointsSidebarPane.ts +14 -17
- package/front_end/panels/sources/callStackSidebarPane.css +1 -1
- package/front_end/panels/sources/dialog.css +1 -1
- package/front_end/panels/sources/javaScriptBreakpointsSidebarPane.css +19 -45
- package/front_end/panels/sources/navigatorTree.css +4 -4
- package/front_end/panels/sources/sources-meta.ts +0 -2
- package/front_end/panels/sources/sourcesPanel.css +2 -2
- package/front_end/panels/sources/threadsSidebarPane.css +1 -1
- package/front_end/panels/timeline/components/WebVitalsTooltip.css +1 -1
- package/front_end/panels/timeline/historyToolbarButton.css +1 -1
- package/front_end/panels/timeline/module.json +0 -1
- package/front_end/panels/timeline/timelineStatusDialog.css +1 -1
- package/front_end/panels/webauthn/webauthnPane.css +2 -2
- package/front_end/third_party/puppeteer/package/CHANGELOG.md +29 -0
- package/front_end/third_party/puppeteer/package/README.md +12 -14
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.js +13 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/BrowserConnector.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.js +25 -7
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Connection.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.js +6 -6
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Coverage.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.d.ts +3 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.js +16 -12
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/DOMWorld.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Dialog.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Dialog.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js +9 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Errors.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/EventEmitter.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.js +8 -8
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/ExecutionContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FileChooser.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FileChooser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.d.ts +21 -9
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.js +155 -72
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/FrameManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.d.ts +5 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.js +32 -29
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPResponse.js +14 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.d.ts +2 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.js +3 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Input.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.js +13 -12
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LifecycleWatcher.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/LifecycleWatcher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.js +2 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/NetworkManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.d.ts +33 -4
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.js +92 -46
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.js +5 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Puppeteer.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.d.ts +3 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.js +3 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Target.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/TaskQueue.d.ts +21 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/TaskQueue.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/TaskQueue.js +30 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/TaskQueue.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Tracing.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/Tracing.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/helper.js +5 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/common/helper.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.js +14 -14
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserFetcher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.js +11 -5
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/BrowserRunner.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/LaunchOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Launcher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Launcher.js +30 -15
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Launcher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/Puppeteer.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node/install.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node-puppeteer-core.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node-puppeteer-core.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/node.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/web.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/cjs/puppeteer/web.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts +2 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.js +9 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.js +22 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Connection.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.d.ts +3 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.js +6 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/DOMWorld.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts +10 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js +7 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Errors.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.d.ts +21 -9
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.js +150 -68
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/FrameManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.d.ts +5 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.js +22 -19
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPRequest.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPResponse.js +15 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.d.ts +2 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.js +2 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Input.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.js +2 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.js +1 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/NetworkManager.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts +33 -4
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.js +69 -23
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.d.ts +3 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.js +3 -2
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/Target.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/TaskQueue.d.ts +21 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/TaskQueue.d.ts.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/TaskQueue.js +26 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/TaskQueue.js.map +1 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/helper.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/common/helper.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserFetcher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.js +7 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/BrowserRunner.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts +4 -0
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/LaunchOptions.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.js +27 -12
- package/front_end/third_party/puppeteer/package/lib/esm/puppeteer/node/Launcher.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +3862 -3771
- package/front_end/third_party/puppeteer/package/package.json +33 -40
- package/front_end/ui/components/adorners/adorner.css +1 -1
- package/front_end/ui/components/data_grid/DataGrid.ts +3 -1
- package/front_end/ui/components/data_grid/DataGridUtils.ts +8 -5
- package/front_end/ui/components/data_grid/dataGrid.css +0 -5
- package/front_end/ui/components/expandable_list/expandableList.css +1 -1
- package/front_end/ui/components/icon_button/iconButton.css +1 -0
- package/front_end/ui/components/linear_memory_inspector/valueInterpreterDisplay.css +1 -2
- package/front_end/ui/components/linear_memory_inspector/valueInterpreterSettings.css +1 -1
- package/front_end/ui/components/report_view/reportKey.css +1 -1
- package/front_end/ui/components/report_view/reportValue.css +1 -1
- package/front_end/ui/components/settings/settingCheckbox.css +1 -1
- package/front_end/ui/legacy/ContextMenu.ts +10 -3
- package/front_end/ui/legacy/ListWidget.ts +2 -4
- package/front_end/ui/legacy/SoftContextMenu.ts +9 -2
- package/front_end/ui/legacy/XLink.ts +6 -6
- package/front_end/ui/legacy/checkboxTextLabel.css +2 -2
- package/front_end/ui/legacy/components/color_picker/spectrum.css +9 -9
- package/front_end/ui/legacy/components/data_grid/dataGrid.css +2 -2
- package/front_end/ui/legacy/components/inline_editor/cssAngleEditor.css +3 -3
- package/front_end/ui/legacy/components/inline_editor/cssLength.css +1 -1
- package/front_end/ui/legacy/components/inline_editor/cssShadowEditor.css +1 -1
- package/front_end/ui/legacy/components/inline_editor/fontEditor.css +1 -1
- package/front_end/ui/legacy/components/object_ui/objectPropertiesSection.css +2 -2
- package/front_end/ui/legacy/components/perf_ui/module.json +1 -3
- package/front_end/ui/legacy/components/quick_open/FilteredListWidget.ts +13 -7
- package/front_end/ui/legacy/components/quick_open/filteredListWidget.css +2 -2
- package/front_end/ui/legacy/components/source_frame/imageView.css +1 -1
- package/front_end/ui/legacy/components/source_frame/module.json +0 -1
- package/front_end/ui/legacy/components/text_editor/cmdevtools.css +6 -14
- package/front_end/ui/legacy/emptyWidget.css +1 -1
- package/front_end/ui/legacy/filter.css +1 -1
- package/front_end/ui/legacy/infobar.css +2 -2
- package/front_end/ui/legacy/inspectorCommon.css +46 -46
- package/front_end/ui/legacy/inspectorSyntaxHighlight.css +4 -4
- package/front_end/ui/legacy/inspectorSyntaxHighlightDark.css +1 -1
- package/front_end/ui/legacy/inspectorViewTabbedPane.css +1 -1
- package/front_end/ui/legacy/searchableView.css +1 -1
- package/front_end/ui/legacy/softContextMenu.css +11 -1
- package/front_end/ui/legacy/tabbedPane.css +5 -0
- package/front_end/ui/legacy/textPrompt.css +1 -1
- package/front_end/ui/legacy/themeColors.css +1 -0
- package/front_end/ui/legacy/toolbar.css +8 -8
- package/front_end/ui/legacy/treeoutline.css +20 -4
- package/front_end/ui/legacy/viewContainers.css +6 -1
- package/inspector_overlay/common.css +2 -2
- package/inspector_overlay/tool_highlight.css +1 -1
- package/inspector_overlay/tool_paused.css +2 -2
- package/package.json +1 -1
- package/scripts/build/ninja/copy-file.js +10 -1
- package/scripts/build/ninja/copy-files.js +10 -1
- package/scripts/eslint_rules/lib/check_test_definitions.js +2 -1
- package/scripts/eslint_rules/lib/es_modules_import.js +21 -20
- package/scripts/eslint_rules/lib/l10n_filename_matches.js +4 -3
- package/scripts/eslint_rules/lib/migrate_create_shadow_root_with_styles.js +2 -2
- package/scripts/eslint_rules/lib/migrate_register_required_css.js +1 -1
- package/scripts/eslint_rules/tests/check_test_definitions_test.js +34 -0
- package/scripts/eslint_rules/tests/es_modules_import_test.js +3 -2
- package/scripts/eslint_rules/tests/migrate_create_shadow_root_with_styles_test.js +1 -1
- package/scripts/eslint_rules/tests/migrate_register_required_css_test.js +1 -1
- package/front_end/entrypoints/inspector_main/module.json +0 -9
- package/front_end/panels/accessibility/module.json +0 -7
- package/front_end/panels/browser_debugger/module.json +0 -7
- package/front_end/panels/console/module.json +0 -6
- package/front_end/panels/coverage/module.json +0 -6
- package/front_end/panels/elements/module.json +0 -6
- package/front_end/panels/protocol_monitor/module.json +0 -6
- package/front_end/panels/sources/module.json +0 -7
|
@@ -13,7 +13,7 @@ for (const file of files.split(',')) {
|
|
|
13
13
|
// is because the file in that location might be a hardlinked file, and
|
|
14
14
|
// overwriting it doesn't change the fact that it's hardlinked.
|
|
15
15
|
const srcContents = fs.readFileSync(srcPath);
|
|
16
|
-
if (
|
|
16
|
+
if (fileExists(destPath)) {
|
|
17
17
|
// Check contents, return early if match
|
|
18
18
|
const destContents = fs.readFileSync(destPath);
|
|
19
19
|
if (srcContents.equals(destContents)) {
|
|
@@ -26,3 +26,12 @@ for (const file of files.split(',')) {
|
|
|
26
26
|
// gen and resources/inspector back to //front_end.
|
|
27
27
|
fs.writeFileSync(destPath, srcContents);
|
|
28
28
|
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Case sensitive implementation of a file look up.
|
|
32
|
+
*/
|
|
33
|
+
function fileExists(filePath) {
|
|
34
|
+
const dir = path.dirname(filePath);
|
|
35
|
+
const files = fs.readdirSync(dir);
|
|
36
|
+
return files.includes(path.basename(filePath));
|
|
37
|
+
}
|
|
@@ -47,7 +47,8 @@ module.exports = {
|
|
|
47
47
|
create: function(context) {
|
|
48
48
|
return {
|
|
49
49
|
MemberExpression(node) {
|
|
50
|
-
if (node.object.name === 'it'
|
|
50
|
+
if ((node.object.name === 'it' || node.object.name === 'describe') &&
|
|
51
|
+
(node.property.name === 'skip' || node.property.name === 'skipOnPlatforms') &&
|
|
51
52
|
node.parent.type === 'CallExpression') {
|
|
52
53
|
const testNameNode = node.property.name === 'skip' ? node.parent.arguments[0] : node.parent.arguments[1];
|
|
53
54
|
|
|
@@ -16,7 +16,7 @@ const INSPECTOR_OVERLAY_DIRECTORY = path.join(__dirname, '..', '..', '..', 'fron
|
|
|
16
16
|
const COMPONENT_DOCS_DIRECTORY = path.join(FRONT_END_DIRECTORY, 'ui', 'components', 'docs');
|
|
17
17
|
|
|
18
18
|
const CROSS_NAMESPACE_MESSAGE =
|
|
19
|
-
'Incorrect cross-namespace import: "{{
|
|
19
|
+
'Incorrect cross-namespace import: "{{importPathForErrorMessage}}". Use "import * as Namespace from \'../namespace/namespace.js\';" instead.';
|
|
20
20
|
|
|
21
21
|
// ------------------------------------------------------------------------------
|
|
22
22
|
// Rule Definition
|
|
@@ -42,7 +42,7 @@ function computeTopLevelFolder(fileName) {
|
|
|
42
42
|
return namespaceName.substring(0, namespaceName.indexOf(path.sep));
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
function checkImportExtension(importPath, context, node) {
|
|
45
|
+
function checkImportExtension(importPath, importPathForErrorMessage, context, node) {
|
|
46
46
|
// import * as fs from 'fs';
|
|
47
47
|
if (!importPath.startsWith('.')) {
|
|
48
48
|
return;
|
|
@@ -51,12 +51,12 @@ function checkImportExtension(importPath, context, node) {
|
|
|
51
51
|
if (!importPath.endsWith('.js') && !importPath.endsWith('.mjs')) {
|
|
52
52
|
context.report({
|
|
53
53
|
node,
|
|
54
|
-
message: 'Missing file extension for import "{{
|
|
54
|
+
message: 'Missing file extension for import "{{importPathForErrorMessage}}"',
|
|
55
55
|
data: {
|
|
56
|
-
|
|
56
|
+
importPathForErrorMessage,
|
|
57
57
|
},
|
|
58
58
|
fix(fixer) {
|
|
59
|
-
return fixer.replaceText(node.source, `'${
|
|
59
|
+
return fixer.replaceText(node.source, `'${importPathForErrorMessage}.js'`);
|
|
60
60
|
}
|
|
61
61
|
});
|
|
62
62
|
}
|
|
@@ -67,7 +67,7 @@ function nodeSpecifiersSpecialImportsOnly(specifiers) {
|
|
|
67
67
|
['ls', 'assertNotNullOrUndefined'].includes(specifiers[0].imported.name);
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
function checkStarImport(context, node, importPath, importingFileName, exportingFileName) {
|
|
70
|
+
function checkStarImport(context, node, importPath, importPathForErrorMessage, importingFileName, exportingFileName) {
|
|
71
71
|
if (isModuleEntrypoint(importingFileName)) {
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
@@ -93,9 +93,9 @@ function checkStarImport(context, node, importPath, importingFileName, exporting
|
|
|
93
93
|
context.report({
|
|
94
94
|
node,
|
|
95
95
|
message:
|
|
96
|
-
'Incorrect same-namespace import: "{{
|
|
96
|
+
'Incorrect same-namespace import: "{{importPathForErrorMessage}}". Use "import { Symbol } from \'./relative-file.js\';" instead.',
|
|
97
97
|
data: {
|
|
98
|
-
|
|
98
|
+
importPathForErrorMessage,
|
|
99
99
|
},
|
|
100
100
|
});
|
|
101
101
|
}
|
|
@@ -104,9 +104,7 @@ function checkStarImport(context, node, importPath, importingFileName, exporting
|
|
|
104
104
|
context.report({
|
|
105
105
|
node,
|
|
106
106
|
message: CROSS_NAMESPACE_MESSAGE,
|
|
107
|
-
data: {
|
|
108
|
-
importPath,
|
|
109
|
-
},
|
|
107
|
+
data: {importPathForErrorMessage},
|
|
110
108
|
});
|
|
111
109
|
}
|
|
112
110
|
}
|
|
@@ -135,12 +133,14 @@ module.exports = {
|
|
|
135
133
|
}
|
|
136
134
|
const importPath = path.normalize(node.source.value);
|
|
137
135
|
|
|
138
|
-
|
|
136
|
+
const importPathForErrorMessage = node.source.value.replace(/\\/g, '/');
|
|
137
|
+
checkImportExtension(importPath, importPathForErrorMessage, context, node);
|
|
139
138
|
},
|
|
140
139
|
ImportDeclaration(node) {
|
|
141
|
-
checkImportExtension(node.source.value, context, node);
|
|
142
|
-
|
|
143
140
|
const importPath = path.normalize(node.source.value);
|
|
141
|
+
const importPathForErrorMessage = node.source.value.replace(/\\/g, '/');
|
|
142
|
+
|
|
143
|
+
checkImportExtension(node.source.value, importPathForErrorMessage, context, node);
|
|
144
144
|
|
|
145
145
|
// Accidental relative URL:
|
|
146
146
|
// import * as Root from 'front_end/root/root.js';
|
|
@@ -173,7 +173,8 @@ module.exports = {
|
|
|
173
173
|
|
|
174
174
|
const exportingFileName = path.resolve(path.dirname(importingFileName), importPath);
|
|
175
175
|
|
|
176
|
-
if (importPath.includes('/front_end/') && !importingFileIsUnitTestFile &&
|
|
176
|
+
if (importPath.replace(/\\/g, '/').includes('/front_end/') && !importingFileIsUnitTestFile &&
|
|
177
|
+
!importingFileIsComponentDocsFile) {
|
|
177
178
|
context.report({
|
|
178
179
|
node,
|
|
179
180
|
message:
|
|
@@ -181,14 +182,14 @@ module.exports = {
|
|
|
181
182
|
});
|
|
182
183
|
}
|
|
183
184
|
|
|
184
|
-
if (
|
|
185
|
+
if (importPathForErrorMessage.endsWith('platform/platform.js') &&
|
|
185
186
|
nodeSpecifiersSpecialImportsOnly(node.specifiers)) {
|
|
186
187
|
/* We allow direct importing of the ls and assertNotNull utility as it's so frequently used. */
|
|
187
188
|
return;
|
|
188
189
|
}
|
|
189
190
|
|
|
190
191
|
if (isStarAsImportSpecifier(node.specifiers)) {
|
|
191
|
-
checkStarImport(context, node, importPath, importingFileName, exportingFileName);
|
|
192
|
+
checkStarImport(context, node, importPath, importPathForErrorMessage, importingFileName, exportingFileName);
|
|
192
193
|
} else {
|
|
193
194
|
if (computeTopLevelFolder(importingFileName) !== computeTopLevelFolder(exportingFileName)) {
|
|
194
195
|
let message = CROSS_NAMESPACE_MESSAGE;
|
|
@@ -206,7 +207,7 @@ module.exports = {
|
|
|
206
207
|
node,
|
|
207
208
|
message,
|
|
208
209
|
data: {
|
|
209
|
-
|
|
210
|
+
importPathForErrorMessage,
|
|
210
211
|
},
|
|
211
212
|
});
|
|
212
213
|
} else if (isModuleEntrypoint(importingFileName)) {
|
|
@@ -222,9 +223,9 @@ module.exports = {
|
|
|
222
223
|
context.report({
|
|
223
224
|
node,
|
|
224
225
|
message:
|
|
225
|
-
'Incorrect same-namespace import: "{{
|
|
226
|
+
'Incorrect same-namespace import: "{{importPathForErrorMessage}}". Use "import * as File from \'./File.js\';" instead.',
|
|
226
227
|
data: {
|
|
227
|
-
|
|
228
|
+
importPathForErrorMessage,
|
|
228
229
|
}
|
|
229
230
|
});
|
|
230
231
|
}
|
|
@@ -64,12 +64,13 @@ module.exports = {
|
|
|
64
64
|
const previousFileLocationArgument = callExpression.arguments[0];
|
|
65
65
|
const actualPath = path.join(FRONT_END_DIRECTORY, previousFileLocationArgument.value);
|
|
66
66
|
if (!allowedPathArguments.includes(actualPath)) {
|
|
67
|
+
const newFileName = currentFileRelativeToFrontEnd.replace(/\\/g, '/');
|
|
67
68
|
context.report({
|
|
68
69
|
node: callExpression,
|
|
69
|
-
message:
|
|
70
|
-
|
|
70
|
+
message:
|
|
71
|
+
`First argument to 'registerUIStrings' call must be '${newFileName}' or the ModuleUIStrings.(js|ts)`,
|
|
71
72
|
fix(fixer) {
|
|
72
|
-
return fixer.replaceText(previousFileLocationArgument, `'${
|
|
73
|
+
return fixer.replaceText(previousFileLocationArgument, `'${newFileName}'`);
|
|
73
74
|
}
|
|
74
75
|
});
|
|
75
76
|
}
|
|
@@ -57,13 +57,13 @@ module.exports = {
|
|
|
57
57
|
const propertyNode = lookForCSSFileProperty(options.properties);
|
|
58
58
|
|
|
59
59
|
if (propertyNode && propertyNode.value.type === 'Literal') {
|
|
60
|
-
const filenameWithExtension = propertyNode.value.value;
|
|
60
|
+
const filenameWithExtension = propertyNode.value.value.replace(/\\/g, '/');
|
|
61
61
|
const filename = path.basename(filenameWithExtension, '.css');
|
|
62
62
|
const newFileName = filename + 'Styles';
|
|
63
63
|
|
|
64
64
|
const importDir = 'front_end/' + path.dirname(filenameWithExtension);
|
|
65
65
|
const fileDir = path.dirname(context.getFilename());
|
|
66
|
-
const relativeImport = path.relative(fileDir, importDir);
|
|
66
|
+
const relativeImport = path.relative(fileDir, importDir).replace(/\\/g, '/');
|
|
67
67
|
const importStatement = relativeImport === '' ?
|
|
68
68
|
`import ${newFileName} from \'./${filename}.css.js\';\n` :
|
|
69
69
|
`import ${newFileName} from \'${relativeImport}/${filename}.css.js\';\n`;
|
|
@@ -106,7 +106,7 @@ module.exports = {
|
|
|
106
106
|
|
|
107
107
|
const importDir = 'front_end/' + path.dirname(filenameWithExtension);
|
|
108
108
|
const fileDir = path.dirname(context.getFilename());
|
|
109
|
-
const relativeImport = path.relative(fileDir, importDir);
|
|
109
|
+
const relativeImport = path.relative(fileDir, importDir).replace(/\\/g, '/');
|
|
110
110
|
const importStatement = relativeImport === '' ?
|
|
111
111
|
`import ${newFileName} from \'./${filename}.css.js\';\n` :
|
|
112
112
|
`import ${newFileName} from \'${relativeImport}/${filename}.css.js\';\n`;
|
|
@@ -62,6 +62,24 @@ ruleTester.run('check_e2e_tests', rule, {
|
|
|
62
62
|
`,
|
|
63
63
|
filename: 'test/e2e/folder/file.ts',
|
|
64
64
|
},
|
|
65
|
+
{
|
|
66
|
+
code: `import {describe, it} from '../../shared/mocha-extensions.js';
|
|
67
|
+
// Explaining comment
|
|
68
|
+
describe.skip('[crbug.com/123456]: e2e-test', async () => {
|
|
69
|
+
});
|
|
70
|
+
`,
|
|
71
|
+
filename: 'test/e2e/folder/file.ts',
|
|
72
|
+
errors: [{message: rule.meta.messages.missingBugId}],
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
code: `import {describe, it} from '../../shared/mocha-extensions.js';
|
|
76
|
+
// Explaining comment
|
|
77
|
+
describe.skipOnPlatforms(['mac'], '[crbug.com/123456]: e2e-test', async () => {
|
|
78
|
+
});
|
|
79
|
+
`,
|
|
80
|
+
filename: 'test/e2e/folder/file.ts',
|
|
81
|
+
errors: [{message: rule.meta.messages.missingBugId}],
|
|
82
|
+
},
|
|
65
83
|
],
|
|
66
84
|
|
|
67
85
|
invalid: [
|
|
@@ -111,5 +129,21 @@ ruleTester.run('check_e2e_tests', rule, {
|
|
|
111
129
|
filename: 'test/e2e/folder/file.ts',
|
|
112
130
|
errors: [{message: rule.meta.messages.extraBugId}],
|
|
113
131
|
},
|
|
132
|
+
{
|
|
133
|
+
code: `import {describe, it} from '../../shared/mocha-extensions.js';
|
|
134
|
+
describe.skip('e2e-test', async () => {
|
|
135
|
+
});
|
|
136
|
+
`,
|
|
137
|
+
filename: 'test/e2e/folder/file.ts',
|
|
138
|
+
errors: [{message: rule.meta.messages.missingBugId}, {message: rule.meta.messages.comment}],
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
code: `import {describe, it} from '../../shared/mocha-extensions.js';
|
|
142
|
+
describe.skipOnPlatforms(['mac'], 'e2e-test', async () => {
|
|
143
|
+
});
|
|
144
|
+
`,
|
|
145
|
+
filename: 'test/e2e/folder/file.ts',
|
|
146
|
+
errors: [{message: rule.meta.messages.missingBugId}, {message: rule.meta.messages.comment}],
|
|
147
|
+
},
|
|
114
148
|
]
|
|
115
149
|
});
|
|
@@ -155,7 +155,8 @@ ruleTester.run('es_modules_import', rule, {
|
|
|
155
155
|
code: 'import { Exporting } from \'./Exporting.js\';',
|
|
156
156
|
filename: 'front_end/common/common.js',
|
|
157
157
|
errors: [{
|
|
158
|
-
message:
|
|
158
|
+
message:
|
|
159
|
+
'Incorrect same-namespace import: "./Exporting.js". Use "import * as File from \'./File.js\';" instead.'
|
|
159
160
|
}],
|
|
160
161
|
},
|
|
161
162
|
{
|
|
@@ -220,7 +221,7 @@ ruleTester.run('es_modules_import', rule, {
|
|
|
220
221
|
filename: 'front_end/some_folder/nested_entrypoint/nested_entrypoint.js',
|
|
221
222
|
errors: [{
|
|
222
223
|
message:
|
|
223
|
-
'Incorrect same-namespace import: "append-style.js". Use "import * as File from \'./File.js\';" instead.'
|
|
224
|
+
'Incorrect same-namespace import: "./append-style.js". Use "import * as File from \'./File.js\';" instead.'
|
|
224
225
|
}]
|
|
225
226
|
},
|
|
226
227
|
{
|
|
@@ -12,7 +12,7 @@ const ruleTester = new (require('eslint').RuleTester)({
|
|
|
12
12
|
|
|
13
13
|
const MIGRATION_ERROR_MESSAGE = 'Import CSS file instead of passing a string into createShadowRootWithStyles';
|
|
14
14
|
const MANUALLY_MIGRATE_ERROR_ESSAGE =
|
|
15
|
-
'Please manually migrate this file. Got error: Cannot read
|
|
15
|
+
'Please manually migrate this file. Got error: Cannot read properties of undefined (reading \'properties\')';
|
|
16
16
|
|
|
17
17
|
ruleTester.run('check_migrate_RegisterRequiredCSS', rule, {
|
|
18
18
|
valid: [
|
|
@@ -15,7 +15,7 @@ const ADD_WAS_SHOW_EXPECTED_ERROR_MESSAGE =
|
|
|
15
15
|
const EDIT_WAS_SHOW_EXPECTED_ERROR_MESSAGE =
|
|
16
16
|
'Import CSS file instead of using registerRequiredCSS and edit wasShown method';
|
|
17
17
|
const MANUALLY_MIGRATE_ERROR_ESSAGE =
|
|
18
|
-
'Please manually migrate components/test.css as it has edge cases not covered by this script. Got error: Cannot read
|
|
18
|
+
'Please manually migrate components/test.css as it has edge cases not covered by this script. Got error: Cannot read properties of undefined (reading \'range\').';
|
|
19
19
|
|
|
20
20
|
ruleTester.run('check_migrate_RegisterRequiredCSS', rule, {
|
|
21
21
|
valid: [
|