chore(docs): beautify generated types, put options always last (#20805)

This commit is contained in:
Dmitry Gozman 2023-02-09 20:46:33 -08:00 committed by GitHub
parent ab4cd83e44
commit 778dd20403
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 143 additions and 113 deletions

View file

@ -4620,7 +4620,8 @@ export interface Page {
*/ */
request: APIRequestContext; request: APIRequestContext;
touchscreen: Touchscreen;} touchscreen: Touchscreen;
}
/** /**
* At every point of time, page exposes its current frame tree via the * At every point of time, page exposes its current frame tree via the
@ -7235,7 +7236,8 @@ export interface Frame {
* loading. * loading.
*/ */
waitUntil?: "load"|"domcontentloaded"|"networkidle"|"commit"; waitUntil?: "load"|"domcontentloaded"|"networkidle"|"commit";
}): Promise<void>;} }): Promise<void>;
}
/** /**
* - extends: [EventEmitter] * - extends: [EventEmitter]
@ -8323,7 +8325,8 @@ export interface BrowserContext {
*/ */
request: APIRequestContext; request: APIRequestContext;
tracing: Tracing;} tracing: Tracing;
}
/** /**
* The Worker class represents a [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API). * The Worker class represents a [WebWorker](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API).
@ -8453,7 +8456,8 @@ export interface Worker {
*/ */
prependListener(event: 'close', listener: (worker: Worker) => void): this; prependListener(event: 'close', listener: (worker: Worker) => void): this;
url(): string;} url(): string;
}
/** /**
* JSHandle represents an in-page JavaScript object. JSHandles can be created with the * JSHandle represents an in-page JavaScript object. JSHandles can be created with the
@ -8585,7 +8589,8 @@ export interface JSHandle<T = any> {
* Fetches a single property from the referenced object. * Fetches a single property from the referenced object.
* @param propertyName property to get * @param propertyName property to get
*/ */
getProperty(propertyName: string): Promise<JSHandle>;} getProperty(propertyName: string): Promise<JSHandle>;
}
/** /**
* - extends: [JSHandle] * - extends: [JSHandle]
@ -9978,7 +9983,8 @@ export interface ElementHandle<T=Node> extends JSHandle<T> {
* or [page.setDefaultTimeout(timeout)](https://playwright.dev/docs/api/class-page#page-set-default-timeout) methods. * or [page.setDefaultTimeout(timeout)](https://playwright.dev/docs/api/class-page#page-set-default-timeout) methods.
*/ */
timeout?: number; timeout?: number;
}): Promise<void>;} }): Promise<void>;
}
/** /**
* Locators are the central piece of Playwright's auto-waiting and retry-ability. In a nutshell, locators represent a * Locators are the central piece of Playwright's auto-waiting and retry-ability. In a nutshell, locators represent a
@ -11997,7 +12003,8 @@ export interface Locator {
* or [page.setDefaultTimeout(timeout)](https://playwright.dev/docs/api/class-page#page-set-default-timeout) methods. * or [page.setDefaultTimeout(timeout)](https://playwright.dev/docs/api/class-page#page-set-default-timeout) methods.
*/ */
timeout?: number; timeout?: number;
}): Promise<void>;} }): Promise<void>;
}
/** /**
* BrowserType provides methods to launch a specific browser instance or connect to an existing one. The following is * BrowserType provides methods to launch a specific browser instance or connect to an existing one. The following is
@ -12696,7 +12703,8 @@ export interface BrowserType<Unused = {}> {
/** /**
* Returns browser name. For example: `'chromium'`, `'webkit'` or `'firefox'`. * Returns browser name. For example: `'chromium'`, `'webkit'` or `'firefox'`.
*/ */
name(): string;} name(): string;
}
/** /**
* - extends: [EventEmitter] * - extends: [EventEmitter]
@ -12741,7 +12749,8 @@ export interface CDPSession {
* Detaches the CDPSession from the target. Once detached, the CDPSession object won't emit any events and can't be * Detaches the CDPSession from the target. Once detached, the CDPSession object won't emit any events and can't be
* used to send messages. * used to send messages.
*/ */
detach(): Promise<void>;} detach(): Promise<void>;
}
type DeviceDescriptor = { type DeviceDescriptor = {
viewport: ViewportSize; viewport: ViewportSize;
@ -12781,7 +12790,8 @@ export namespace errors {
* ``` * ```
* *
*/ */
class TimeoutError extends Error {} class TimeoutError extends Error {
}
} }
@ -12843,6 +12853,7 @@ export interface Accessibility {
* @param options * @param options
*/ */
snapshot(options?: AccessibilitySnapshotOptions): Promise<null|AccessibilityNode>; snapshot(options?: AccessibilitySnapshotOptions): Promise<null|AccessibilityNode>;
} }
type AccessibilityNode = { type AccessibilityNode = {
@ -13110,7 +13121,8 @@ export interface ElectronApplication {
/** /**
* Convenience method that returns all the opened windows. * Convenience method that returns all the opened windows.
*/ */
windows(): Array<Page>;} windows(): Array<Page>;
}
export type AndroidElementInfo = { export type AndroidElementInfo = {
clazz: string; clazz: string;
@ -17323,6 +17335,7 @@ export const selectors: Selectors;
* This object can be used to launch or connect to WebKit, returning instances of [Browser]. * This object can be used to launch or connect to WebKit, returning instances of [Browser].
*/ */
export const webkit: BrowserType; export const webkit: BrowserType;
/** /**
* Whenever the page sends a request for a network resource the following sequence of events are emitted by [Page]: * Whenever the page sends a request for a network resource the following sequence of events are emitted by [Page]:
* - [page.on('request')](https://playwright.dev/docs/api/class-page#page-event-request) emitted when the request is * - [page.on('request')](https://playwright.dev/docs/api/class-page#page-event-request) emitted when the request is
@ -18298,21 +18311,21 @@ export interface WebSocket {
* Fired when the websocket receives a frame. * Fired when the websocket receives a frame.
*/ */
on(event: 'framereceived', listener: (data: { on(event: 'framereceived', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Fired when the websocket sends a frame. * Fired when the websocket sends a frame.
*/ */
on(event: 'framesent', listener: (data: { on(event: 'framesent', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Fired when the websocket has an error. * Fired when the websocket has an error.
@ -18328,21 +18341,21 @@ export interface WebSocket {
* Adds an event listener that will be automatically removed after it is triggered once. See `addListener` for more information about this event. * Adds an event listener that will be automatically removed after it is triggered once. See `addListener` for more information about this event.
*/ */
once(event: 'framereceived', listener: (data: { once(event: 'framereceived', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Adds an event listener that will be automatically removed after it is triggered once. See `addListener` for more information about this event. * Adds an event listener that will be automatically removed after it is triggered once. See `addListener` for more information about this event.
*/ */
once(event: 'framesent', listener: (data: { once(event: 'framesent', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Adds an event listener that will be automatically removed after it is triggered once. See `addListener` for more information about this event. * Adds an event listener that will be automatically removed after it is triggered once. See `addListener` for more information about this event.
@ -18358,21 +18371,21 @@ export interface WebSocket {
* Fired when the websocket receives a frame. * Fired when the websocket receives a frame.
*/ */
addListener(event: 'framereceived', listener: (data: { addListener(event: 'framereceived', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Fired when the websocket sends a frame. * Fired when the websocket sends a frame.
*/ */
addListener(event: 'framesent', listener: (data: { addListener(event: 'framesent', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Fired when the websocket has an error. * Fired when the websocket has an error.
@ -18388,21 +18401,21 @@ export interface WebSocket {
* Removes an event listener added by `on` or `addListener`. * Removes an event listener added by `on` or `addListener`.
*/ */
removeListener(event: 'framereceived', listener: (data: { removeListener(event: 'framereceived', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Removes an event listener added by `on` or `addListener`. * Removes an event listener added by `on` or `addListener`.
*/ */
removeListener(event: 'framesent', listener: (data: { removeListener(event: 'framesent', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Removes an event listener added by `on` or `addListener`. * Removes an event listener added by `on` or `addListener`.
@ -18418,21 +18431,21 @@ export interface WebSocket {
* Removes an event listener added by `on` or `addListener`. * Removes an event listener added by `on` or `addListener`.
*/ */
off(event: 'framereceived', listener: (data: { off(event: 'framereceived', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Removes an event listener added by `on` or `addListener`. * Removes an event listener added by `on` or `addListener`.
*/ */
off(event: 'framesent', listener: (data: { off(event: 'framesent', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Removes an event listener added by `on` or `addListener`. * Removes an event listener added by `on` or `addListener`.
@ -18448,21 +18461,21 @@ export interface WebSocket {
* Fired when the websocket receives a frame. * Fired when the websocket receives a frame.
*/ */
prependListener(event: 'framereceived', listener: (data: { prependListener(event: 'framereceived', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Fired when the websocket sends a frame. * Fired when the websocket sends a frame.
*/ */
prependListener(event: 'framesent', listener: (data: { prependListener(event: 'framesent', listener: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => void): this; }) => void): this;
/** /**
* Fired when the websocket has an error. * Fired when the websocket has an error.
@ -18488,41 +18501,41 @@ export interface WebSocket {
* Fired when the websocket receives a frame. * Fired when the websocket receives a frame.
*/ */
waitForEvent(event: 'framereceived', optionsOrPredicate?: { predicate?: (data: { waitForEvent(event: 'framereceived', optionsOrPredicate?: { predicate?: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => boolean | Promise<boolean>, timeout?: number } | ((data: { }) => boolean | Promise<boolean>, timeout?: number } | ((data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => boolean | Promise<boolean>)): Promise<{ }) => boolean | Promise<boolean>)): Promise<{
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}>; }>;
/** /**
* Fired when the websocket sends a frame. * Fired when the websocket sends a frame.
*/ */
waitForEvent(event: 'framesent', optionsOrPredicate?: { predicate?: (data: { waitForEvent(event: 'framesent', optionsOrPredicate?: { predicate?: (data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => boolean | Promise<boolean>, timeout?: number } | ((data: { }) => boolean | Promise<boolean>, timeout?: number } | ((data: {
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}) => boolean | Promise<boolean>)): Promise<{ }) => boolean | Promise<boolean>)): Promise<{
/** /**
* frame payload * frame payload
*/ */
payload: string|Buffer; payload: string|Buffer;
}>; }>;
/** /**
* Fired when the websocket has an error. * Fired when the websocket has an error.

View file

@ -1285,7 +1285,8 @@ interface TestConfig {
* ``` * ```
* *
*/ */
workers?: number|string;} workers?: number|string;
}
/** /**
* Playwright Test provides many options to configure how your tests are collected and executed, for example `timeout` * Playwright Test provides many options to configure how your tests are collected and executed, for example `timeout`
@ -1833,7 +1834,8 @@ export interface WorkerInfo {
* Also available as `process.env.TEST_WORKER_INDEX`. Learn more about [parallelism and sharding](https://playwright.dev/docs/test-parallel) * Also available as `process.env.TEST_WORKER_INDEX`. Learn more about [parallelism and sharding](https://playwright.dev/docs/test-parallel)
* with Playwright Test. * with Playwright Test.
*/ */
workerIndex: number;} workerIndex: number;
}
/** /**
* `TestInfo` contains information about currently running test. It is available to any test function, * `TestInfo` contains information about currently running test. It is available to any test function,
@ -2271,7 +2273,8 @@ export interface TestInfo {
* Also available as `process.env.TEST_WORKER_INDEX`. Learn more about [parallelism and sharding](https://playwright.dev/docs/test-parallel) * Also available as `process.env.TEST_WORKER_INDEX`. Learn more about [parallelism and sharding](https://playwright.dev/docs/test-parallel)
* with Playwright Test. * with Playwright Test.
*/ */
workerIndex: number;} workerIndex: number;
}
interface SuiteFunction { interface SuiteFunction {
/** /**
@ -4193,6 +4196,7 @@ interface GenericAssertions<R> {
* @param expected Expected error message or error object. * @param expected Expected error message or error object.
*/ */
toThrowError(error?: unknown): R; toThrowError(error?: unknown): R;
} }
type BaseMatchers<R, T> = GenericAssertions<R> & PlaywrightTest.Matchers<R, T>; type BaseMatchers<R, T> = GenericAssertions<R> & PlaywrightTest.Matchers<R, T>;

View file

@ -84,7 +84,8 @@ export interface Suite {
* - Title passed to [test.describe(title, callback)](https://playwright.dev/docs/api/class-test#test-describe-1) * - Title passed to [test.describe(title, callback)](https://playwright.dev/docs/api/class-test#test-describe-1)
* for a group suite. * for a group suite.
*/ */
title: string;} title: string;
}
/** /**
* `TestCase` corresponds to every * `TestCase` corresponds to every
@ -195,7 +196,8 @@ export interface TestCase {
* Test title as passed to the * Test title as passed to the
* [test.(call)(title, testFunction)](https://playwright.dev/docs/api/class-test#test-call) call. * [test.(call)(title, testFunction)](https://playwright.dev/docs/api/class-test#test-call) call.
*/ */
title: string;} title: string;
}
/** /**
* A result of a single [TestCase] run. * A result of a single [TestCase] run.
@ -288,7 +290,8 @@ export interface TestResult {
* *
* Learn more about [parallelism and sharding](https://playwright.dev/docs/test-parallel) with Playwright Test. * Learn more about [parallelism and sharding](https://playwright.dev/docs/test-parallel) with Playwright Test.
*/ */
workerIndex: number;} workerIndex: number;
}
/** /**
* Result of the full test run. * Result of the full test run.
@ -453,7 +456,8 @@ export interface Reporter {
* Whether this reporter uses stdio for reporting. When it does not, Playwright Test could add some output to enhance * Whether this reporter uses stdio for reporting. When it does not, Playwright Test could add some output to enhance
* user experience. If your reporter does not print to the terminal, it is strongly recommended to return `false`. * user experience. If your reporter does not print to the terminal, it is strongly recommended to return `false`.
*/ */
printsToStdio?(): boolean;} printsToStdio?(): boolean;
}
export interface JSONReport { export interface JSONReport {
config: Omit<FullConfig, 'projects'> & { config: Omit<FullConfig, 'projects'> & {

View file

@ -328,6 +328,16 @@ class Documentation {
this.membersArray.sort((m1, m2) => { this.membersArray.sort((m1, m2) => {
return sortKey(m1).localeCompare(sortKey(m2), 'en', { sensitivity: 'base' }); return sortKey(m1).localeCompare(sortKey(m2), 'en', { sensitivity: 'base' });
}); });
// Options should be the last argument.
this.membersArray.forEach(member => {
const optionsIndex = member.argsArray.findIndex(a => a.name === 'options');
if (optionsIndex !== -1) {
const options = member.argsArray[optionsIndex];
member.argsArray.splice(optionsIndex, 1);
member.argsArray.push(options);
}
});
} }
/** /**

View file

@ -216,8 +216,7 @@ class TypesGenerator {
const shouldExport = !this.doNotExportClassNames.has(classDesc.name); const shouldExport = !this.doNotExportClassNames.has(classDesc.name);
parts.push(`${shouldExport ? 'export ' : ''}interface ${classDesc.name} ${classDesc.extends ? `extends ${classDesc.extends} ` : ''}{`); parts.push(`${shouldExport ? 'export ' : ''}interface ${classDesc.name} ${classDesc.extends ? `extends ${classDesc.extends} ` : ''}{`);
parts.push(this.classBody(classDesc)); parts.push(this.classBody(classDesc));
parts.push('}\n'); return parts.join('\n') + '}\n';
return parts.join('\n');
} }
/** /**
@ -252,7 +251,7 @@ class TypesGenerator {
const descriptions = []; const descriptions = [];
for (let [eventName, value] of classDesc.events) { for (let [eventName, value] of classDesc.events) {
eventName = eventName.toLowerCase(); eventName = eventName.toLowerCase();
const type = this.stringifyComplexType(value && value.type, '', classDesc.name, eventName, 'payload'); const type = this.stringifyComplexType(value && value.type, ' ', classDesc.name, eventName, 'payload');
const argName = this.argNameForType(type); const argName = this.argNameForType(type);
const params = argName ? `${argName}: ${type}` : ''; const params = argName ? `${argName}: ${type}` : '';
descriptions.push({ descriptions.push({
@ -318,7 +317,7 @@ class TypesGenerator {
} }
return `${jsdoc}${member.alias}${member.required ? '' : '?'}${args}: ${type};` return `${jsdoc}${member.alias}${member.required ? '' : '?'}${args}: ${type};`
}).filter(x => x).join('\n\n')); }).filter(x => x).join('\n\n'));
return parts.join('\n'); return parts.join('\n') + '\n';
} }
/** /**

View file

@ -52,8 +52,8 @@ export interface FullProject<TestArgs = {}, WorkerArgs = {}> {
testMatch: string | RegExp | (string | RegExp)[]; testMatch: string | RegExp | (string | RegExp)[];
timeout: number; timeout: number;
use: UseOptions<PlaywrightTestOptions & TestArgs, PlaywrightWorkerOptions & WorkerArgs>; use: UseOptions<PlaywrightTestOptions & TestArgs, PlaywrightWorkerOptions & WorkerArgs>;
// [internal] !!! DO NOT ADD TO THIS !!! See prior note.
} }
// [internal] !!! DO NOT ADD TO THIS !!! See prior note.
type LiteralUnion<T extends U, U = string> = T | (U & { zz_IGNORE_ME?: never }); type LiteralUnion<T extends U, U = string> = T | (U & { zz_IGNORE_ME?: never });