Dev mode: fixed loading plugins located outside of the Flipper source root folder

Summary: Dev mode: fixed loading of plugins located outside of the Flipper source root folder, e.g. in ~/flipper-plugins as suggested in tutorial docs.

Reviewed By: passy

Differential Revision: D21306639

fbshipit-source-id: bb9044b25324065f0c12169b95fbe663da8d4305
This commit is contained in:
Anton Nikolaev
2020-04-30 04:25:28 -07:00
committed by Facebook GitHub Bot
parent b27f8ee236
commit c21ccedf14
11 changed files with 172 additions and 45 deletions

View File

@@ -0,0 +1,38 @@
/**
* 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
*/
import getPluginFolders from './getPluginFolders';
import fs from 'fs-extra';
const watchmanconfigName = '.watchmanconfig';
import path from 'path';
export default async function ensurePluginFoldersWatchable() {
const pluginFolders = await getPluginFolders();
for (const pluginFolder of pluginFolders) {
if (!(await hasParentWithWatchmanConfig(pluginFolder))) {
// If no watchman config found in the plugins folder or any its parent, we need to create it.
// Otherwise we won't be able to listen for plugin changes.
await fs.writeJson(path.join(pluginFolder, watchmanconfigName), {});
}
}
}
async function hasParentWithWatchmanConfig(dir: string): Promise<boolean> {
if (await fs.pathExists(path.join(dir, watchmanconfigName))) {
return true;
} else {
const parent = path.dirname(dir);
if (parent && parent != '' && parent !== dir) {
return await hasParentWithWatchmanConfig(parent);
}
}
return false;
}