UNPKG

zephyr-xpack-internal

Version:

Xpack internals for Zephyr

61 lines (60 loc) • 2.5 kB
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