forked from opencomponents/base-templates
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
45 lines (39 loc) · 1.24 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
'use strict';
/*
* External Dependencies handler for webpack
* Returns an array with handlers to indicates dependencies that should not be
* bundled by webPack but instead remain requested by the resulting bundle.
* For more info http://webpack.github.io/docs/configuration.html#externals
*
*/
const coreModules = require('builtin-modules');
const strings = require('oc-templates-messages');
const _ = require('lodash');
module.exports = dependencies => {
const deps = dependencies || {};
const missingExternalDependency = (dep, dependencies) =>
!_.includes(_.keys(dependencies), dep) && !_.includes(coreModules, dep);
const matcher = /^[a-z@][a-z\-\/0-9\.]+$/i;
return [
({ request }, callback) => {
if (matcher.test(request)) {
let dependencyName = request;
if (/^(?!@).*\//g.test(dependencyName)) {
dependencyName = dependencyName.substring(
0,
dependencyName.indexOf('/')
);
}
if (missingExternalDependency(dependencyName, deps)) {
return callback(
new Error(
strings.errors.missingDependency(JSON.stringify(dependencyName))
)
);
}
}
callback();
},
matcher
];
};