Expose a subset of flipper-plugin to flipper server

Summary: Flipper plugins rely on 'flipper-plugin' package being accessible from 'global'. Expose a subset (without UI stuff) of flipper-plugin to server add-ons

Reviewed By: mweststrate

Differential Revision: D34400811

fbshipit-source-id: e0079ddfa67e66c1b24ab02d7682917ddfc84aaf
This commit is contained in:
Andrey Goncharov
2022-02-28 03:50:34 -08:00
committed by Facebook GitHub Bot
parent 9449f61adb
commit aec05533d7
8 changed files with 80 additions and 10 deletions

View File

@@ -10,10 +10,20 @@
import {CallExpression} from '@babel/types';
import {NodePath} from '@babel/traverse';
import {resolve} from 'path';
import {BUILTINS} from './electron-requires';
const pluginsRootDir = resolve(__dirname, '../../plugins');
function isPlugin(path: string) {
// We should bundle dependencies for plugins
return path.startsWith(pluginsRootDir);
}
module.exports = () => ({
name: 'change-require-to-electronRequire-in-server',
visitor: {
CallExpression(path: NodePath<CallExpression>) {
CallExpression(path: NodePath<CallExpression>, state: any) {
const node = path.node;
if (
node.type === 'CallExpression' &&
@@ -25,13 +35,22 @@ module.exports = () => ({
const source = node.arguments[0].value;
if (
// relative files should be bundled
!source.startsWith('./') &&
!source.startsWith('../') &&
source.startsWith('./') ||
source.startsWith('../') ||
// other packages from the workspace should be bundled up and transformed!
!source.startsWith('flipper-')
source.startsWith('flipper-') ||
// Dependencies for bundled plugins (server add-ons) should be included
(isPlugin(state.file.opts.filename) &&
// yet we should exclude built-ins
!(
BUILTINS.includes(source) ||
BUILTINS.some((moduleName) => source.startsWith(`${moduleName}/`))
))
) {
node.callee.name = 'electronRequire';
return;
}
node.callee.name = 'electronRequire';
}
if (
node.callee.type === 'MemberExpression' &&