Drive-by: typo fix in `notFound` option name.
This commit is contained in:
parent
c840a28946
commit
d3e80664e8
|
|
@ -1036,7 +1036,7 @@ Playwright will not serve requests intercepted by Service Worker from the HAR fi
|
||||||
|
|
||||||
Path to a [HAR](http://www.softwareishard.com/blog/har-12-spec) file with prerecorded network data. If `path` is a relative path, then it is resolved relative to the current working directory.
|
Path to a [HAR](http://www.softwareishard.com/blog/har-12-spec) file with prerecorded network data. If `path` is a relative path, then it is resolved relative to the current working directory.
|
||||||
|
|
||||||
### option: BrowserContext.routeFromHAR.fallback
|
### option: BrowserContext.routeFromHAR.notFound
|
||||||
- `notFound` ?<[HarNotFound]<"abort"|"fallback">>
|
- `notFound` ?<[HarNotFound]<"abort"|"fallback">>
|
||||||
|
|
||||||
* If set to 'abort' any request not found in the HAR file will be aborted.
|
* If set to 'abort' any request not found in the HAR file will be aborted.
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,6 @@
|
||||||
"./lib/server": "./lib/server/index.js",
|
"./lib/server": "./lib/server/index.js",
|
||||||
"./lib/utilsBundle": "./lib/utilsBundle.js",
|
"./lib/utilsBundle": "./lib/utilsBundle.js",
|
||||||
"./lib/zipBundle": "./lib/zipBundle.js",
|
"./lib/zipBundle": "./lib/zipBundle.js",
|
||||||
"./types/har": "./types/har.d.ts",
|
|
||||||
"./types/protocol": "./types/protocol.d.ts",
|
"./types/protocol": "./types/protocol.d.ts",
|
||||||
"./types/structs": "./types/structs.d.ts"
|
"./types/structs": "./types/structs.d.ts"
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ import type { DispatcherScope } from './dispatcher';
|
||||||
import { Dispatcher } from './dispatcher';
|
import { Dispatcher } from './dispatcher';
|
||||||
import { yazl, yauzl } from '../../zipBundle';
|
import { yazl, yauzl } from '../../zipBundle';
|
||||||
import { ZipFile } from '../../utils/zipFile';
|
import { ZipFile } from '../../utils/zipFile';
|
||||||
import type { HAREntry, HARFile, HARHeader } from '../../../types/har';
|
import type * as har from '../har/har';
|
||||||
import type { HeadersArray } from '../types';
|
import type { HeadersArray } from '../types';
|
||||||
|
|
||||||
export class LocalUtilsDispatcher extends Dispatcher<{ guid: string }, channels.LocalUtilsChannel> implements channels.LocalUtilsChannel {
|
export class LocalUtilsDispatcher extends Dispatcher<{ guid: string }, channels.LocalUtilsChannel> implements channels.LocalUtilsChannel {
|
||||||
|
|
@ -100,10 +100,10 @@ export class LocalUtilsDispatcher extends Dispatcher<{ guid: string }, channels.
|
||||||
if (!harEntryName)
|
if (!harEntryName)
|
||||||
return { error: 'Specified archive does not have a .har file' };
|
return { error: 'Specified archive does not have a .har file' };
|
||||||
const har = await zipFile.read(harEntryName);
|
const har = await zipFile.read(harEntryName);
|
||||||
const harFile = JSON.parse(har.toString()) as HARFile;
|
const harFile = JSON.parse(har.toString()) as har.HARFile;
|
||||||
harBackend = new HarBackend(harFile, null, zipFile);
|
harBackend = new HarBackend(harFile, null, zipFile);
|
||||||
} else {
|
} else {
|
||||||
const harFile = JSON.parse(await fs.promises.readFile(params.file, 'utf-8')) as HARFile;
|
const harFile = JSON.parse(await fs.promises.readFile(params.file, 'utf-8')) as har.HARFile;
|
||||||
harBackend = new HarBackend(harFile, path.dirname(params.file), null);
|
harBackend = new HarBackend(harFile, path.dirname(params.file), null);
|
||||||
}
|
}
|
||||||
this._harBakends.set(harBackend.id, harBackend);
|
this._harBakends.set(harBackend.id, harBackend);
|
||||||
|
|
@ -130,11 +130,11 @@ const redirectStatus = [301, 302, 303, 307, 308];
|
||||||
|
|
||||||
class HarBackend {
|
class HarBackend {
|
||||||
readonly id = createGuid();
|
readonly id = createGuid();
|
||||||
private _harFile: HARFile;
|
private _harFile: har.HARFile;
|
||||||
private _zipFile: ZipFile | null;
|
private _zipFile: ZipFile | null;
|
||||||
private _baseDir: string | null;
|
private _baseDir: string | null;
|
||||||
|
|
||||||
constructor(harFile: HARFile, baseDir: string | null, zipFile: ZipFile | null) {
|
constructor(harFile: har.HARFile, baseDir: string | null, zipFile: ZipFile | null) {
|
||||||
this._harFile = harFile;
|
this._harFile = harFile;
|
||||||
this._baseDir = baseDir;
|
this._baseDir = baseDir;
|
||||||
this._zipFile = zipFile;
|
this._zipFile = zipFile;
|
||||||
|
|
@ -190,11 +190,11 @@ class HarBackend {
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async _harFindResponse(url: string, method: string, headers: HeadersArray, postData: Buffer | undefined): Promise<HAREntry | undefined> {
|
private async _harFindResponse(url: string, method: string, headers: HeadersArray, postData: Buffer | undefined): Promise<har.Entry | undefined> {
|
||||||
const harLog = this._harFile.log;
|
const harLog = this._harFile.log;
|
||||||
const visited = new Set<HAREntry>();
|
const visited = new Set<har.Entry>();
|
||||||
while (true) {
|
while (true) {
|
||||||
const entries: HAREntry[] = [];
|
const entries: har.Entry[] = [];
|
||||||
for (const candidate of harLog.entries) {
|
for (const candidate of harLog.entries) {
|
||||||
if (candidate.request.url !== url || candidate.request.method !== method)
|
if (candidate.request.url !== url || candidate.request.method !== method)
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -213,7 +213,7 @@ class HarBackend {
|
||||||
|
|
||||||
// Disambiguate using headers - then one with most matching headers wins.
|
// Disambiguate using headers - then one with most matching headers wins.
|
||||||
if (entries.length > 1) {
|
if (entries.length > 1) {
|
||||||
const list: { candidate: HAREntry, matchingHeaders: number }[] = [];
|
const list: { candidate: har.Entry, matchingHeaders: number }[] = [];
|
||||||
for (const candidate of entries) {
|
for (const candidate of entries) {
|
||||||
const matchingHeaders = countMatchingHeaders(candidate.request.headers, headers);
|
const matchingHeaders = countMatchingHeaders(candidate.request.headers, headers);
|
||||||
list.push({ candidate, matchingHeaders });
|
list.push({ candidate, matchingHeaders });
|
||||||
|
|
@ -249,7 +249,7 @@ class HarBackend {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function countMatchingHeaders(harHeaders: HARHeader[], headers: HeadersArray): number {
|
function countMatchingHeaders(harHeaders: har.Header[], headers: HeadersArray): number {
|
||||||
const set = new Set(headers.map(h => h.name.toLowerCase() + ':' + h.value));
|
const set = new Set(headers.map(h => h.name.toLowerCase() + ':' + h.value));
|
||||||
let matches = 0;
|
let matches = 0;
|
||||||
for (const h of harHeaders) {
|
for (const h of harHeaders) {
|
||||||
|
|
|
||||||
|
|
@ -22,19 +22,22 @@ export type HARFile = {
|
||||||
export type Log = {
|
export type Log = {
|
||||||
version: string;
|
version: string;
|
||||||
creator: Creator;
|
creator: Creator;
|
||||||
browser: Browser;
|
browser?: Browser;
|
||||||
pages: Page[];
|
pages?: Page[];
|
||||||
entries: Entry[];
|
entries: Entry[];
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Creator = {
|
export type Creator = {
|
||||||
name: string;
|
name: string;
|
||||||
version: string;
|
version: string;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Browser = {
|
export type Browser = {
|
||||||
name: string;
|
name: string;
|
||||||
version: string;
|
version: string;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Page = {
|
export type Page = {
|
||||||
|
|
@ -42,11 +45,13 @@ export type Page = {
|
||||||
id: string;
|
id: string;
|
||||||
title: string;
|
title: string;
|
||||||
pageTimings: PageTimings;
|
pageTimings: PageTimings;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type PageTimings = {
|
export type PageTimings = {
|
||||||
onContentLoad: number;
|
onContentLoad?: number;
|
||||||
onLoad: number;
|
onLoad?: number;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Entry = {
|
export type Entry = {
|
||||||
|
|
@ -76,6 +81,7 @@ export type Request = {
|
||||||
postData?: PostData;
|
postData?: PostData;
|
||||||
headersSize: number;
|
headersSize: number;
|
||||||
bodySize: number;
|
bodySize: number;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Response = {
|
export type Response = {
|
||||||
|
|
@ -88,6 +94,7 @@ export type Response = {
|
||||||
redirectURL: string;
|
redirectURL: string;
|
||||||
headersSize: number;
|
headersSize: number;
|
||||||
bodySize: number;
|
bodySize: number;
|
||||||
|
comment?: string;
|
||||||
_transferSize: number;
|
_transferSize: number;
|
||||||
_failureText?: string
|
_failureText?: string
|
||||||
};
|
};
|
||||||
|
|
@ -101,22 +108,26 @@ export type Cookie = {
|
||||||
httpOnly?: boolean;
|
httpOnly?: boolean;
|
||||||
secure?: boolean;
|
secure?: boolean;
|
||||||
sameSite?: string;
|
sameSite?: string;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Header = {
|
export type Header = {
|
||||||
name: string;
|
name: string;
|
||||||
value: string;
|
value: string;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type QueryParameter = {
|
export type QueryParameter = {
|
||||||
name: string;
|
name: string;
|
||||||
value: string;
|
value: string;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type PostData = {
|
export type PostData = {
|
||||||
mimeType: string;
|
mimeType: string;
|
||||||
params: Param[];
|
params: Param[];
|
||||||
text: string;
|
text: string;
|
||||||
|
comment?: string;
|
||||||
_sha1?: string;
|
_sha1?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -125,6 +136,7 @@ export type Param = {
|
||||||
value?: string;
|
value?: string;
|
||||||
fileName?: string;
|
fileName?: string;
|
||||||
contentType?: string;
|
contentType?: string;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Content = {
|
export type Content = {
|
||||||
|
|
@ -133,12 +145,14 @@ export type Content = {
|
||||||
mimeType: string;
|
mimeType: string;
|
||||||
text?: string;
|
text?: string;
|
||||||
encoding?: string;
|
encoding?: string;
|
||||||
|
comment?: string;
|
||||||
_sha1?: string;
|
_sha1?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Cache = {
|
export type Cache = {
|
||||||
beforeRequest: CacheState | null;
|
beforeRequest?: CacheState | null;
|
||||||
afterRequest: CacheState | null;
|
afterRequest?: CacheState | null;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type CacheState = {
|
export type CacheState = {
|
||||||
|
|
@ -146,6 +160,7 @@ export type CacheState = {
|
||||||
lastAccess: string;
|
lastAccess: string;
|
||||||
eTag: string;
|
eTag: string;
|
||||||
hitCount: number;
|
hitCount: number;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Timings = {
|
export type Timings = {
|
||||||
|
|
@ -156,6 +171,7 @@ export type Timings = {
|
||||||
wait: number;
|
wait: number;
|
||||||
receive: number;
|
receive: number;
|
||||||
ssl?: number;
|
ssl?: number;
|
||||||
|
comment?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type SecurityDetails = {
|
export type SecurityDetails = {
|
||||||
|
|
|
||||||
|
|
@ -407,13 +407,13 @@ export class HarTracer {
|
||||||
pages: Array.from(this._pageEntries.values()),
|
pages: Array.from(this._pageEntries.values()),
|
||||||
entries: [],
|
entries: [],
|
||||||
};
|
};
|
||||||
for (const pageEntry of log.pages) {
|
for (const pageEntry of log.pages!) {
|
||||||
if (pageEntry.pageTimings.onContentLoad >= 0)
|
if (pageEntry.pageTimings.onContentLoad! >= 0)
|
||||||
pageEntry.pageTimings.onContentLoad -= pageEntry.startedDateTime.valueOf();
|
pageEntry.pageTimings.onContentLoad! -= pageEntry.startedDateTime.valueOf();
|
||||||
else
|
else
|
||||||
pageEntry.pageTimings.onContentLoad = -1;
|
pageEntry.pageTimings.onContentLoad = -1;
|
||||||
if (pageEntry.pageTimings.onLoad >= 0)
|
if (pageEntry.pageTimings.onLoad! >= 0)
|
||||||
pageEntry.pageTimings.onLoad -= pageEntry.startedDateTime.valueOf();
|
pageEntry.pageTimings.onLoad! -= pageEntry.startedDateTime.valueOf();
|
||||||
else
|
else
|
||||||
pageEntry.pageTimings.onLoad = -1;
|
pageEntry.pageTimings.onLoad = -1;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
167
packages/playwright-core/types/har.d.ts
vendored
167
packages/playwright-core/types/har.d.ts
vendored
|
|
@ -1,167 +0,0 @@
|
||||||
/**
|
|
||||||
* Copyright (c) Microsoft Corporation.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// see http://www.softwareishard.com/blog/har-12-spec/
|
|
||||||
export type HARFile = {
|
|
||||||
log: HARLog;
|
|
||||||
}
|
|
||||||
|
|
||||||
export type HARLog = {
|
|
||||||
version: string;
|
|
||||||
creator: HARCreator;
|
|
||||||
browser?: HARBrowser;
|
|
||||||
pages?: HARPage[];
|
|
||||||
entries: HAREntry[];
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARCreator = {
|
|
||||||
name: string;
|
|
||||||
version: string;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARBrowser = {
|
|
||||||
name: string;
|
|
||||||
version: string;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARPage = {
|
|
||||||
startedDateTime: string;
|
|
||||||
id: string;
|
|
||||||
title: string;
|
|
||||||
pageTimings: HARPageTimings;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARPageTimings = {
|
|
||||||
onContentLoad?: number;
|
|
||||||
onLoad?: number;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HAREntry = {
|
|
||||||
pageref?: string;
|
|
||||||
startedDateTime: string;
|
|
||||||
time: number;
|
|
||||||
request: HARRequest;
|
|
||||||
response: HARResponse;
|
|
||||||
cache: HARCache;
|
|
||||||
timings: HARTimings;
|
|
||||||
serverIPAddress?: string;
|
|
||||||
connection?: string;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARRequest = {
|
|
||||||
method: string;
|
|
||||||
url: string;
|
|
||||||
httpVersion: string;
|
|
||||||
cookies: HARCookie[];
|
|
||||||
headers: HARHeader[];
|
|
||||||
queryString: HARQueryParameter[];
|
|
||||||
postData?: HARPostData;
|
|
||||||
headersSize: number;
|
|
||||||
bodySize: number;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARResponse = {
|
|
||||||
status: number;
|
|
||||||
statusText: string;
|
|
||||||
httpVersion: string;
|
|
||||||
cookies: HARCookie[];
|
|
||||||
headers: HARHeader[];
|
|
||||||
content: HARContent;
|
|
||||||
redirectURL: string;
|
|
||||||
headersSize: number;
|
|
||||||
bodySize: number;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARCookie = {
|
|
||||||
name: string;
|
|
||||||
value: string;
|
|
||||||
path?: string;
|
|
||||||
domain?: string;
|
|
||||||
expires?: string;
|
|
||||||
httpOnly?: boolean;
|
|
||||||
secure?: boolean;
|
|
||||||
sameSite?: string;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARHeader = {
|
|
||||||
name: string;
|
|
||||||
value: string;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARQueryParameter = {
|
|
||||||
name: string;
|
|
||||||
value: string;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARPostData = {
|
|
||||||
mimeType: string;
|
|
||||||
params: HARParam[];
|
|
||||||
text: string;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARParam = {
|
|
||||||
name: string;
|
|
||||||
value?: string;
|
|
||||||
fileName?: string;
|
|
||||||
contentType?: string;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARContent = {
|
|
||||||
size: number;
|
|
||||||
compression?: number;
|
|
||||||
mimeType: string;
|
|
||||||
text?: string;
|
|
||||||
encoding?: string;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARCache = {
|
|
||||||
beforeRequest?: HARCacheState;
|
|
||||||
afterRequest?: HARCacheState;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARCacheState = {
|
|
||||||
expires?: string;
|
|
||||||
lastAccess: string;
|
|
||||||
eTag: string;
|
|
||||||
hitCount: number;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
export type HARTimings = {
|
|
||||||
blocked?: number;
|
|
||||||
dns?: number;
|
|
||||||
connect?: number;
|
|
||||||
send: number;
|
|
||||||
wait: number;
|
|
||||||
receive: number;
|
|
||||||
ssl?: number;
|
|
||||||
comment?: string;
|
|
||||||
};
|
|
||||||
1
packages/playwright-core/types/types.d.ts
vendored
1
packages/playwright-core/types/types.d.ts
vendored
|
|
@ -17,7 +17,6 @@
|
||||||
import { Protocol } from 'playwright-core/types/protocol';
|
import { Protocol } from 'playwright-core/types/protocol';
|
||||||
import { ChildProcess } from 'child_process';
|
import { ChildProcess } from 'child_process';
|
||||||
import { EventEmitter } from 'events';
|
import { EventEmitter } from 'events';
|
||||||
import { HARResponse } from 'playwright-core/types/har';
|
|
||||||
import { Readable } from 'stream';
|
import { Readable } from 'stream';
|
||||||
import { ReadStream } from 'fs';
|
import { ReadStream } from 'fs';
|
||||||
import { Serializable, EvaluationArgument, PageFunction, PageFunctionOn, SmartHandle, ElementHandleForTag, BindingSource } from 'playwright-core/types/structs';
|
import { Serializable, EvaluationArgument, PageFunction, PageFunctionOn, SmartHandle, ElementHandleForTag, BindingSource } from 'playwright-core/types/structs';
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
|
|
||||||
import { test as base, expect } from './pageTest';
|
import { test as base, expect } from './pageTest';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import type { HARFile, HARResponse } from 'playwright-core/types/har';
|
import type * as har from 'playwright-core/lib/server/har/har';
|
||||||
|
|
||||||
const it = base.extend<{
|
const it = base.extend<{
|
||||||
// We access test servers at 10.0.2.2 from inside the browser on Android,
|
// We access test servers at 10.0.2.2 from inside the browser on Android,
|
||||||
|
|
@ -327,7 +327,7 @@ it('should fulfill with har response', async ({ page, isAndroid, asset }) => {
|
||||||
it.fixme(isAndroid);
|
it.fixme(isAndroid);
|
||||||
|
|
||||||
const harPath = asset('har-fulfill.har');
|
const harPath = asset('har-fulfill.har');
|
||||||
const har = JSON.parse(await fs.promises.readFile(harPath, 'utf-8')) as HARFile;
|
const har = JSON.parse(await fs.promises.readFile(harPath, 'utf-8')) as har.HARFile;
|
||||||
await page.route('**/*', async route => {
|
await page.route('**/*', async route => {
|
||||||
const response = findResponse(har, route.request().url());
|
const response = findResponse(har, route.request().url());
|
||||||
const headers = {};
|
const headers = {};
|
||||||
|
|
@ -346,7 +346,7 @@ it('should fulfill with har response', async ({ page, isAndroid, asset }) => {
|
||||||
await expect(page.locator('body')).toHaveCSS('background-color', 'rgb(0, 255, 255)');
|
await expect(page.locator('body')).toHaveCSS('background-color', 'rgb(0, 255, 255)');
|
||||||
});
|
});
|
||||||
|
|
||||||
function findResponse(har: HARFile, url: string): HARResponse {
|
function findResponse(har: har.HARFile, url: string): har.Response {
|
||||||
let entry;
|
let entry;
|
||||||
const originalUrl = url;
|
const originalUrl = url;
|
||||||
while (url.trim()) {
|
while (url.trim()) {
|
||||||
|
|
|
||||||
1
utils/generate_types/overrides.d.ts
vendored
1
utils/generate_types/overrides.d.ts
vendored
|
|
@ -16,7 +16,6 @@
|
||||||
import { Protocol } from 'playwright-core/types/protocol';
|
import { Protocol } from 'playwright-core/types/protocol';
|
||||||
import { ChildProcess } from 'child_process';
|
import { ChildProcess } from 'child_process';
|
||||||
import { EventEmitter } from 'events';
|
import { EventEmitter } from 'events';
|
||||||
import { HARResponse } from 'playwright-core/types/har';
|
|
||||||
import { Readable } from 'stream';
|
import { Readable } from 'stream';
|
||||||
import { ReadStream } from 'fs';
|
import { ReadStream } from 'fs';
|
||||||
import { Serializable, EvaluationArgument, PageFunction, PageFunctionOn, SmartHandle, ElementHandleForTag, BindingSource } from 'playwright-core/types/structs';
|
import { Serializable, EvaluationArgument, PageFunction, PageFunctionOn, SmartHandle, ElementHandleForTag, BindingSource } from 'playwright-core/types/structs';
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue