UNPKG

1.08 kBPlain TextView Raw
1import fs from 'fs';
2import path from 'path';
3import applyPlugins from './applyPlugins';
4
5export const getPluginsList = (ctx: any): [Error, Array<string>] => {
6 const { root, rootPkg } = ctx;
7 let pluginList: any = [];
8 let err = null;
9 let json: any = {};
10 try {
11 const data = fs.readFileSync(rootPkg, 'utf-8');
12 json = JSON.parse(data);
13 } catch (error) {
14 err = error;
15 }
16
17 if (!json.dependencies) {
18 return [err, pluginList];
19 }
20
21 const deps = json.dependencies || json.devDependencies || {};
22 const plugins = Object.keys(deps).filter((name) => {
23 if (!/^feflow-plugin-|^@[^/]+\/feflow-plugin-/.test(name)) {
24 return false;
25 }
26 const pluginPath = path.join(root, 'node_modules', name);
27 return fs.existsSync(pluginPath);
28 });
29
30 pluginList = plugins;
31
32 return [err, pluginList];
33};
34
35export default function loadPlugins(ctx: any): Promise<void> {
36 return new Promise<any>((resolve, reject) => {
37 const [err, plugins] = getPluginsList(ctx);
38 if (err) {
39 reject(err);
40 }
41 applyPlugins(plugins)(ctx);
42 resolve();
43 });
44}
45
\No newline at end of file