| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- // 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) : "/";
- }
|