// Renderer shim for `node:path` (dev-app-proven): pure string path math so the // `@nengine/core` barrel resolves in the renderer build. export function isAbsolute(p: string): boolean { return p.startsWith("/"); } export function resolve(...segments: string[]): string { const parts: string[] = []; for (const segment of segments) { if (segment.length === 0) continue; if (segment.startsWith("/")) { parts.length = 0; } parts.push(...segment.split("/")); } const out: string[] = []; for (const part of parts) { if (part === "" || part === ".") continue; if (part === "..") { out.pop(); } else { out.push(part); } } return "/" + out.join("/"); } export function join(...segments: string[]): string { return resolve(...segments); } export function basename(p: string, suffix?: string): string { const name = p.split("/").filter((s) => s.length > 0).pop() ?? ""; if (suffix && name.endsWith(suffix)) { return name.slice(0, -suffix.length); } return name; } export function extname(p: string): string { const name = basename(p); const idx = name.lastIndexOf("."); return idx > 0 ? name.slice(idx) : ""; } export function dirname(p: string): string { const idx = p.lastIndexOf("/"); return idx > 0 ? p.slice(0, idx) : "/"; }