mirror of
https://github.com/khairul169/home-lab.git
synced 2025-04-28 16:49:36 +07:00
45 lines
1.1 KiB
TypeScript
45 lines
1.1 KiB
TypeScript
import type { Context } from "hono";
|
|
import type { GetFilesSchema } from "./schema";
|
|
import fs from "node:fs/promises";
|
|
import { filesDirList, getFilePath } from "./utils";
|
|
|
|
export const getFiles = async (c: Context) => {
|
|
const input: GetFilesSchema = c.req.query();
|
|
const { baseName, path, pathname } = getFilePath(input.path);
|
|
|
|
if (!baseName?.length) {
|
|
return c.json(
|
|
filesDirList.map((i) => ({
|
|
name: i.name,
|
|
path: "/" + i.name,
|
|
isDirectory: true,
|
|
}))
|
|
);
|
|
}
|
|
|
|
try {
|
|
const entities = await fs.readdir(path, { withFileTypes: true });
|
|
|
|
const files = entities
|
|
.filter((e) => !e.name.startsWith("."))
|
|
.map((e) => ({
|
|
name: e.name,
|
|
path: [pathname, e.name].join("/"),
|
|
isDirectory: e.isDirectory(),
|
|
}))
|
|
.sort((a, b) => {
|
|
if (a.isDirectory && !b.isDirectory) {
|
|
return -1;
|
|
} else if (!a.isDirectory && b.isDirectory) {
|
|
return 1;
|
|
} else {
|
|
return a.name.localeCompare(b.name);
|
|
}
|
|
});
|
|
|
|
return c.json(files);
|
|
} catch (err) {}
|
|
|
|
return c.json([]);
|
|
};
|