mirror of
https://github.com/oven-sh/bun
synced 2026-02-09 18:38:55 +00:00
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import { readFileSync } from "fs";
|
|
|
|
var memoizeMap;
|
|
|
|
// This gives us a package version inline into the build without pulling in the whole package.json
|
|
// it only parses the package.json for a given package name once (relative to the directory of this file)
|
|
export function packageVersion(call) {
|
|
var name = call.arguments[0].toString();
|
|
|
|
// in the general case, this would break when using multiple versions of the same package
|
|
// but people don't use multiple versions of next in the same bundle
|
|
// so we don't need to worry about it here
|
|
// and it skips resolveSync which is a bit faster
|
|
if (memoizeMap) {
|
|
const value = memoizeMap.get(name);
|
|
if (value) return value;
|
|
}
|
|
var nextPath;
|
|
try {
|
|
nextPath = Bun.resolveSync(`${name}/package.json`, import.meta.dir);
|
|
} catch (exception) {
|
|
throw new Error(`${name} is not a valid package name`);
|
|
}
|
|
|
|
var json;
|
|
try {
|
|
// TODO: Add sync methods to FileBlob?
|
|
json = JSON.parse(readFileSync(nextPath, "utf8"));
|
|
} catch (exc) {
|
|
throw new AggregateError([exc], `Error parsing ${name}/package.json`);
|
|
}
|
|
|
|
if (!json.version) {
|
|
throw new Error(`${name}/package.json is missing a version`);
|
|
}
|
|
|
|
if (!memoizeMap) {
|
|
memoizeMap = new Map();
|
|
}
|
|
|
|
memoizeMap.set(name, json.version);
|
|
|
|
return json.version;
|
|
}
|