auri
Version:
Organize package changes and releases
48 lines (47 loc) • 1.35 kB
JavaScript
export function parsePackageJSON(data) {
if (typeof data !== "object" || data === null) {
throw new Error("Invalid package.json");
}
let name;
if ("name" in data && typeof data.name === "string") {
name = data.name;
}
else {
throw new Error("Missing or invalid 'name' field");
}
let version;
if ("version" in data && typeof data.version === "string") {
version = data.version;
}
else {
throw new Error("Missing or invalid 'version' field");
}
if (!/^[a-zA-Z0-9-._]*$/.test(version)) {
throw new Error("Missing or invalid 'version' field");
}
if (version.includes("..")) {
throw new Error("Missing or invalid 'version' field");
}
let repository;
if ("repository" in data &&
typeof data.repository === "object" &&
data.repository !== null &&
"url" in data.repository &&
typeof data.repository.url === "string") {
if (data.repository.url.endsWith(".git")) {
repository = data.repository.url;
}
else {
repository = data.repository.url + ".git";
}
}
else {
throw new Error("Missing or invalid 'repository.url' field");
}
const metadata = {
name,
version,
repository
};
return metadata;
}