1 | const
|
2 | extensionJson = require('./extension-json'),
|
3 | Extension = require('./Extension'),
|
4 | merge = require('webpack-merge')
|
5 |
|
6 | class ExtensionsRunner {
|
7 | constructor () {
|
8 | const list = extensionJson.getList()
|
9 |
|
10 | this.hooks = {}
|
11 | this.extensions = Object.keys(list).map(ext => new Extension(ext))
|
12 | }
|
13 |
|
14 | async registerExtensions (ctx) {
|
15 | this.hooks = {}
|
16 | for (let ext of this.extensions) {
|
17 | const hooks = await ext.run(ctx)
|
18 | this.hooks = merge(this.hooks, hooks)
|
19 | }
|
20 | }
|
21 |
|
22 | async runHook (hookName, fn) {
|
23 | if (this.hooks[hookName] && this.hooks[hookName].length > 0) {
|
24 | for (let hook of this.hooks[hookName]) {
|
25 | await fn(hook)
|
26 | }
|
27 | }
|
28 | }
|
29 | }
|
30 |
|
31 | module.exports = new ExtensionsRunner()
|