File Explorer

/proc/4/task/9/cwd/_ssr

This explorer reads the filesystem of the server it runs on, so /workspace/user isn't present here. Browsing and the terminal still work against this server's own disk from /.

0 dirs
9 files
fs-server-BLMW8vuu.mjs7.2 KB · 320 lines
import { n as createServerFn } from "./ssr.mjs";import { t as createServerRpc } from "./createServerRpc-A6pJPYTF.mjs";import { promises } from "node:fs";import * as path from "node:path";//#region node_modules/.nitro/vite/services/ssr/assets/fs-server-BLMW8vuu.jsvar ROOT = "/";var MAX_FILE_BYTES = 15e5;var PREVIEW_BYTES = 6e5;function resolveSafe(relPath) {	const cleaned = (relPath ?? "").replace(/^\/+/, "").replace(/\\/g, "/");	if (cleaned.includes("\0")) throw new Error("Invalid path");	const abs = path.resolve(ROOT, cleaned);	const rootResolved = path.resolve(ROOT);	if (abs !== rootResolved && !abs.startsWith(rootResolved)) throw new Error("Path escapes allowed root");	return abs;}function toRel(abs) {	return path.relative(path.resolve(ROOT), abs).split(path.sep).join("/");}function buildSegments(relPath) {	if (!relPath) return [];	const parts = relPath.split("/").filter(Boolean);	const segs = [];	let acc = "";	for (const p of parts) {		acc = acc ? `${acc}/${p}` : p;		segs.push({			name: p,			relPath: acc		});	}	return segs;}var IMAGE_EXTS = {	png: "image/png",	jpg: "image/jpeg",	jpeg: "image/jpeg",	gif: "image/gif",	webp: "image/webp",	svg: "image/svg+xml",	ico: "image/x-icon",	bmp: "image/bmp",	avif: "image/avif"};function extOf(name) {	const base = name.toLowerCase();	const dot = base.lastIndexOf(".");	if (dot <= 0) {		if (base === "dockerfile" || base === "makefile") return base;		if (base.startsWith(".")) return base.slice(1);		return "";	}	return base.slice(dot + 1);}function looksBinary(buf) {	const len = Math.min(buf.length, 8e3);	for (let i = 0; i < len; i++) if (buf[i] === 0) return true;	return false;}function errKind(e) {	const code = e?.code;	if (code === "EACCES" || code === "EPERM") return "Permission denied";	if (code === "ENOENT") return "Not found";	if (code === "ENOTDIR") return "Not a directory";	return "Could not read";}var probeEnv_createServerFn_handler = createServerRpc({	id: "5423ddc1186c87712090018fdf3b2cd2b27df4037b35d013b3323d1110de1d4d",	name: "probeEnv",	filename: "src/lib/fs-server.ts"}, (opts) => probeEnv.__executeServer(opts));var probeEnv = createServerFn({ method: "GET" }).handler(probeEnv_createServerFn_handler, async () => {	let workspaceUser = false;	try {		workspaceUser = (await promises.stat("/workspace/user")).isDirectory();	} catch {		workspaceUser = false;	}	return {		workspaceUser,		host: process.env.HOSTNAME || ""	};});var listDir_createServerFn_handler = createServerRpc({	id: "67ab0753c5977d86d998fe2b62b3d160fa7d511fddac5d00d3db6f488f99ecbb",	name: "listDir",	filename: "src/lib/fs-server.ts"}, (opts) => listDir.__executeServer(opts));var listDir = createServerFn({ method: "GET" }).validator((d) => d ?? {}).handler(listDir_createServerFn_handler, async ({ data }) => {	const relInput = (data?.path ?? "").trim();	let abs;	let relPath;	try {		abs = resolveSafe(relInput);		relPath = toRel(abs);	} catch {		abs = path.resolve(ROOT);		relPath = "";	}	let stat;	try {		stat = await promises.stat(abs);	} catch (e) {		return {			root: relPath === "",			relPath,			segments: buildSegments(relPath),			entries: [],			exists: false,			error: errKind(e)		};	}	if (!stat.isDirectory()) {		abs = path.dirname(abs);		relPath = toRel(abs);	}	let dirents;	try {		dirents = await promises.readdir(abs, { withFileTypes: true });	} catch (e) {		return {			root: relPath === "",			relPath,			segments: buildSegments(relPath),			entries: [],			exists: true,			error: errKind(e)		};	}	const entries = [];	for (const d of dirents) {		let isDir = d.isDirectory();		let size = 0;		const full = path.join(abs, d.name);		if (d.isSymbolicLink()) try {			const s = await promises.stat(full);			isDir = s.isDirectory();			size = s.isFile() ? s.size : 0;		} catch {			entries.push({				name: d.name,				type: "file",				size: 0,				ext: extOf(d.name)			});			continue;		}		else if (d.isFile()) try {			size = (await promises.stat(full)).size;		} catch {			size = 0;		}		else if (!isDir) continue;		entries.push({			name: d.name,			type: isDir ? "dir" : "file",			size,			ext: isDir ? "" : extOf(d.name)		});	}	entries.sort((a, b) => {		if (a.type !== b.type) return a.type === "dir" ? -1 : 1;		return a.name.localeCompare(b.name, void 0, { sensitivity: "base" });	});	return {		root: relPath === "",		relPath,		segments: buildSegments(relPath),		entries,		exists: true,		error: null	};});var readFile_createServerFn_handler = createServerRpc({	id: "2aec5ec073e4b4933393facf0ef90c23771c7832c98d6e2a18f21b54aa694d82",	name: "readFile",	filename: "src/lib/fs-server.ts"}, (opts) => readFile.__executeServer(opts));var readFile = createServerFn({ method: "GET" }).validator((d) => d).handler(readFile_createServerFn_handler, async ({ data }) => {	const relInput = (data?.path ?? "").trim();	let abs;	let relPath;	try {		abs = resolveSafe(relInput);		relPath = toRel(abs);	} catch {		return {			relPath: relInput,			name: relInput.split("/").pop() || relInput,			ext: "",			size: 0,			kind: "missing",			content: null,			truncated: false,			mime: null		};	}	const name = path.basename(abs);	const ext = extOf(name);	let stat;	try {		stat = await promises.stat(abs);	} catch (e) {		const code = e?.code;		return {			relPath,			name,			ext,			size: 0,			kind: code === "EACCES" || code === "EPERM" ? "denied" : "missing",			content: null,			truncated: false,			mime: null		};	}	if (!stat.isFile()) return {		relPath,		name,		ext,		size: stat.size,		kind: "missing",		content: null,		truncated: false,		mime: null	};	const size = stat.size;	if (IMAGE_EXTS[ext] && ext !== "svg") {		if (size > 25e5) return {			relPath,			name,			ext,			size,			kind: "too-large",			content: null,			truncated: false,			mime: IMAGE_EXTS[ext]		};		try {			const buf = await promises.readFile(abs);			const dataUrl = `data:${IMAGE_EXTS[ext]};base64,${buf.toString("base64")}`;			return {				relPath,				name,				ext,				size,				kind: "image",				content: dataUrl,				truncated: false,				mime: IMAGE_EXTS[ext]			};		} catch (e) {			const code = e?.code;			return {				relPath,				name,				ext,				size,				kind: code === "EACCES" || code === "EPERM" ? "denied" : "missing",				content: null,				truncated: false,				mime: null			};		}	}	if (size > MAX_FILE_BYTES) return {		relPath,		name,		ext,		size,		kind: "too-large",		content: null,		truncated: false,		mime: null	};	let buf;	try {		buf = await promises.readFile(abs);	} catch (e) {		const code = e?.code;		return {			relPath,			name,			ext,			size,			kind: code === "EACCES" || code === "EPERM" ? "denied" : "missing",			content: null,			truncated: false,			mime: null		};	}	if (looksBinary(buf)) return {		relPath,		name,		ext,		size,		kind: "binary",		content: null,		truncated: false,		mime: null	};	let truncated = false;	let useBuf = buf;	if (buf.length > PREVIEW_BYTES) {		useBuf = buf.subarray(0, PREVIEW_BYTES);		truncated = true;	}	return {		relPath,		name,		ext,		size,		kind: "text",		content: useBuf.toString("utf8"),		truncated,		mime: null	};});//#endregionexport { listDir_createServerFn_handler, probeEnv_createServerFn_handler, readFile_createServerFn_handler };