Add download file API

Summary: Changelog: Expose "downloadFile" API to Flipper plugins. Allow them to download files form the web to Flipper Server.

Reviewed By: mweststrate

Differential Revision: D32950685

fbshipit-source-id: 7b7f666e165ff7bf209230cdc96078272ede3616
This commit is contained in:
Andrey Goncharov
2021-12-10 06:34:37 -08:00
committed by Facebook GitHub Bot
parent 4cb80a452f
commit 92f0ed67f4
12 changed files with 271 additions and 10 deletions

View File

@@ -91,6 +91,7 @@ test('Correct top level API exposed', () => {
"DevicePluginClient",
"DeviceType",
"DialogResult",
"DownloadFileResponse",
"Draft",
"ElementAttribute",
"ElementData",

View File

@@ -40,6 +40,7 @@ export {
FileDescriptor,
FileEncoding,
RemoteServerContext,
DownloadFileResponse,
} from './plugin/FlipperLib';
export {
MenuEntry,

View File

@@ -18,6 +18,9 @@ import {
ExecOut,
BufferEncoding,
MkdirOptions,
DownloadFileStartOptions,
DownloadFileStartResponse,
DownloadFileUpdate,
} from 'flipper-common';
export type FileEncoding = 'utf-8' | 'base64';
@@ -28,6 +31,13 @@ export interface FileDescriptor {
path?: string;
}
export interface DownloadFileResponse extends DownloadFileStartResponse {
/**
* Indicates whether a download is completed. Resolves with the number of downloaded bytes. Rejects if the download has errors.
*/
completed: Promise<number>;
}
export type RemoteServerContext = {
childProcess: {
exec(
@@ -49,6 +59,13 @@ export type RemoteServerContext = {
): Promise<void>;
copyFile(src: string, dest: string, flags?: number): Promise<void>;
};
downloadFile(
url: string,
dest: string,
options?: DownloadFileStartOptions & {
onProgressUpdate?: (progressUpdate: DownloadFileUpdate) => void;
},
): Promise<DownloadFileResponse>;
};
/**

View File

@@ -400,6 +400,7 @@ export function createMockFlipperLib(options?: StartPluginOptions): FlipperLib {
mkdir: jest.fn(),
copyFile: jest.fn(),
},
downloadFile: jest.fn(),
},
};
}

View File

@@ -26,7 +26,7 @@ import {
getFlipperLib,
} from '../plugin/FlipperLib';
import {fromUint8Array} from 'js-base64';
import {assertNever} from '../utils/assertNever';
import {assertNever} from 'flipper-common';
export type FileSelectorProps = {
/**

View File

@@ -1,14 +0,0 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
export const assertNever: (val: never) => asserts val = (val) => {
if (val) {
throw new Error(`Assert never failed. Received ${val}`);
}
};