feedback 2
This commit is contained in:
parent
4f72d983a7
commit
f86c2e6c27
|
|
@ -269,34 +269,25 @@ export async function convertInputFiles(files: string | FilePayload | string[] |
|
|||
if (context._connection.isRemote()) {
|
||||
let streams: channels.WritableStreamChannel[] | undefined;
|
||||
let localPaths: string[] | undefined;
|
||||
for (const item of items as string[]) {
|
||||
if ((await fs.promises.stat(item)).isDirectory()) {
|
||||
const files = (await fs.promises.readdir(item, { withFileTypes: true, recursive: true })).filter(f => f.isFile()).map(f => path.join(item, f.name));
|
||||
const { writableStreams, dir } = await context._wrapApiCall(async () => context._channel.createTempDirectory({
|
||||
root: item,
|
||||
items: await Promise.all(files.map(async f => {
|
||||
const lastModifiedMs = (await fs.promises.stat(f)).mtimeMs;
|
||||
return {
|
||||
name: path.relative(item, f),
|
||||
lastModifiedMs
|
||||
};
|
||||
})),
|
||||
}), true);
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const writable = WritableStream.from(writableStreams[i]);
|
||||
await pipelineAsync(fs.createReadStream(files[i]), writable.stream());
|
||||
}
|
||||
localPaths ??= [];
|
||||
localPaths.push(dir);
|
||||
} else {
|
||||
const lastModifiedMs = (await fs.promises.stat(item)).mtimeMs;
|
||||
const { writableStream } = await context._wrapApiCall(() => context._channel.createTempFile({ name: path.basename(item), lastModifiedMs }), true);
|
||||
const writable = WritableStream.from(writableStream);
|
||||
await pipelineAsync(fs.createReadStream(item), writable.stream());
|
||||
streams ??= [];
|
||||
streams.push(writableStream);
|
||||
await Promise.all((items as string[]).map(async item => {
|
||||
const isDirectory = (await fs.promises.stat(item)).isDirectory();
|
||||
const files = isDirectory ? (await fs.promises.readdir(item, { withFileTypes: true, recursive: true })).filter(f => f.isFile()).map(f => path.join(item, f.name)) : [item];
|
||||
const { writableStreams, remoteDir } = await context._wrapApiCall(async () => context._channel.createTempFiles({
|
||||
rootDirName: isDirectory ? item : undefined,
|
||||
items: await Promise.all(files.map(f => fileToTempFileParams(f))),
|
||||
}), true);
|
||||
for (let i = 0; i < files.length; i++) {
|
||||
const writable = WritableStream.from(writableStreams[i]);
|
||||
await pipelineAsync(fs.createReadStream(files[i]), writable.stream());
|
||||
}
|
||||
}
|
||||
if (isDirectory) {
|
||||
localPaths ??= [];
|
||||
localPaths.push(remoteDir);
|
||||
} else {
|
||||
streams ??= [];
|
||||
streams.push(...writableStreams);
|
||||
}
|
||||
}));
|
||||
return { streams, localPaths };
|
||||
}
|
||||
return { localPaths: items.map(f => path.resolve(f as string)) as string[] };
|
||||
|
|
@ -308,6 +299,11 @@ export async function convertInputFiles(files: string | FilePayload | string[] |
|
|||
return { payloads };
|
||||
}
|
||||
|
||||
async function fileToTempFileParams(file: string): Promise<channels.BrowserContextCreateTempFilesParams['items'][0]> {
|
||||
const lastModifiedMs = (await fs.promises.stat(file)).mtimeMs;
|
||||
return { name: path.basename(file), lastModifiedMs };
|
||||
}
|
||||
|
||||
export function determineScreenshotType(options: { path?: string, type?: 'png' | 'jpeg' }): 'png' | 'jpeg' | undefined {
|
||||
if (options.path) {
|
||||
const mimeType = mime.getType(options.path);
|
||||
|
|
|
|||
|
|
@ -951,22 +951,15 @@ scheme.BrowserContextHarExportParams = tObject({
|
|||
scheme.BrowserContextHarExportResult = tObject({
|
||||
artifact: tChannel(['Artifact']),
|
||||
});
|
||||
scheme.BrowserContextCreateTempFileParams = tObject({
|
||||
name: tString,
|
||||
lastModifiedMs: tOptional(tNumber),
|
||||
});
|
||||
scheme.BrowserContextCreateTempFileResult = tObject({
|
||||
writableStream: tChannel(['WritableStream']),
|
||||
});
|
||||
scheme.BrowserContextCreateTempDirectoryParams = tObject({
|
||||
root: tString,
|
||||
scheme.BrowserContextCreateTempFilesParams = tObject({
|
||||
rootDirName: tOptional(tString),
|
||||
items: tArray(tObject({
|
||||
name: tString,
|
||||
lastModifiedMs: tOptional(tNumber),
|
||||
})),
|
||||
});
|
||||
scheme.BrowserContextCreateTempDirectoryResult = tObject({
|
||||
dir: tString,
|
||||
scheme.BrowserContextCreateTempFilesResult = tObject({
|
||||
remoteDir: tString,
|
||||
writableStreams: tArray(tChannel(['WritableStream'])),
|
||||
});
|
||||
scheme.BrowserContextUpdateSubscriptionParams = tObject({
|
||||
|
|
|
|||
|
|
@ -178,22 +178,13 @@ export class BrowserContextDispatcher extends Dispatcher<BrowserContext, channel
|
|||
return false;
|
||||
}
|
||||
|
||||
async createTempFile(params: channels.BrowserContextCreateTempFileParams): Promise<channels.BrowserContextCreateTempFileResult> {
|
||||
async createTempFiles(params: channels.BrowserContextCreateTempFilesParams): Promise<channels.BrowserContextCreateTempFilesResult> {
|
||||
const dir = this._context._browser.options.artifactsDir;
|
||||
const tmpDir = path.join(dir, 'upload-' + createGuid());
|
||||
await fs.promises.mkdir(tmpDir);
|
||||
this._context._tempDirs.push(tmpDir);
|
||||
const file = fs.createWriteStream(path.join(tmpDir, params.name));
|
||||
return { writableStream: new WritableStreamDispatcher(this, file, params.lastModifiedMs) };
|
||||
}
|
||||
|
||||
async createTempDirectory(params: channels.BrowserContextCreateTempDirectoryParams): Promise<channels.BrowserContextCreateTempDirectoryResult> {
|
||||
const dir = this._context._browser.options.artifactsDir;
|
||||
const tmpDir = path.join(dir, 'upload-' + createGuid());
|
||||
const tempDirWithRootName = path.join(tmpDir, path.basename(params.root));
|
||||
const tempDirWithRootName = path.join(tmpDir, params.rootDirName ? path.basename(params.rootDirName) : '');
|
||||
await fs.promises.mkdir(tempDirWithRootName, { recursive: true });
|
||||
return {
|
||||
dir: tempDirWithRootName,
|
||||
remoteDir: tempDirWithRootName,
|
||||
writableStreams: await Promise.all(params.items.map(async item => {
|
||||
await fs.promises.mkdir(path.dirname(path.join(tempDirWithRootName, item.name)), { recursive: true });
|
||||
const file = fs.createWriteStream(path.join(tempDirWithRootName, item.name));
|
||||
|
|
|
|||
|
|
@ -1458,8 +1458,7 @@ export interface BrowserContextChannel extends BrowserContextEventTarget, EventT
|
|||
newCDPSession(params: BrowserContextNewCDPSessionParams, metadata?: CallMetadata): Promise<BrowserContextNewCDPSessionResult>;
|
||||
harStart(params: BrowserContextHarStartParams, metadata?: CallMetadata): Promise<BrowserContextHarStartResult>;
|
||||
harExport(params: BrowserContextHarExportParams, metadata?: CallMetadata): Promise<BrowserContextHarExportResult>;
|
||||
createTempFile(params: BrowserContextCreateTempFileParams, metadata?: CallMetadata): Promise<BrowserContextCreateTempFileResult>;
|
||||
createTempDirectory(params: BrowserContextCreateTempDirectoryParams, metadata?: CallMetadata): Promise<BrowserContextCreateTempDirectoryResult>;
|
||||
createTempFiles(params: BrowserContextCreateTempFilesParams, metadata?: CallMetadata): Promise<BrowserContextCreateTempFilesResult>;
|
||||
updateSubscription(params: BrowserContextUpdateSubscriptionParams, metadata?: CallMetadata): Promise<BrowserContextUpdateSubscriptionResult>;
|
||||
clockInstallFakeTimers(params: BrowserContextClockInstallFakeTimersParams, metadata?: CallMetadata): Promise<BrowserContextClockInstallFakeTimersResult>;
|
||||
clockRunAllTimers(params?: BrowserContextClockRunAllTimersParams, metadata?: CallMetadata): Promise<BrowserContextClockRunAllTimersResult>;
|
||||
|
|
@ -1738,28 +1737,18 @@ export type BrowserContextHarExportOptions = {
|
|||
export type BrowserContextHarExportResult = {
|
||||
artifact: ArtifactChannel,
|
||||
};
|
||||
export type BrowserContextCreateTempFileParams = {
|
||||
name: string,
|
||||
lastModifiedMs?: number,
|
||||
};
|
||||
export type BrowserContextCreateTempFileOptions = {
|
||||
lastModifiedMs?: number,
|
||||
};
|
||||
export type BrowserContextCreateTempFileResult = {
|
||||
writableStream: WritableStreamChannel,
|
||||
};
|
||||
export type BrowserContextCreateTempDirectoryParams = {
|
||||
root: string,
|
||||
export type BrowserContextCreateTempFilesParams = {
|
||||
rootDirName?: string,
|
||||
items: {
|
||||
name: string,
|
||||
lastModifiedMs?: number,
|
||||
}[],
|
||||
};
|
||||
export type BrowserContextCreateTempDirectoryOptions = {
|
||||
|
||||
export type BrowserContextCreateTempFilesOptions = {
|
||||
rootDirName?: string,
|
||||
};
|
||||
export type BrowserContextCreateTempDirectoryResult = {
|
||||
dir: string,
|
||||
export type BrowserContextCreateTempFilesResult = {
|
||||
remoteDir: string,
|
||||
writableStreams: WritableStreamChannel[],
|
||||
};
|
||||
export type BrowserContextUpdateSubscriptionParams = {
|
||||
|
|
|
|||
|
|
@ -1184,16 +1184,9 @@ BrowserContext:
|
|||
returns:
|
||||
artifact: Artifact
|
||||
|
||||
createTempFile:
|
||||
createTempFiles:
|
||||
parameters:
|
||||
name: string
|
||||
lastModifiedMs: number?
|
||||
returns:
|
||||
writableStream: WritableStream
|
||||
|
||||
createTempDirectory:
|
||||
parameters:
|
||||
root: string
|
||||
rootDirName: string?
|
||||
items:
|
||||
type: array
|
||||
items:
|
||||
|
|
@ -1202,7 +1195,7 @@ BrowserContext:
|
|||
name: string
|
||||
lastModifiedMs: number?
|
||||
returns:
|
||||
dir: string
|
||||
remoteDir: string
|
||||
writableStreams:
|
||||
type: array
|
||||
items: WritableStream
|
||||
|
|
|
|||
Loading…
Reference in a new issue