UNPKG

1.71 kBJavaScriptView Raw
1var fs = require('fs');
2var path = require('path');
3
4function getModuleVersion(dependency) {
5 var NODE_MODULES = 'node_modules';
6 var dp = require.resolve(dependency);
7 var pkgPath = path.resolve(dp.substring(0, dp.lastIndexOf(NODE_MODULES)), NODE_MODULES, dependency, 'package.json');
8 var pkg = require(pkgPath);
9 return pkg.version;
10}
11
12function getCurrentVersion(dependencies) {
13 var disable = false;
14 var result = {};
15 dependencies.forEach(function (dependency) {
16 if (path.isAbsolute(dependency)) {
17 disable = true;
18 } else {
19 result[dependency] = getModuleVersion(dependency);
20 }
21 });
22 return !disable && result;
23}
24
25function getVersionFilePath(dllPath, name) {
26 return path.resolve(dllPath, name + '.version.json');
27}
28
29function getOldVersion(dllPath, name) {
30 var versionPath = getVersionFilePath(dllPath, name);
31 if (fs.existsSync(versionPath)) {
32 return require(versionPath);
33 }
34 return null;
35}
36
37exports.record = function (dllPath, chunk) {
38 var name = chunk.name;
39 var dependencies = chunk.dependencies;
40 var currentVersions = getCurrentVersion(dependencies);
41 var versionPath = getVersionFilePath(dllPath, name);
42 fs.writeFileSync(versionPath, JSON.stringify(currentVersions));
43};
44
45exports.isExpired = function (dllPath, chunk) {
46 var name = chunk.name;
47 var dependencies = chunk.dependencies;
48 var currentVersions = getCurrentVersion(dependencies);
49 var oldVersions = getOldVersion(dllPath, name);
50 return !currentVersions ||
51 !oldVersions ||
52 Object.keys(currentVersions).some(function (key) {
53 return currentVersions[key] !== oldVersions[key];
54 }) ||
55 (Object.keys(currentVersions).length !== Object.keys(oldVersions).length);
56};