Files
flipper/desktop/static/ensurePluginFoldersWatchable.ts
Anton Nikolaev c21ccedf14 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
2020-04-30 04:29:41 -07:00

39 lines
1.1 KiB
TypeScript

/**
* 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;
}