-
Notifications
You must be signed in to change notification settings - Fork 0
/
package-json-links.js
71 lines (62 loc) · 2.21 KB
/
package-json-links.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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
const fs = require('fs');
const core = require('@actions/core');
const YAML = require('yaml');
const rxDependency = /([a-z_-]+)$/;
const getProjectFromDependency = (dependency) => {
const match = dependency.match(rxDependency);
return match[1];
};
const readFromPackageJson = async (configYaml) => {
// Parsing the configuration
const config = YAML.parse(configYaml);
// Parsing the lock file as JSON
const lock = JSON.parse(fs.readFileSync('package-lock.json'));
// ... and get the list of dependencies
const dependencies = lock.dependencies;
// Resulting links
const links = {};
// For each link in the configuration
config.forEach(link => {
const dependency = link.dependency;
if (dependency) {
// Gets the dependency declaration in the lock file
const lockDependency = dependencies[dependency];
if (lockDependency) {
// Gets the version
const version = lockDependency.version;
if (version) {
// Project name
let project = link.project;
if (!project) {
project = getProjectFromDependency(dependency);
}
// Build reference
let buildRef = version;
// Prefix
const prefix = link['prefix'];
if (prefix) {
buildRef = `${prefix}${buildRef}`;
}
// Label
if (link['build-label'] === true) {
buildRef = `#${buildRef}`;
}
// Adding the link
links[project] = buildRef;
} else {
core.warning(`No dependency version found for: ${dependency}`);
}
}
// No dependency found, warning and going on
else {
core.warning(`No dependency found for: ${dependency}`);
}
}
});
// OK
return links;
};
module.exports = {
readFromPackageJson: readFromPackageJson,
getProjectFromDependency: getProjectFromDependency
};