1 | import fs from 'fs';
|
2 | import path from 'path';
|
3 | import applyPlugins from './applyPlugins';
|
4 |
|
5 | export 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 |
|
35 | export 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 |