@@ -61,7 +61,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
61
61
return (mod && mod.__esModule) ? mod : { "default": mod };
62
62
};
63
63
Object.defineProperty(exports, "__esModule", ({ value: true }));
64
- exports.getDependencies = exports.listDeps = void 0;
64
+ exports.getDependencies = exports.getModuleGraph = exports.listDirectDeps = void 0;
65
65
const core = __importStar(__nccwpck_require__(2186));
66
66
const path_1 = __importDefault(__nccwpck_require__(1017));
67
67
const constants_1 = __nccwpck_require__(9677);
@@ -79,30 +79,64 @@ const parseDependency = (line) => {
79
79
return;
80
80
}
81
81
};
82
- const listDeps = (dir, module = '') => {
83
- let output = (0, child_process_1.execSync)(`go list -f {{.Deps}} ${module}`, {
82
+ const parseModuleUrl = (m) => {
83
+ const [url, version = ''] = m.split('@');
84
+ const [domain, owner, repo] = url.split('/');
85
+ return { module: [domain, owner, repo].join('/'), version };
86
+ };
87
+ const listDirectDeps = (dir) => {
88
+ let output = (0, child_process_1.execSync)(`go list -f '{{if not .Indirect}}{{.}}{{end}}' -m all`, { cwd: resolveDir(dir) }).toString();
89
+ return output
90
+ .split('\n')
91
+ .map((d) => {
92
+ const [module, version = ''] = d.split(' ');
93
+ return { module, version };
94
+ })
95
+ .filter((entry) => filterDependency(entry.module));
96
+ };
97
+ exports.listDirectDeps = listDirectDeps;
98
+ const getModuleGraph = (dir) => {
99
+ const output = (0, child_process_1.execSync)(`go mod graph`, {
84
100
cwd: resolveDir(dir),
85
101
}).toString();
86
- // trim `[]` at start and end of string
87
- output = output.slice(1, -1);
88
- return output.split(/\s+/).filter(filterDependency);
102
+ const graph = {};
103
+ output.split('\n').forEach((line) => {
104
+ if (!line) {
105
+ return;
106
+ }
107
+ const [parent, child] = line.split(' ');
108
+ const mod = parseModuleUrl(parent);
109
+ const childMod = parseModuleUrl(child);
110
+ const key = `${mod.module}@${mod.version}`;
111
+ graph[key] = graph[key] || [];
112
+ if (childMod.module !== key) {
113
+ graph[key].push(childMod);
114
+ }
115
+ });
116
+ Object.entries(graph).forEach(([key, deps]) => {
117
+ graph[key] = (0, lodash_1.uniqBy)(deps, 'module');
118
+ });
119
+ return graph;
89
120
};
90
- exports.listDeps = listDeps ;
121
+ exports.getModuleGraph = getModuleGraph ;
91
122
const getDependencies = (dir = '') => {
92
- const direct = (0, exports.listDeps)(dir);
93
- let dependencies = direct.map((d) => ({
94
- source: parseDependency(d),
95
- dependencies: (0, exports.listDeps)(dir, d).map((d) => ({ source: parseDependency(d) })),
96
- }));
97
- // Merge direct dependencies with the same source
98
- // and remove self dependencies
99
- const groups = (0, lodash_1.groupBy)(dependencies, 'source');
100
- return Object.entries(groups).map(([source, group]) => {
123
+ const graph = (0, exports.getModuleGraph)(dir);
124
+ const direct = (0, exports.listDirectDeps)(dir);
125
+ let dependencies = direct
126
+ .filter((d) => filterDependency(d.module))
127
+ .map((d) => {
128
+ const url = parseModuleUrl(d.module).module;
129
+ const deps = graph[`${url}@${d.version}`] || [];
101
130
return {
102
- source,
103
- dependencies: (0, lodash_1.uniqBy)(group.flatMap((g) => g.dependencies), 'source').filter((d) => d.source !== source),
131
+ source: parseDependency(d.module),
132
+ dependencies: deps
133
+ .filter((d) => filterDependency(d.module))
134
+ .map((d) => ({
135
+ source: parseDependency(d.module),
136
+ })),
104
137
};
105
138
});
139
+ return dependencies;
106
140
};
107
141
exports.getDependencies = getDependencies;
108
142
0 commit comments