fix(types): export selected types (#1881)
Currently exports LaunchOptions, BrowserContextOptions, Cookie and their deps.
This commit is contained in:
parent
193582445d
commit
948d51d52c
8
utils/generate_types/exported.json
Normal file
8
utils/generate_types/exported.json
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"BrowserTypeLaunchOptions": "LaunchOptions",
|
||||||
|
"BrowserContextCookies": "Cookie",
|
||||||
|
"BrowserNewContextOptions": "BrowserContextOptions",
|
||||||
|
"BrowserNewContextOptionsViewport": "ViewportSize",
|
||||||
|
"BrowserNewContextOptionsGeolocation": "Geolocation",
|
||||||
|
"BrowserNewContextOptionsHttpCredentials": "HTTPCredentials"
|
||||||
|
}
|
||||||
|
|
@ -22,6 +22,7 @@ const Documentation = require('../doclint/check_public_api/Documentation');
|
||||||
const PROJECT_DIR = path.join(__dirname, '..', '..');
|
const PROJECT_DIR = path.join(__dirname, '..', '..');
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const {parseOverrides} = require('./parseOverrides');
|
const {parseOverrides} = require('./parseOverrides');
|
||||||
|
const exported = require('./exported.json');
|
||||||
const objectDefinitions = [];
|
const objectDefinitions = [];
|
||||||
const handledMethods = new Set();
|
const handledMethods = new Set();
|
||||||
/** @type {Documentation} */
|
/** @type {Documentation} */
|
||||||
|
|
@ -64,12 +65,14 @@ let documentation;
|
||||||
return classBody(docClassForName(className));
|
return classBody(docClassForName(className));
|
||||||
});
|
});
|
||||||
const classes = documentation.classesArray.filter(cls => !handledClasses.has(cls.name));
|
const classes = documentation.classesArray.filter(cls => !handledClasses.has(cls.name));
|
||||||
const output = `// This file is generated by ${__filename.substring(path.join(__dirname, '..', '..').length)}
|
let output = `// This file is generated by ${__filename.substring(path.join(__dirname, '..', '..').length)}
|
||||||
${overrides}
|
${overrides}
|
||||||
|
|
||||||
${classes.map(classDesc => classToString(classDesc)).join('\n')}
|
${classes.map(classDesc => classToString(classDesc)).join('\n')}
|
||||||
${objectDefinitionsToString()}
|
${objectDefinitionsToString()}
|
||||||
`;
|
`;
|
||||||
|
for (const [key, value] of Object.entries(exported))
|
||||||
|
output = output.replace(new RegExp('\\b' + key + '\\b', 'g'), value);
|
||||||
fs.writeFileSync(path.join(typesDir, 'types.d.ts'), output, 'utf8');
|
fs.writeFileSync(path.join(typesDir, 'types.d.ts'), output, 'utf8');
|
||||||
})().catch(e => {
|
})().catch(e => {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
|
|
@ -81,7 +84,7 @@ function objectDefinitionsToString() {
|
||||||
const parts = [];
|
const parts = [];
|
||||||
while ((definition = objectDefinitions.pop())) {
|
while ((definition = objectDefinitions.pop())) {
|
||||||
const {name, properties} = definition;
|
const {name, properties} = definition;
|
||||||
parts.push(`interface ${name} {`);
|
parts.push(`${exported[name] ? 'export ' : ''}interface ${name} {`);
|
||||||
parts.push(properties.map(member => `${memberJSDOC(member, ' ')}${nameForProperty(member)}${argsFromMember(member, name)}: ${typeToString(member.type, name, member.name)};`).join('\n\n'));
|
parts.push(properties.map(member => `${memberJSDOC(member, ' ')}${nameForProperty(member)}${argsFromMember(member, name)}: ${typeToString(member.type, name, member.name)};`).join('\n\n'));
|
||||||
parts.push('}\n');
|
parts.push('}\n');
|
||||||
}
|
}
|
||||||
|
|
@ -109,7 +112,7 @@ function classToString(classDesc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} type
|
* @param {string} type
|
||||||
*/
|
*/
|
||||||
function argNameForType(type) {
|
function argNameForType(type) {
|
||||||
if (type === 'void')
|
if (type === 'void')
|
||||||
|
|
@ -192,8 +195,8 @@ function classBody(classDesc) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Documentation.Class} classDesc
|
* @param {Documentation.Class} classDesc
|
||||||
* @param {string} methodName
|
* @param {string} methodName
|
||||||
*/
|
*/
|
||||||
function hasOwnMethod(classDesc, methodName) {
|
function hasOwnMethod(classDesc, methodName) {
|
||||||
if (handledMethods.has(`${classDesc.name}.${methodName}`))
|
if (handledMethods.has(`${classDesc.name}.${methodName}`))
|
||||||
|
|
@ -206,7 +209,7 @@ function hasOwnMethod(classDesc, methodName) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Documentation.Class} classDesc
|
* @param {Documentation.Class} classDesc
|
||||||
*/
|
*/
|
||||||
function parentClass(classDesc) {
|
function parentClass(classDesc) {
|
||||||
if (!classDesc.extends)
|
if (!classDesc.extends)
|
||||||
|
|
@ -221,13 +224,6 @@ function writeComment(comment, indent = '') {
|
||||||
parts.push(indent + ' */');
|
parts.push(indent + ' */');
|
||||||
return parts.join('\n');
|
return parts.join('\n');
|
||||||
}
|
}
|
||||||
function writeComment2(comment, indent = '') {
|
|
||||||
const parts = [];
|
|
||||||
parts.push('/**');
|
|
||||||
parts.push(...comment.split('\n').map(line => indent + ' * ' + line.replace(/\*\//g, '*\\/')));
|
|
||||||
parts.push(indent + ' */\n' + indent);
|
|
||||||
return parts.join('\n');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Documentation.Type} type
|
* @param {Documentation.Type} type
|
||||||
|
|
@ -373,9 +369,9 @@ function memberJSDOC(member, indent) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Documentation} mdDoc
|
* @param {Documentation} mdDoc
|
||||||
* @param {Documentation} jsDoc
|
* @param {Documentation} jsDoc
|
||||||
* @return {Documentation}
|
* @return {Documentation}
|
||||||
*/
|
*/
|
||||||
function mergeDocumentation(mdDoc, jsDoc) {
|
function mergeDocumentation(mdDoc, jsDoc) {
|
||||||
const classes = [];
|
const classes = [];
|
||||||
|
|
|
||||||
|
|
@ -204,13 +204,32 @@ playwright.chromium.launch().then(async browser => {
|
||||||
|
|
||||||
// Test v0.12 features
|
// Test v0.12 features
|
||||||
(async () => {
|
(async () => {
|
||||||
const browser = await playwright.chromium.launch({
|
const launchOptions: playwright.LaunchOptions = {
|
||||||
devtools: true,
|
devtools: true,
|
||||||
env: {
|
env: {
|
||||||
JEST_TEST: true
|
JEST_TEST: true
|
||||||
}
|
}
|
||||||
});
|
};
|
||||||
const page = await browser.newPage();
|
const browser = await playwright.chromium.launch(launchOptions);
|
||||||
|
const viewport: playwright.ViewportSize = {
|
||||||
|
width: 100,
|
||||||
|
height: 200,
|
||||||
|
};
|
||||||
|
const geolocation: playwright.Geolocation = {
|
||||||
|
latitude: 0,
|
||||||
|
longitude: 0,
|
||||||
|
accuracy: undefined,
|
||||||
|
};
|
||||||
|
const httpCredentials: playwright.HTTPCredentials = {
|
||||||
|
username: 'foo',
|
||||||
|
password: 'bar',
|
||||||
|
};
|
||||||
|
const contextOptions: playwright.BrowserContextOptions = {
|
||||||
|
viewport,
|
||||||
|
geolocation,
|
||||||
|
httpCredentials,
|
||||||
|
};
|
||||||
|
const page = await browser.newPage(contextOptions);
|
||||||
const button = (await page.$('#myButton'))!;
|
const button = (await page.$('#myButton'))!;
|
||||||
const div = (await page.$('#myDiv'))!;
|
const div = (await page.$('#myDiv'))!;
|
||||||
const input = (await page.$('#myInput'))!;
|
const input = (await page.$('#myInput'))!;
|
||||||
|
|
@ -246,6 +265,16 @@ playwright.chromium.launch().then(async browser => {
|
||||||
const buttonText = await (await button.getProperty('textContent')).jsonValue();
|
const buttonText = await (await button.getProperty('textContent')).jsonValue();
|
||||||
await page.context().clearCookies();
|
await page.context().clearCookies();
|
||||||
|
|
||||||
|
const cookies: playwright.Cookie[] = await page.context().cookies(['http://example.com']);
|
||||||
|
const cookie = cookies[0];
|
||||||
|
const nameIsString: AssertType<string, typeof cookie.name> = true;
|
||||||
|
const valueIsString: AssertType<string, typeof cookie.value> = true;
|
||||||
|
const pathIsString: AssertType<string, typeof cookie.path> = true;
|
||||||
|
const expiresIsNumber: AssertType<number, typeof cookie.expires> = true;
|
||||||
|
const httpOnlyIsBoolean: AssertType<boolean, typeof cookie.httpOnly> = true;
|
||||||
|
const secureIsBoolean: AssertType<boolean, typeof cookie.secure> = true;
|
||||||
|
const sameSiteIsEnum: AssertType<"Strict"|"Lax"|"None", typeof cookie.sameSite> = true;
|
||||||
|
|
||||||
const navResponse = await page.waitForNavigation({
|
const navResponse = await page.waitForNavigation({
|
||||||
timeout: 1000
|
timeout: 1000
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue