1 | function toArray(obj) {
|
2 | return typeof obj === 'object' ? Object.keys(obj) : []
|
3 | }
|
4 |
|
5 | class Plugins {
|
6 | constructor(list) {
|
7 | this.list = list
|
8 | this.isEmpty = list.length === 0
|
9 | }
|
10 |
|
11 | has(type) {
|
12 | return this.list.some(i => i.name === `@size-limit/${type}`)
|
13 | }
|
14 | }
|
15 |
|
16 | module.exports = function loadPlugins(pkg) {
|
17 | if (!pkg || !pkg.packageJson) return new Plugins([])
|
18 |
|
19 | let list = toArray(pkg.packageJson.dependencies)
|
20 | .concat(toArray(pkg.packageJson.devDependencies))
|
21 | .concat(toArray(pkg.packageJson.optionalDependencies))
|
22 | .filter(i => i.startsWith('@size-limit/'))
|
23 | .reduce(
|
24 | (all, i) =>
|
25 | all.concat(
|
26 | require(require.resolve(i, {
|
27 | paths: [process.cwd()]
|
28 | }))
|
29 | ),
|
30 | []
|
31 | )
|
32 |
|
33 | return new Plugins(list)
|
34 | }
|
35 |
|
36 | module.exports.Plugins = Plugins
|