chrome-devtools-frontend
Version:
Chrome DevTools UI
41 lines (30 loc) • 1.66 kB
Markdown
# Core SDK
The **Core SDK** (`front_end/core/sdk/`) is DevTools' foundational data access layer wrapping the [Chrome DevTools Protocol (CDP)](https://chromedevtools.github.io/devtools-protocol/). It creates typed data access objects and models for CDP structures, abstracting away low-level JSON-RPC commands and events into developer-friendly APIs.
---
## Architectural Principles
### 1. Single CDP Domain Responsibility
Each SDK model and data object encapsulates data and operations from a **single CDP domain** (e.g., `DOM`, `CSS`, `Network`, `Debugger`, `Audits`).
### 2. Cross-Domain Separation (What to Avoid)
Data from multiple CDP domains must be joined **outside** of `core/sdk`, typically in `front_end/models/` (such as `models/bindings/`, `models/issues_manager/`, or `models/trace/`).
#### ❌ Anti-pattern: Cross-domain getters on SDK objects
Do **not** add methods or getters to an SDK data object that fetch or resolve data from another CDP domain.
```ts
// ❌ BAD: DOMNode (DOM domain) must not reference Network or Audits domains directly.
class DOMNode {
// Violates single-domain boundary:
getNetworkRequest(): SDK.NetworkRequest.NetworkRequest|null {
// ...
}
// Violates single-domain boundary:
getIssues(): IssuesModel.Issue[] {
// ...
}
}
```
#### ✅ Best Practice: Aggregate in `models/`
Keep `DOMNode` strictly focused on the DOM domain, and correlate cross-domain data in a higher-level model or service:
```ts
// ✅ GOOD: A higher-level model in models/ joins DOM and Audits/Network data.
// In front_end/models/issues_manager/ or similar:
const issues = issuesManager.issuesForNode(domNode);
```