e2e-pilot 0.0.69
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/bin.js +3 -0
- package/dist/aria-snapshot.d.ts +95 -0
- package/dist/aria-snapshot.d.ts.map +1 -0
- package/dist/aria-snapshot.js +490 -0
- package/dist/aria-snapshot.js.map +1 -0
- package/dist/bippy.js +971 -0
- package/dist/cdp-relay.d.ts +16 -0
- package/dist/cdp-relay.d.ts.map +1 -0
- package/dist/cdp-relay.js +715 -0
- package/dist/cdp-relay.js.map +1 -0
- package/dist/cdp-session.d.ts +42 -0
- package/dist/cdp-session.d.ts.map +1 -0
- package/dist/cdp-session.js +154 -0
- package/dist/cdp-session.js.map +1 -0
- package/dist/cdp-types.d.ts +63 -0
- package/dist/cdp-types.d.ts.map +1 -0
- package/dist/cdp-types.js +91 -0
- package/dist/cdp-types.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +213 -0
- package/dist/cli.js.map +1 -0
- package/dist/create-logger.d.ts +9 -0
- package/dist/create-logger.d.ts.map +1 -0
- package/dist/create-logger.js +25 -0
- package/dist/create-logger.js.map +1 -0
- package/dist/debugger-api.md +458 -0
- package/dist/debugger-examples-types.d.ts +24 -0
- package/dist/debugger-examples-types.d.ts.map +1 -0
- package/dist/debugger-examples-types.js +2 -0
- package/dist/debugger-examples-types.js.map +1 -0
- package/dist/debugger-examples.d.ts +6 -0
- package/dist/debugger-examples.d.ts.map +1 -0
- package/dist/debugger-examples.js +53 -0
- package/dist/debugger-examples.js.map +1 -0
- package/dist/debugger.d.ts +381 -0
- package/dist/debugger.d.ts.map +1 -0
- package/dist/debugger.js +633 -0
- package/dist/debugger.js.map +1 -0
- package/dist/editor-api.md +364 -0
- package/dist/editor-examples.d.ts +11 -0
- package/dist/editor-examples.d.ts.map +1 -0
- package/dist/editor-examples.js +124 -0
- package/dist/editor-examples.js.map +1 -0
- package/dist/editor.d.ts +203 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +336 -0
- package/dist/editor.js.map +1 -0
- package/dist/execute.d.ts +50 -0
- package/dist/execute.d.ts.map +1 -0
- package/dist/execute.js +576 -0
- package/dist/execute.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-client.d.ts +20 -0
- package/dist/mcp-client.d.ts.map +1 -0
- package/dist/mcp-client.js +56 -0
- package/dist/mcp-client.js.map +1 -0
- package/dist/mcp.d.ts +5 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +720 -0
- package/dist/mcp.js.map +1 -0
- package/dist/mcp.test.d.ts +10 -0
- package/dist/mcp.test.d.ts.map +1 -0
- package/dist/mcp.test.js +2999 -0
- package/dist/mcp.test.js.map +1 -0
- package/dist/network-capture.d.ts +23 -0
- package/dist/network-capture.d.ts.map +1 -0
- package/dist/network-capture.js +98 -0
- package/dist/network-capture.js.map +1 -0
- package/dist/protocol.d.ts +54 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +2 -0
- package/dist/protocol.js.map +1 -0
- package/dist/react-source.d.ts +13 -0
- package/dist/react-source.d.ts.map +1 -0
- package/dist/react-source.js +68 -0
- package/dist/react-source.js.map +1 -0
- package/dist/scoped-fs.d.ts +94 -0
- package/dist/scoped-fs.d.ts.map +1 -0
- package/dist/scoped-fs.js +356 -0
- package/dist/scoped-fs.js.map +1 -0
- package/dist/selector-generator.js +8126 -0
- package/dist/start-relay-server.d.ts +6 -0
- package/dist/start-relay-server.d.ts.map +1 -0
- package/dist/start-relay-server.js +33 -0
- package/dist/start-relay-server.js.map +1 -0
- package/dist/styles-api.md +117 -0
- package/dist/styles-examples.d.ts +8 -0
- package/dist/styles-examples.d.ts.map +1 -0
- package/dist/styles-examples.js +64 -0
- package/dist/styles-examples.js.map +1 -0
- package/dist/styles.d.ts +27 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +234 -0
- package/dist/styles.js.map +1 -0
- package/dist/trace-utils.d.ts +14 -0
- package/dist/trace-utils.d.ts.map +1 -0
- package/dist/trace-utils.js +21 -0
- package/dist/trace-utils.js.map +1 -0
- package/dist/utils.d.ts +20 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +75 -0
- package/dist/utils.js.map +1 -0
- package/dist/wait-for-page-load.d.ts +16 -0
- package/dist/wait-for-page-load.d.ts.map +1 -0
- package/dist/wait-for-page-load.js +127 -0
- package/dist/wait-for-page-load.js.map +1 -0
- package/package.json +67 -0
- package/src/aria-snapshot.ts +610 -0
- package/src/assets/aria-labels-github-snapshot.txt +605 -0
- package/src/assets/aria-labels-github.png +0 -0
- package/src/assets/aria-labels-google-snapshot.txt +49 -0
- package/src/assets/aria-labels-google.png +0 -0
- package/src/assets/aria-labels-hacker-news-snapshot.txt +1023 -0
- package/src/assets/aria-labels-hacker-news.png +0 -0
- package/src/cdp-relay.ts +925 -0
- package/src/cdp-session.ts +203 -0
- package/src/cdp-timing.md +128 -0
- package/src/cdp-types.ts +155 -0
- package/src/cli.ts +250 -0
- package/src/create-logger.ts +36 -0
- package/src/debugger-examples-types.ts +13 -0
- package/src/debugger-examples.ts +66 -0
- package/src/debugger.md +453 -0
- package/src/debugger.ts +713 -0
- package/src/editor-examples.ts +148 -0
- package/src/editor.ts +390 -0
- package/src/execute.ts +763 -0
- package/src/index.ts +10 -0
- package/src/mcp-client.ts +78 -0
- package/src/mcp.test.ts +3596 -0
- package/src/mcp.ts +876 -0
- package/src/network-capture.ts +140 -0
- package/src/prompt.bak.md +323 -0
- package/src/prompt.md +7 -0
- package/src/protocol.ts +63 -0
- package/src/react-source.ts +94 -0
- package/src/resource.md +436 -0
- package/src/scoped-fs.ts +411 -0
- package/src/snapshots/hacker-news-focused-accessibility.md +202 -0
- package/src/snapshots/hacker-news-initial-accessibility.md +11 -0
- package/src/snapshots/hacker-news-tabbed-accessibility.md +202 -0
- package/src/snapshots/shadcn-ui-accessibility.md +11 -0
- package/src/start-relay-server.ts +43 -0
- package/src/styles-examples.ts +77 -0
- package/src/styles.ts +345 -0
- package/src/trace-utils.ts +43 -0
- package/src/utils.ts +91 -0
- package/src/wait-for-page-load.ts +174 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-relay-server.d.ts","sourceRoot":"","sources":["../src/start-relay-server.ts"],"names":[],"mappings":"AAsBA,wBAAsB,WAAW,CAAC,EAAE,IAAY,EAAE,IAAkB,EAAE,KAAK,EAAE,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,iDAmBnI"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { startE2EPilotCDPRelayServer } from './cdp-relay.js';
|
|
2
|
+
import { createFileLogger } from './create-logger.js';
|
|
3
|
+
process.title = 'e2e-pilot-ws-server';
|
|
4
|
+
const logger = createFileLogger();
|
|
5
|
+
process.on('uncaughtException', async (err) => {
|
|
6
|
+
await logger.error('Uncaught Exception:', err);
|
|
7
|
+
process.exit(1);
|
|
8
|
+
});
|
|
9
|
+
process.on('unhandledRejection', async (reason) => {
|
|
10
|
+
await logger.error('Unhandled Rejection:', reason);
|
|
11
|
+
process.exit(1);
|
|
12
|
+
});
|
|
13
|
+
process.on('exit', async (code) => {
|
|
14
|
+
await logger.log(`Process exiting with code: ${code}`);
|
|
15
|
+
});
|
|
16
|
+
export async function startServer({ port = 19988, host = '127.0.0.1', token } = {}) {
|
|
17
|
+
const server = await startE2EPilotCDPRelayServer({ port, host, token, logger });
|
|
18
|
+
console.log('CDP Relay Server running. Press Ctrl+C to stop.');
|
|
19
|
+
console.log('Logs are being written to:', logger.logFilePath);
|
|
20
|
+
process.on('SIGINT', () => {
|
|
21
|
+
console.log('\nShutting down...');
|
|
22
|
+
server.close();
|
|
23
|
+
process.exit(0);
|
|
24
|
+
});
|
|
25
|
+
process.on('SIGTERM', () => {
|
|
26
|
+
console.log('\nShutting down...');
|
|
27
|
+
server.close();
|
|
28
|
+
process.exit(0);
|
|
29
|
+
});
|
|
30
|
+
return server;
|
|
31
|
+
}
|
|
32
|
+
startServer().catch(logger.error);
|
|
33
|
+
//# sourceMappingURL=start-relay-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-relay-server.js","sourceRoot":"","sources":["../src/start-relay-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAA;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,OAAO,CAAC,KAAK,GAAG,qBAAqB,CAAA;AAErC,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAA;AAEjC,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;IAC5C,MAAM,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAChD,MAAM,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;IACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAChC,MAAM,MAAM,CAAC,GAAG,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC;AAGH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAE,IAAI,GAAG,KAAK,EAAE,IAAI,GAAG,WAAW,EAAE,KAAK,KAAuD,EAAE;IAClI,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;IAE/E,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;IAC9D,OAAO,CAAC,GAAG,CAAC,4BAA4B,EAAE,MAAM,CAAC,WAAW,CAAC,CAAA;IAE7D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACxB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;QACjC,MAAM,CAAC,KAAK,EAAE,CAAA;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACzB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAA;QACjC,MAAM,CAAC,KAAK,EAAE,CAAA;QACd,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC;AACD,WAAW,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Styles API Reference
|
|
2
|
+
|
|
3
|
+
The getStylesForLocator function inspects CSS styles applied to an element, similar to browser DevTools "Styles" panel.
|
|
4
|
+
|
|
5
|
+
## Types
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import type { ICDPSession } from './cdp-session.js';
|
|
9
|
+
import type { Locator } from 'playwright-core';
|
|
10
|
+
export interface StyleSource {
|
|
11
|
+
url: string;
|
|
12
|
+
line: number;
|
|
13
|
+
column: number;
|
|
14
|
+
}
|
|
15
|
+
export type StyleDeclarations = Record<string, string>;
|
|
16
|
+
export interface StyleRule {
|
|
17
|
+
selector: string;
|
|
18
|
+
source: StyleSource | null;
|
|
19
|
+
origin: 'regular' | 'user-agent' | 'injected' | 'inspector';
|
|
20
|
+
declarations: StyleDeclarations;
|
|
21
|
+
inheritedFrom: string | null;
|
|
22
|
+
}
|
|
23
|
+
export interface StylesResult {
|
|
24
|
+
element: string;
|
|
25
|
+
inlineStyle: StyleDeclarations | null;
|
|
26
|
+
rules: StyleRule[];
|
|
27
|
+
}
|
|
28
|
+
export declare function getStylesForLocator({ locator, cdp: cdpSession, includeUserAgentStyles, }: {
|
|
29
|
+
locator: Locator;
|
|
30
|
+
cdp: ICDPSession;
|
|
31
|
+
includeUserAgentStyles?: boolean;
|
|
32
|
+
}): Promise<StylesResult>;
|
|
33
|
+
export declare function formatStylesAsText(styles: StylesResult): string;
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Examples
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
import { page, getStylesForLocator, formatStylesAsText, console } from './debugger-examples-types.js'
|
|
40
|
+
|
|
41
|
+
// Example: Get styles for an element and display them
|
|
42
|
+
async function getElementStyles() {
|
|
43
|
+
const loc = page.locator('.my-button')
|
|
44
|
+
const styles = await getStylesForLocator({ locator: loc })
|
|
45
|
+
console.log(formatStylesAsText(styles))
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Example: Inspect computed styles for a specific element
|
|
49
|
+
async function inspectButtonStyles() {
|
|
50
|
+
const button = page.getByRole('button', { name: 'Submit' })
|
|
51
|
+
const styles = await getStylesForLocator({ locator: button })
|
|
52
|
+
|
|
53
|
+
console.log('Element:', styles.element)
|
|
54
|
+
|
|
55
|
+
if (styles.inlineStyle) {
|
|
56
|
+
console.log('Inline styles:', styles.inlineStyle)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
for (const rule of styles.rules) {
|
|
60
|
+
console.log(`${rule.selector}: ${JSON.stringify(rule.declarations)}`)
|
|
61
|
+
if (rule.source) {
|
|
62
|
+
console.log(` Source: ${rule.source.url}:${rule.source.line}`)
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Example: Include browser default (user-agent) styles
|
|
68
|
+
async function getStylesWithUserAgent() {
|
|
69
|
+
const loc = page.locator('input[type="text"]')
|
|
70
|
+
const styles = await getStylesForLocator({
|
|
71
|
+
locator: loc,
|
|
72
|
+
includeUserAgentStyles: true,
|
|
73
|
+
})
|
|
74
|
+
console.log(formatStylesAsText(styles))
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Example: Find where a CSS property is defined
|
|
78
|
+
async function findPropertySource() {
|
|
79
|
+
const loc = page.locator('.card')
|
|
80
|
+
const styles = await getStylesForLocator({ locator: loc })
|
|
81
|
+
|
|
82
|
+
const backgroundRule = styles.rules.find((r) => 'background-color' in r.declarations)
|
|
83
|
+
if (backgroundRule) {
|
|
84
|
+
console.log('background-color defined by:', backgroundRule.selector)
|
|
85
|
+
if (backgroundRule.source) {
|
|
86
|
+
console.log(` at ${backgroundRule.source.url}:${backgroundRule.source.line}`)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Example: Check inherited styles
|
|
92
|
+
async function checkInheritedStyles() {
|
|
93
|
+
const loc = page.locator('.nested-text')
|
|
94
|
+
const styles = await getStylesForLocator({ locator: loc })
|
|
95
|
+
|
|
96
|
+
const inheritedRules = styles.rules.filter((r) => r.inheritedFrom)
|
|
97
|
+
for (const rule of inheritedRules) {
|
|
98
|
+
console.log(`Inherited from ${rule.inheritedFrom}: ${rule.selector}`)
|
|
99
|
+
console.log(' Properties:', rule.declarations)
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Example: Compare styles between two elements
|
|
104
|
+
async function compareStyles() {
|
|
105
|
+
const primary = await getStylesForLocator({ locator: page.locator('.btn-primary') })
|
|
106
|
+
const secondary = await getStylesForLocator({ locator: page.locator('.btn-secondary') })
|
|
107
|
+
|
|
108
|
+
console.log('Primary button:')
|
|
109
|
+
console.log(formatStylesAsText(primary))
|
|
110
|
+
|
|
111
|
+
console.log('Secondary button:')
|
|
112
|
+
console.log(formatStylesAsText(secondary))
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export { getElementStyles, inspectButtonStyles, getStylesWithUserAgent, findPropertySource, checkInheritedStyles, compareStyles }
|
|
116
|
+
|
|
117
|
+
```
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
declare function getElementStyles(): Promise<void>;
|
|
2
|
+
declare function inspectButtonStyles(): Promise<void>;
|
|
3
|
+
declare function getStylesWithUserAgent(): Promise<void>;
|
|
4
|
+
declare function findPropertySource(): Promise<void>;
|
|
5
|
+
declare function checkInheritedStyles(): Promise<void>;
|
|
6
|
+
declare function compareStyles(): Promise<void>;
|
|
7
|
+
export { getElementStyles, inspectButtonStyles, getStylesWithUserAgent, findPropertySource, checkInheritedStyles, compareStyles };
|
|
8
|
+
//# sourceMappingURL=styles-examples.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles-examples.d.ts","sourceRoot":"","sources":["../src/styles-examples.ts"],"names":[],"mappings":"AAGA,iBAAe,gBAAgB,kBAI9B;AAGD,iBAAe,mBAAmB,kBAgBjC;AAGD,iBAAe,sBAAsB,kBAOpC;AAGD,iBAAe,kBAAkB,kBAWhC;AAGD,iBAAe,oBAAoB,kBASlC;AAGD,iBAAe,aAAa,kBAS3B;AAED,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { page, getStylesForLocator, formatStylesAsText, console } from './debugger-examples-types.js';
|
|
2
|
+
// Example: Get styles for an element and display them
|
|
3
|
+
async function getElementStyles() {
|
|
4
|
+
const loc = page.locator('.my-button');
|
|
5
|
+
const styles = await getStylesForLocator({ locator: loc });
|
|
6
|
+
console.log(formatStylesAsText(styles));
|
|
7
|
+
}
|
|
8
|
+
// Example: Inspect computed styles for a specific element
|
|
9
|
+
async function inspectButtonStyles() {
|
|
10
|
+
const button = page.getByRole('button', { name: 'Submit' });
|
|
11
|
+
const styles = await getStylesForLocator({ locator: button });
|
|
12
|
+
console.log('Element:', styles.element);
|
|
13
|
+
if (styles.inlineStyle) {
|
|
14
|
+
console.log('Inline styles:', styles.inlineStyle);
|
|
15
|
+
}
|
|
16
|
+
for (const rule of styles.rules) {
|
|
17
|
+
console.log(`${rule.selector}: ${JSON.stringify(rule.declarations)}`);
|
|
18
|
+
if (rule.source) {
|
|
19
|
+
console.log(` Source: ${rule.source.url}:${rule.source.line}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
// Example: Include browser default (user-agent) styles
|
|
24
|
+
async function getStylesWithUserAgent() {
|
|
25
|
+
const loc = page.locator('input[type="text"]');
|
|
26
|
+
const styles = await getStylesForLocator({
|
|
27
|
+
locator: loc,
|
|
28
|
+
includeUserAgentStyles: true,
|
|
29
|
+
});
|
|
30
|
+
console.log(formatStylesAsText(styles));
|
|
31
|
+
}
|
|
32
|
+
// Example: Find where a CSS property is defined
|
|
33
|
+
async function findPropertySource() {
|
|
34
|
+
const loc = page.locator('.card');
|
|
35
|
+
const styles = await getStylesForLocator({ locator: loc });
|
|
36
|
+
const backgroundRule = styles.rules.find((r) => 'background-color' in r.declarations);
|
|
37
|
+
if (backgroundRule) {
|
|
38
|
+
console.log('background-color defined by:', backgroundRule.selector);
|
|
39
|
+
if (backgroundRule.source) {
|
|
40
|
+
console.log(` at ${backgroundRule.source.url}:${backgroundRule.source.line}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// Example: Check inherited styles
|
|
45
|
+
async function checkInheritedStyles() {
|
|
46
|
+
const loc = page.locator('.nested-text');
|
|
47
|
+
const styles = await getStylesForLocator({ locator: loc });
|
|
48
|
+
const inheritedRules = styles.rules.filter((r) => r.inheritedFrom);
|
|
49
|
+
for (const rule of inheritedRules) {
|
|
50
|
+
console.log(`Inherited from ${rule.inheritedFrom}: ${rule.selector}`);
|
|
51
|
+
console.log(' Properties:', rule.declarations);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Example: Compare styles between two elements
|
|
55
|
+
async function compareStyles() {
|
|
56
|
+
const primary = await getStylesForLocator({ locator: page.locator('.btn-primary') });
|
|
57
|
+
const secondary = await getStylesForLocator({ locator: page.locator('.btn-secondary') });
|
|
58
|
+
console.log('Primary button:');
|
|
59
|
+
console.log(formatStylesAsText(primary));
|
|
60
|
+
console.log('Secondary button:');
|
|
61
|
+
console.log(formatStylesAsText(secondary));
|
|
62
|
+
}
|
|
63
|
+
export { getElementStyles, inspectButtonStyles, getStylesWithUserAgent, findPropertySource, checkInheritedStyles, compareStyles };
|
|
64
|
+
//# sourceMappingURL=styles-examples.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles-examples.js","sourceRoot":"","sources":["../src/styles-examples.ts"],"names":[],"mappings":"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"}
|
package/dist/styles.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ICDPSession } from './cdp-session.js';
|
|
2
|
+
import type { Locator } from 'playwright-core';
|
|
3
|
+
export interface StyleSource {
|
|
4
|
+
url: string;
|
|
5
|
+
line: number;
|
|
6
|
+
column: number;
|
|
7
|
+
}
|
|
8
|
+
export type StyleDeclarations = Record<string, string>;
|
|
9
|
+
export interface StyleRule {
|
|
10
|
+
selector: string;
|
|
11
|
+
source: StyleSource | null;
|
|
12
|
+
origin: 'regular' | 'user-agent' | 'injected' | 'inspector';
|
|
13
|
+
declarations: StyleDeclarations;
|
|
14
|
+
inheritedFrom: string | null;
|
|
15
|
+
}
|
|
16
|
+
export interface StylesResult {
|
|
17
|
+
element: string;
|
|
18
|
+
inlineStyle: StyleDeclarations | null;
|
|
19
|
+
rules: StyleRule[];
|
|
20
|
+
}
|
|
21
|
+
export declare function getStylesForLocator({ locator, cdp: cdpSession, includeUserAgentStyles, }: {
|
|
22
|
+
locator: Locator;
|
|
23
|
+
cdp: ICDPSession;
|
|
24
|
+
includeUserAgentStyles?: boolean;
|
|
25
|
+
}): Promise<StylesResult>;
|
|
26
|
+
export declare function formatStylesAsText(styles: StylesResult): string;
|
|
27
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,kBAAkB,CAAA;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEtD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;IAC1B,MAAM,EAAE,SAAS,GAAG,YAAY,GAAG,UAAU,GAAG,WAAW,CAAA;IAC3D,YAAY,EAAE,iBAAiB,CAAA;IAC/B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACrC,KAAK,EAAE,SAAS,EAAE,CAAA;CACnB;AA2CD,wBAAsB,mBAAmB,CAAC,EACxC,OAAO,EACP,GAAG,EAAE,UAAU,EACf,sBAA8B,GAC/B,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,WAAW,CAAA;IAChB,sBAAsB,CAAC,EAAE,OAAO,CAAA;CACjC,GAAG,OAAO,CAAC,YAAY,CAAC,CAkKxB;AA+CD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CA6D/D"}
|
package/dist/styles.js
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
export async function getStylesForLocator({ locator, cdp: cdpSession, includeUserAgentStyles = false, }) {
|
|
2
|
+
// Cast to CDPSession for internal type safety - at runtime both are compatible
|
|
3
|
+
const cdp = cdpSession;
|
|
4
|
+
await cdp.send('DOM.enable');
|
|
5
|
+
await cdp.send('CSS.enable');
|
|
6
|
+
const elementHandle = await locator.elementHandle();
|
|
7
|
+
if (!elementHandle) {
|
|
8
|
+
throw new Error('Could not get element handle from locator');
|
|
9
|
+
}
|
|
10
|
+
const remoteObject = elementHandle._channel?.objectId
|
|
11
|
+
? { objectId: elementHandle._channel.objectId }
|
|
12
|
+
: null;
|
|
13
|
+
let backendNodeId;
|
|
14
|
+
if (remoteObject?.objectId) {
|
|
15
|
+
const nodeInfo = await cdp.send('DOM.describeNode', {
|
|
16
|
+
objectId: remoteObject.objectId,
|
|
17
|
+
});
|
|
18
|
+
backendNodeId = nodeInfo.node.backendNodeId;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const box = await elementHandle.boundingBox();
|
|
22
|
+
if (!box) {
|
|
23
|
+
throw new Error('Element has no bounding box');
|
|
24
|
+
}
|
|
25
|
+
const docResult = await cdp.send('DOM.getDocument', { depth: 0 });
|
|
26
|
+
const nodeAtPoint = await cdp.send('DOM.getNodeForLocation', {
|
|
27
|
+
x: Math.round(box.x + box.width / 2),
|
|
28
|
+
y: Math.round(box.y + box.height / 2),
|
|
29
|
+
});
|
|
30
|
+
backendNodeId = nodeAtPoint.backendNodeId;
|
|
31
|
+
}
|
|
32
|
+
const pushResult = await cdp.send('DOM.pushNodesByBackendIdsToFrontend', {
|
|
33
|
+
backendNodeIds: [backendNodeId],
|
|
34
|
+
});
|
|
35
|
+
const nodeId = pushResult.nodeIds[0];
|
|
36
|
+
if (!nodeId) {
|
|
37
|
+
throw new Error('Could not get nodeId for element');
|
|
38
|
+
}
|
|
39
|
+
const nodeInfo = await cdp.send('DOM.describeNode', { nodeId });
|
|
40
|
+
const elementDescription = formatElementDescription(nodeInfo.node);
|
|
41
|
+
const matchedStyles = await cdp.send('CSS.getMatchedStylesForNode', { nodeId });
|
|
42
|
+
const stylesheetUrls = new Map();
|
|
43
|
+
const processStyleSheetId = async (styleSheetId) => {
|
|
44
|
+
if (!styleSheetId) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
if (!stylesheetUrls.has(styleSheetId)) {
|
|
48
|
+
try {
|
|
49
|
+
const header = await cdp.send('CSS.getStyleSheetText', { styleSheetId });
|
|
50
|
+
stylesheetUrls.set(styleSheetId, '');
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
stylesheetUrls.set(styleSheetId, '');
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return null;
|
|
57
|
+
};
|
|
58
|
+
const rules = [];
|
|
59
|
+
if (matchedStyles.matchedCSSRules) {
|
|
60
|
+
for (const ruleMatch of matchedStyles.matchedCSSRules) {
|
|
61
|
+
const rule = ruleMatch.rule;
|
|
62
|
+
const sourceRange = rule.selectorList?.range;
|
|
63
|
+
const styleSheetId = rule.styleSheetId;
|
|
64
|
+
let source = null;
|
|
65
|
+
if (styleSheetId && sourceRange) {
|
|
66
|
+
const styleSheet = matchedStyles.cssStyleSheetHeaders?.find((h) => h.styleSheetId === styleSheetId);
|
|
67
|
+
const url = styleSheet?.sourceURL || rule.origin === 'user-agent' ? 'user-agent' : `stylesheet:${styleSheetId}`;
|
|
68
|
+
source = {
|
|
69
|
+
url: rule.styleSheetId ? await getStylesheetUrl(cdp, styleSheetId) : 'user-agent',
|
|
70
|
+
line: sourceRange.startLine + 1,
|
|
71
|
+
column: sourceRange.startColumn,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
rules.push({
|
|
75
|
+
selector: rule.selectorList.text,
|
|
76
|
+
source,
|
|
77
|
+
origin: rule.origin,
|
|
78
|
+
declarations: extractDeclarations(rule.style),
|
|
79
|
+
inheritedFrom: null,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (matchedStyles.inherited) {
|
|
84
|
+
for (let i = 0; i < matchedStyles.inherited.length; i++) {
|
|
85
|
+
const inheritedEntry = matchedStyles.inherited[i];
|
|
86
|
+
const ancestorDesc = `ancestor[${i + 1}]`;
|
|
87
|
+
if (inheritedEntry.inlineStyle) {
|
|
88
|
+
const declarations = extractDeclarations(inheritedEntry.inlineStyle);
|
|
89
|
+
if (Object.keys(declarations).length > 0) {
|
|
90
|
+
rules.push({
|
|
91
|
+
selector: 'element.style',
|
|
92
|
+
source: null,
|
|
93
|
+
origin: 'regular',
|
|
94
|
+
declarations,
|
|
95
|
+
inheritedFrom: ancestorDesc,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
for (const ruleMatch of inheritedEntry.matchedCSSRules) {
|
|
100
|
+
const rule = ruleMatch.rule;
|
|
101
|
+
const sourceRange = rule.selectorList?.range;
|
|
102
|
+
const styleSheetId = rule.styleSheetId;
|
|
103
|
+
let source = null;
|
|
104
|
+
if (styleSheetId && sourceRange) {
|
|
105
|
+
source = {
|
|
106
|
+
url: await getStylesheetUrl(cdp, styleSheetId),
|
|
107
|
+
line: sourceRange.startLine + 1,
|
|
108
|
+
column: sourceRange.startColumn,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const declarations = extractDeclarations(rule.style);
|
|
112
|
+
if (Object.keys(declarations).length > 0) {
|
|
113
|
+
rules.push({
|
|
114
|
+
selector: rule.selectorList.text,
|
|
115
|
+
source,
|
|
116
|
+
origin: rule.origin,
|
|
117
|
+
declarations,
|
|
118
|
+
inheritedFrom: ancestorDesc,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
let inlineStyle = null;
|
|
125
|
+
if (matchedStyles.inlineStyle) {
|
|
126
|
+
const declarations = extractDeclarations(matchedStyles.inlineStyle);
|
|
127
|
+
if (Object.keys(declarations).length > 0) {
|
|
128
|
+
inlineStyle = declarations;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const filteredRules = includeUserAgentStyles
|
|
132
|
+
? rules
|
|
133
|
+
: rules.filter((r) => r.origin !== 'user-agent');
|
|
134
|
+
return {
|
|
135
|
+
element: elementDescription,
|
|
136
|
+
inlineStyle,
|
|
137
|
+
rules: filteredRules,
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
function extractDeclarations(style) {
|
|
141
|
+
if (!style?.cssProperties) {
|
|
142
|
+
return {};
|
|
143
|
+
}
|
|
144
|
+
const result = {};
|
|
145
|
+
for (const prop of style.cssProperties) {
|
|
146
|
+
if (!prop.value || prop.value === 'initial' || prop.name.startsWith('-webkit-')) {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const value = prop.important ? `${prop.value} !important` : prop.value;
|
|
150
|
+
result[prop.name] = value;
|
|
151
|
+
}
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
function formatElementDescription(node) {
|
|
155
|
+
let desc = node.localName || node.nodeName?.toLowerCase() || 'element';
|
|
156
|
+
if (node.attributes) {
|
|
157
|
+
const attrs = {};
|
|
158
|
+
for (let i = 0; i < node.attributes.length; i += 2) {
|
|
159
|
+
attrs[node.attributes[i]] = node.attributes[i + 1];
|
|
160
|
+
}
|
|
161
|
+
if (attrs.id) {
|
|
162
|
+
desc += `#${attrs.id}`;
|
|
163
|
+
}
|
|
164
|
+
if (attrs.class) {
|
|
165
|
+
desc += `.${attrs.class.split(' ').join('.')}`;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return desc;
|
|
169
|
+
}
|
|
170
|
+
async function getStylesheetUrl(cdp, styleSheetId) {
|
|
171
|
+
try {
|
|
172
|
+
await cdp.send('CSS.getStyleSheetText', { styleSheetId });
|
|
173
|
+
return `stylesheet:${styleSheetId}`;
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
return `stylesheet:${styleSheetId}`;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
export function formatStylesAsText(styles) {
|
|
180
|
+
const lines = [];
|
|
181
|
+
lines.push(`Element: ${styles.element}`);
|
|
182
|
+
lines.push('');
|
|
183
|
+
if (styles.inlineStyle) {
|
|
184
|
+
lines.push('Inline styles:');
|
|
185
|
+
for (const [prop, value] of Object.entries(styles.inlineStyle)) {
|
|
186
|
+
lines.push(` ${prop}: ${value}`);
|
|
187
|
+
}
|
|
188
|
+
lines.push('');
|
|
189
|
+
}
|
|
190
|
+
const directRules = styles.rules.filter((r) => !r.inheritedFrom);
|
|
191
|
+
const inheritedRules = styles.rules.filter((r) => r.inheritedFrom);
|
|
192
|
+
if (directRules.length > 0) {
|
|
193
|
+
lines.push('Matched rules:');
|
|
194
|
+
for (const rule of directRules) {
|
|
195
|
+
lines.push(` ${rule.selector} {`);
|
|
196
|
+
const sourceInfo = rule.source ? ` /* ${rule.source.url}:${rule.source.line}:${rule.source.column} */` : '';
|
|
197
|
+
if (sourceInfo) {
|
|
198
|
+
lines.push(` ${sourceInfo}`);
|
|
199
|
+
}
|
|
200
|
+
for (const [prop, value] of Object.entries(rule.declarations)) {
|
|
201
|
+
lines.push(` ${prop}: ${value};`);
|
|
202
|
+
}
|
|
203
|
+
lines.push(' }');
|
|
204
|
+
}
|
|
205
|
+
lines.push('');
|
|
206
|
+
}
|
|
207
|
+
if (inheritedRules.length > 0) {
|
|
208
|
+
const byAncestor = new Map();
|
|
209
|
+
for (const rule of inheritedRules) {
|
|
210
|
+
const key = rule.inheritedFrom;
|
|
211
|
+
if (!byAncestor.has(key)) {
|
|
212
|
+
byAncestor.set(key, []);
|
|
213
|
+
}
|
|
214
|
+
byAncestor.get(key).push(rule);
|
|
215
|
+
}
|
|
216
|
+
for (const [ancestor, rules] of byAncestor) {
|
|
217
|
+
lines.push(`Inherited from ${ancestor}:`);
|
|
218
|
+
for (const rule of rules) {
|
|
219
|
+
lines.push(` ${rule.selector} {`);
|
|
220
|
+
const sourceInfo = rule.source ? ` /* ${rule.source.url}:${rule.source.line}:${rule.source.column} */` : '';
|
|
221
|
+
if (sourceInfo) {
|
|
222
|
+
lines.push(` ${sourceInfo}`);
|
|
223
|
+
}
|
|
224
|
+
for (const [prop, value] of Object.entries(rule.declarations)) {
|
|
225
|
+
lines.push(` ${prop}: ${value};`);
|
|
226
|
+
}
|
|
227
|
+
lines.push(' }');
|
|
228
|
+
}
|
|
229
|
+
lines.push('');
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
return lines.join('\n');
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BrowserContext } from 'playwright-core';
|
|
2
|
+
export interface ActiveTracing {
|
|
3
|
+
path: string;
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function startTracing({ context, baseDir, }: {
|
|
7
|
+
context: BrowserContext;
|
|
8
|
+
baseDir: string;
|
|
9
|
+
}): Promise<ActiveTracing>;
|
|
10
|
+
export declare function stopTracing({ context, activeTracing, }: {
|
|
11
|
+
context: BrowserContext;
|
|
12
|
+
activeTracing: ActiveTracing;
|
|
13
|
+
}): Promise<string>;
|
|
14
|
+
//# sourceMappingURL=trace-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-utils.d.ts","sourceRoot":"","sources":["../src/trace-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAKhD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,wBAAsB,YAAY,CAAC,EACjC,OAAO,EACP,OAAO,GACR,EAAE;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,OAAO,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAC,aAAa,CAAC,CAezB;AAED,wBAAsB,WAAW,CAAC,EAChC,OAAO,EACP,aAAa,GACd,EAAE;IACD,OAAO,EAAE,cAAc,CAAA;IACvB,aAAa,EAAE,aAAa,CAAA;CAC7B,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { formatDateTimeForPath } from './utils.js';
|
|
4
|
+
export async function startTracing({ context, baseDir, }) {
|
|
5
|
+
const now = new Date();
|
|
6
|
+
const dateTimeStr = formatDateTimeForPath(now);
|
|
7
|
+
const name = `trace-${dateTimeStr}`;
|
|
8
|
+
fs.mkdirSync(baseDir, { recursive: true });
|
|
9
|
+
const tracePath = path.join(baseDir, `${dateTimeStr}.zip`);
|
|
10
|
+
await context.tracing.start({
|
|
11
|
+
name,
|
|
12
|
+
screenshots: true,
|
|
13
|
+
snapshots: true,
|
|
14
|
+
});
|
|
15
|
+
return { path: tracePath, name };
|
|
16
|
+
}
|
|
17
|
+
export async function stopTracing({ context, activeTracing, }) {
|
|
18
|
+
await context.tracing.stop({ path: activeTracing.path });
|
|
19
|
+
return activeTracing.path;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=trace-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-utils.js","sourceRoot":"","sources":["../src/trace-utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,SAAS,CAAA;AACxB,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAOlD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EACjC,OAAO,EACP,OAAO,GAIR;IACC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;IACtB,MAAM,WAAW,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAA;IAC9C,MAAM,IAAI,GAAG,SAAS,WAAW,EAAE,CAAA;IAEnC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,WAAW,MAAM,CAAC,CAAA;IAE1D,MAAM,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC1B,IAAI;QACJ,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;KAChB,CAAC,CAAA;IAEF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAChC,OAAO,EACP,aAAa,GAId;IACC,MAAM,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAA;IACxD,OAAO,aAAa,CAAC,IAAI,CAAA;AAC3B,CAAC"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { BrowserContext } from 'playwright-core';
|
|
2
|
+
export declare const RELAY_PORT: number;
|
|
3
|
+
export declare function getCdpUrl({ port, host, token, }?: {
|
|
4
|
+
port?: number;
|
|
5
|
+
host?: string;
|
|
6
|
+
token?: string;
|
|
7
|
+
}): string;
|
|
8
|
+
export declare const LOG_FILE_PATH: string;
|
|
9
|
+
export declare const VERSION: string;
|
|
10
|
+
export declare function sleep(ms: number): Promise<void>;
|
|
11
|
+
export declare function getServerVersion(port?: number): Promise<string | null>;
|
|
12
|
+
export declare function setDeviceScaleFactorForMacOS(context: BrowserContext): void;
|
|
13
|
+
export declare function preserveSystemColorScheme(context: BrowserContext): void;
|
|
14
|
+
export declare function formatAsCommentLines(text: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Returns a combined date_time string for flattened folder structure.
|
|
17
|
+
* Format: YYYY-MM-DD_HH-MM-SS (e.g., 2026-01-13_12-53-00)
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatDateTimeForPath(date: Date): string;
|
|
20
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAErD,eAAO,MAAM,UAAU,QAA8C,CAAA;AAErE,wBAAgB,SAAS,CAAC,EACxB,IAAY,EACZ,IAAkB,EAClB,KAAK,GACN,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,UAIvD;AAED,eAAO,MAAM,aAAa,QACsE,CAAA;AAGhG,eAAO,MAAM,OAAO,EAAoE,MAAM,CAAA;AAE9F,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/C;AAED,wBAAsB,gBAAgB,CAAC,IAAI,GAAE,MAAmB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAaxF;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAS1E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAQvE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOzD;AAaD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAExD"}
|