@backstage/cli
Version:
CLI for developing Backstage plugins and apps
76 lines (72 loc) • 2.08 kB
JavaScript
var minimatch = require('minimatch');
var getPackages = require('@manypkg/get-packages');
var errors = require('../errors.cjs.js');
var yarn = require('../yarn.cjs.js');
var run = require('../run.cjs.js');
const DEP_TYPES = [
"dependencies",
"devDependencies",
"peerDependencies",
"optionalDependencies"
];
async function fetchPackageInfo(name) {
const yarnVersion = await yarn.detectYarnVersion();
const cmd = yarnVersion === "classic" ? ["info"] : ["npm", "info"];
try {
const { stdout: output } = await run.execFile(
"yarn",
[...cmd, "--json", name],
{ shell: true }
);
if (!output) {
throw new errors.NotFoundError(
`No package information found for package ${name}`
);
}
if (yarnVersion === "berry") {
return JSON.parse(output);
}
const info = JSON.parse(output);
if (info.type !== "inspect") {
throw new Error(`Received unknown yarn info for ${name}, ${output}`);
}
return info.data;
} catch (error) {
if (yarnVersion === "classic") {
throw error;
}
if (error?.stdout.includes("Response Code: 404")) {
throw new errors.NotFoundError(
`No package information found for package ${name}`
);
}
throw error;
}
}
async function mapDependencies(targetDir, pattern) {
const { packages, root } = await getPackages.getPackages(targetDir);
packages.push(root);
const dependencyMap = /* @__PURE__ */ new Map();
for (const pkg of packages) {
const deps = DEP_TYPES.flatMap(
(t) => Object.entries(pkg.packageJson[t] ?? {})
);
for (const [name, range] of deps) {
if (minimatch.minimatch(name, pattern)) {
dependencyMap.set(
name,
(dependencyMap.get(name) ?? []).concat({
range,
name: pkg.packageJson.name,
location: pkg.dir
})
);
}
}
}
return dependencyMap;
}
exports.fetchPackageInfo = fetchPackageInfo;
exports.mapDependencies = mapDependencies;
//# sourceMappingURL=packages.cjs.js.map
;