constatic
Version:
Constatic is a CLI for creating and managing modern TypeScript projects, providing an organized structure and features that streamline development.
50 lines (49 loc) • 1.61 kB
JavaScript
// src/helpers/npm/package.ts
import { Result } from "#lib/result.js";
import path from "node:path";
import { uiMessage } from "../ui.js";
var baseURL = "https://registry.npmjs.org";
async function fetchNpmPackage(lib) {
const regex = /^(?<name>@?[^@\/]+(?:\/[^@]+)?)(?:@(?<version>.+))?$/;
const match = lib.match(regex);
const name = match?.groups?.name;
const version = match?.groups?.version ?? "latest";
const response = await fetch(`${baseURL}/${name}`);
const data = await response.json();
if (response.status !== 200) {
return Result.fail(uiMessage({
"en-US": "Package not found",
"pt-BR": "Pacote não encontrado"
}));
}
const versionKey = version === "latest" ? data["dist-tags"].latest : normalizeVersion(version);
const hasVersion = !!data.versions[versionKey];
if (!hasVersion) {
return Result.fail(uiMessage({
"en-US": "Package version not found",
"pt-BR": "Versão do pacote não encontrada"
}));
}
return Result.ok({ ...data, selectedVersion: versionKey });
}
function normalizeVersion(version) {
if (!version)
return "0.0.0";
const parts = version.split(".");
while (parts.length < 3) {
parts.push("0");
}
return parts.slice(0, 3).join(".");
}
function toNpmName(name) {
return name.toLowerCase().replaceAll(" ", "-").replaceAll(".", "").replaceAll("/", "").replace(/[^\w\s-]/gi, "");
}
function getCdPath(filepath) {
const basename = path.basename(filepath);
return basename.trim().includes(" ") ? `cd "./${basename}"` : `cd ./${basename}`;
}
export {
toNpmName,
getCdPath,
fetchNpmPackage
};