Skip to content

Commit 91ded4f

Browse files
author
Ovidiu Barabula
committed
feat(core): load external plugins from project config
1 parent 38b2c04 commit 91ded4f

File tree

2 files changed

+67
-16
lines changed

2 files changed

+67
-16
lines changed

src/core.spec.ts

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,54 @@
11
import { expect } from 'chai';
22
import 'mocha';
33
import * as inquirerMock from '../test/inquirer-mock';
4-
import frontvue from './core';
4+
import frontvue, { loadConfigPlugins } from './core';
5+
import { configDefaults } from './tasks/task-init-project';
56

67

78
describe('Frontvue', () => {
89
it('instance', async () => {
910
const instance = await frontvue;
11+
expect(instance).to.be.an('object')
12+
.to.contain.keys('logger', 'name', 'run');
13+
}).timeout(20000);
14+
15+
16+
describe('loadConfigPlugins()', () => {
17+
let configFetched: boolean = false;
18+
let pluginUsed: boolean = false;
19+
let configManager: any;
20+
let pluginManager: any;
1021

11-
inquirerMock({
12-
fullName: 'John Doe',
13-
useDefault: false,
22+
beforeEach(() => {
23+
configFetched = false;
24+
pluginUsed = false;
25+
26+
// Mocking config manager
27+
configManager = {
28+
get: (...args: any[]) => {
29+
configFetched = true;
30+
return Promise.resolve({ plugins: ['some-plugin'] });
31+
},
32+
};
33+
// Mocking plugin manager
34+
pluginManager = {
35+
use(...args: any[]) {
36+
pluginUsed = true;
37+
return Promise.resolve(true);
38+
},
39+
};
1440
});
1541

16-
expect(instance).to.be.an('object');
17-
}).timeout(20000);
42+
43+
it('fetches configuration', async () => {
44+
await loadConfigPlugins(configManager, pluginManager);
45+
expect(configFetched).to.be.true;
46+
});
47+
48+
49+
it('calls plugin manager .use() method', async () => {
50+
await loadConfigPlugins(configManager, pluginManager);
51+
expect(pluginUsed).to.be.true;
52+
});
53+
});
1854
});

src/core.ts

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
* @since 0.1.0
66
*/
77

8-
import ConfigManager from './config-manager';
8+
import ConfigManager, { IConfigManager } from './config-manager';
9+
import ConfigManagerProxy from './config-manager/config-manager-proxy';
910
import ConfigWizard from './config-wizard';
10-
import PluginManager from './plugin-manager';
11+
import PluginManager, { PluginManager as IPluginManager } from './plugin-manager';
1112
import TaskManager from './task-manager';
1213
import taskInitProject from './tasks/task-init-project';
1314
import Logger, { ILogger } from './util/logger';
@@ -23,19 +24,25 @@ const taskManagerConfig = {
2324
],
2425
};
2526

26-
let plugins = [
27+
let internalPlugins = [
2728
taskInitProject,
28-
'stylus',
2929
];
3030

3131
/* test:start */
32-
// Remove external plugins when testing
33-
plugins = [
34-
taskInitProject,
35-
];
32+
// Stop internal plugin loading in TEST environment
33+
internalPlugins = [];
3634
/* test:end */
3735

3836

37+
/**
38+
* Get list of plugins from init config and register them
39+
*/
40+
export async function loadConfigPlugins(configManager: IConfigManager, pluginManager: IPluginManager) {
41+
const config = ConfigManagerProxy(configManager, 'init');
42+
await pluginManager.use(...await config.get('plugins'));
43+
}
44+
45+
3946
/**
4047
* Main Frontvue constructor
4148
*/
@@ -48,8 +55,16 @@ async function Frontvue() {
4855
const pluginManager = PluginManager(taskManager, configWizard);
4956
const { run } = taskManager;
5057

51-
// Use custom plugin(s)
52-
await pluginManager.use(...plugins);
58+
// Use internal plugin(s)
59+
await pluginManager.use(...internalPlugins);
60+
61+
// Load external plugins from configuration
62+
let loadExternalPlugins = loadConfigPlugins;
63+
/* test:start */
64+
// Stop external plugin loading in TEST environment by replacing the load function
65+
loadExternalPlugins = async () => undefined;
66+
/* test:end */
67+
await loadExternalPlugins(configManager, pluginManager);
5368

5469
// Return public API
5570
return Object.freeze({

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy