zephyr-xpack-internal
Version:
Xpack internals for Zephyr
61 lines (60 loc) • 2.5 kB
JavaScript
import "node:module";
import { existsSync, readFileSync } from "node:fs";
import { dirname, join, sep } from "node:path";
const findPackageJson = (filePath)=>{
if (!filePath || 0 === filePath.length) return;
if (existsSync(join(filePath.join(sep), 'package.json'))) try {
const file = readFileSync(join(filePath.join(sep), 'package.json'), 'utf-8');
return JSON.parse(file);
} catch (e) {
console.error(e);
}
filePath.pop();
return findPackageJson(filePath);
};
function buildVersionedDependencyMap(packageJson, dependencyGroup, resolveVersion) {
const dependencyNames = Object.keys(packageJson[dependencyGroup] ?? {});
return dependencyNames.reduce((dependencies, name)=>{
const version = resolveVersion(name);
if (!version) return dependencies;
const versionWithoutPatch = version.split(/[+-]/, 1)[0].split('.').slice(0, 2).join('.');
dependencies[`${name}-${versionWithoutPatch}`] = name;
return dependencies;
}, {});
}
function resolveInstalledPackageVersion(packageName, projectRequire) {
const packageJsonSpecifier = `${packageName}/package.json`;
try {
const packageJsonPath = projectRequire.resolve(packageJsonSpecifier);
return readPackageVersion(packageJsonPath);
} catch {
for (const lookupPath of projectRequire.resolve.paths(packageName) ?? []){
const version = readPackageVersion(join(lookupPath, packageJsonSpecifier));
if (version) return version;
}
}
try {
let currentDirectory = dirname(projectRequire.resolve(packageName));
while(true){
const packageJsonPath = join(currentDirectory, 'package.json');
const version = readPackageVersion(packageJsonPath);
if (version) return version;
const parentDirectory = dirname(currentDirectory);
if (parentDirectory === currentDirectory) return;
currentDirectory = parentDirectory;
}
} catch {
return;
}
}
function readPackageVersion(packageJsonPath) {
if (!existsSync(packageJsonPath)) return;
try {
const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf8'));
return 'string' == typeof packageJson.version ? packageJson.version : void 0;
} catch {
return;
}
}
export { buildVersionedDependencyMap, findPackageJson, resolveInstalledPackageVersion };
//# sourceMappingURL=find-package-json.mjs.map