Copy RenderHost, FlipperLib initialization, device definition to flipper-frontend-core
Reviewed By: passy Differential Revision: D36129746 fbshipit-source-id: 15e32b9482d7fe3a24567d2e6bc087095b98226e
This commit is contained in:
committed by
Facebook GitHub Bot
parent
db49673d8a
commit
f0b5e7cadb
@@ -0,0 +1,72 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
*/
|
||||
|
||||
import {assertNever, DownloadFileUpdate} from 'flipper-common';
|
||||
import {FlipperLib, DownloadFileResponse} from 'flipper-plugin';
|
||||
import {RenderHost} from '../RenderHost';
|
||||
|
||||
export const downloadFileFactory =
|
||||
(renderHost: RenderHost): FlipperLib['remoteServerContext']['downloadFile'] =>
|
||||
async (url, dest, {onProgressUpdate, ...options} = {}) => {
|
||||
const downloadDescriptor = (await renderHost.flipperServer.exec(
|
||||
'download-file-start',
|
||||
url,
|
||||
dest,
|
||||
options,
|
||||
// Casting to DownloadFileResponse to add `completed` field to `downloadDescriptor`.
|
||||
)) as DownloadFileResponse;
|
||||
|
||||
let onProgressUpdateWrapped: (progressUpdate: DownloadFileUpdate) => void;
|
||||
const completed = new Promise<number>((resolve, reject) => {
|
||||
onProgressUpdateWrapped = (progressUpdate: DownloadFileUpdate) => {
|
||||
if (progressUpdate.id === downloadDescriptor.id) {
|
||||
const {status} = progressUpdate;
|
||||
switch (status) {
|
||||
case 'downloading': {
|
||||
onProgressUpdate?.(progressUpdate);
|
||||
break;
|
||||
}
|
||||
case 'success': {
|
||||
resolve(progressUpdate.downloaded);
|
||||
break;
|
||||
}
|
||||
case 'error': {
|
||||
reject(
|
||||
new Error(
|
||||
`File download failed. Last message: ${JSON.stringify(
|
||||
progressUpdate,
|
||||
)}`,
|
||||
),
|
||||
);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
assertNever(status);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
renderHost.flipperServer.on(
|
||||
'download-file-update',
|
||||
onProgressUpdateWrapped,
|
||||
);
|
||||
});
|
||||
|
||||
// eslint-disable-next-line promise/catch-or-return
|
||||
completed.finally(() => {
|
||||
renderHost.flipperServer.off(
|
||||
'download-file-update',
|
||||
onProgressUpdateWrapped,
|
||||
);
|
||||
});
|
||||
|
||||
downloadDescriptor.completed = completed;
|
||||
|
||||
return downloadDescriptor;
|
||||
};
|
||||
@@ -0,0 +1,113 @@
|
||||
/**
|
||||
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
*/
|
||||
|
||||
import {RemoteServerContext, FlipperLib} from 'flipper-plugin';
|
||||
import {
|
||||
BufferEncoding,
|
||||
ExecOptions,
|
||||
fsConstants,
|
||||
Logger,
|
||||
MkdirOptions,
|
||||
RmOptions,
|
||||
} from 'flipper-common';
|
||||
import constants from '../fb-stubs/constants';
|
||||
import {RenderHost} from '../RenderHost';
|
||||
import {downloadFileFactory} from './downloadFile';
|
||||
import {Base64} from 'js-base64';
|
||||
|
||||
export function baseFlipperLibImplementation(
|
||||
renderHost: RenderHost,
|
||||
logger: Logger,
|
||||
): Omit<
|
||||
FlipperLib,
|
||||
'enableMenuEntries' | 'selectPlugin' | 'showNotification' | 'createPaste'
|
||||
> {
|
||||
return {
|
||||
isFB: !constants.IS_PUBLIC_BUILD,
|
||||
logger,
|
||||
GK: renderHost.GK,
|
||||
writeTextToClipboard: renderHost.writeTextToClipboard,
|
||||
openLink: renderHost.openLink,
|
||||
importFile: renderHost.importFile,
|
||||
exportFile: renderHost.exportFile,
|
||||
paths: {
|
||||
appPath: renderHost.serverConfig.paths.appPath,
|
||||
homePath: renderHost.serverConfig.paths.homePath,
|
||||
staticPath: renderHost.serverConfig.paths.staticPath,
|
||||
tempPath: renderHost.serverConfig.paths.tempPath,
|
||||
},
|
||||
environmentInfo: {
|
||||
os: renderHost.serverConfig.environmentInfo.os,
|
||||
},
|
||||
remoteServerContext: {
|
||||
childProcess: {
|
||||
exec: async (
|
||||
command: string,
|
||||
options?: ExecOptions & {encoding?: BufferEncoding},
|
||||
) => renderHost.flipperServer.exec('node-api-exec', command, options),
|
||||
},
|
||||
fs: {
|
||||
access: async (path: string, mode?: number) =>
|
||||
renderHost.flipperServer.exec('node-api-fs-access', path, mode),
|
||||
pathExists: async (path: string, mode?: number) =>
|
||||
renderHost.flipperServer.exec('node-api-fs-pathExists', path, mode),
|
||||
unlink: async (path: string) =>
|
||||
renderHost.flipperServer.exec('node-api-fs-unlink', path),
|
||||
mkdir: (async (
|
||||
path: string,
|
||||
options?: {recursive?: boolean} & MkdirOptions,
|
||||
) =>
|
||||
renderHost.flipperServer.exec(
|
||||
'node-api-fs-mkdir',
|
||||
path,
|
||||
options,
|
||||
)) as RemoteServerContext['fs']['mkdir'],
|
||||
rm: async (path: string, options?: RmOptions) =>
|
||||
renderHost.flipperServer.exec('node-api-fs-rm', path, options),
|
||||
copyFile: async (src: string, dest: string, flags?: number) =>
|
||||
renderHost.flipperServer.exec(
|
||||
'node-api-fs-copyFile',
|
||||
src,
|
||||
dest,
|
||||
flags,
|
||||
),
|
||||
constants: fsConstants,
|
||||
stat: async (path: string) =>
|
||||
renderHost.flipperServer.exec('node-api-fs-stat', path),
|
||||
readlink: async (path: string) =>
|
||||
renderHost.flipperServer.exec('node-api-fs-readlink', path),
|
||||
readFile: (path, options) =>
|
||||
renderHost.flipperServer.exec('node-api-fs-readfile', path, options),
|
||||
readFileBinary: async (path) =>
|
||||
Base64.toUint8Array(
|
||||
await renderHost.flipperServer.exec(
|
||||
'node-api-fs-readfile-binary',
|
||||
path,
|
||||
),
|
||||
),
|
||||
writeFile: (path, contents, options) =>
|
||||
renderHost.flipperServer.exec(
|
||||
'node-api-fs-writefile',
|
||||
path,
|
||||
contents,
|
||||
options,
|
||||
),
|
||||
writeFileBinary: async (path, contents) => {
|
||||
const base64contents = Base64.fromUint8Array(contents);
|
||||
return await renderHost.flipperServer.exec(
|
||||
'node-api-fs-writefile-binary',
|
||||
path,
|
||||
base64contents,
|
||||
);
|
||||
},
|
||||
},
|
||||
downloadFile: downloadFileFactory(renderHost),
|
||||
},
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user