import fsSync from "node:fs" ;
import path from "node:path" ;
import { openBoundaryFileSync } from "./boundary-file-read.js" ;
export function expectedIntegrityForUpdate(
spec: string | undefined,
integrity: string | undefined,
): string | undefined {
if (!integrity || !spec) {
return undefined;
}
const value = spec.trim();
if (!value) {
return undefined;
}
const at = value.lastIndexOf("@" );
if (at <= 0 || at >= value.length - 1 ) {
return undefined;
}
const version = value.slice(at + 1 ).trim();
if (!/^v?\d+\.\d+\.\d+(?:-[0 -9 A-Za-z.-]+)?(?:\+[0 -9 A-Za-z.-]+)?$/.test(version)) {
return undefined;
}
return integrity;
}
export async function readInstalledPackageVersion(dir: string): Promise<string | undefined> {
const manifestPath = path.join(dir, "package.json" );
const opened = openBoundaryFileSync({
absolutePath: manifestPath,
rootPath: dir,
boundaryLabel: "installed package directory" ,
});
if (!opened.ok) {
return undefined;
}
try {
const raw = fsSync.readFileSync(opened.fd, "utf-8" );
const parsed = JSON.parse(raw) as { version?: unknown };
return typeof parsed.version === "string" ? parsed.version : undefined;
} catch {
return undefined;
} finally {
fsSync.closeSync(opened.fd);
}
}
Messung V0.5 in Prozent C=93 H=92 G=92
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-05)
¤
*© Formatika GbR, Deutschland