From 491b557ea67674a9181f013319354e5cf037533a Mon Sep 17 00:00:00 2001 From: unwox Date: Thu, 4 Sep 2025 19:52:52 +0600 Subject: add luna.fs module --- main.go | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) (limited to 'main.go') diff --git a/main.go b/main.go index 7f32504..d8614ae 100644 --- a/main.go +++ b/main.go @@ -427,6 +427,57 @@ func main() { cut := runes[start-1:start-1+length] return luaOk(l, string(cut)) } + + fsModule := make(map[string]any) + fsModule["files"] = func (l *Lua) int { + var dir string + err := l.Scan(&dir) + if err != nil { + return luaErr(l, err) + } + files, err := os.ReadDir(dir) + if err != nil { + return luaErr(l, err) + } + var res []any + for _, file := range files { + entry := make(map[string]any) + entry["name"] = file.Name() + entry["dir"] = file.IsDir() + res = append(res, entry) + } + return luaOk(l, res) + } + fsModule["size"] = func (l *Lua) int { + var path string + err := l.Scan(&path) + if err != nil { + return luaErr(l, err) + } + stat, err := os.Stat(path) + if err != nil { + return luaErr(l, err) + } + return luaOk(l, stat.Size()) + } + fsModule["mimetype"] = func (l *Lua) int { + var path string + err := l.Scan(&path) + if err != nil { + return luaErr(l, err) + } + file, err := os.Open(path) + if err != nil { + return luaErr(l, err) + } + defer file.Close() + res, err := mimetype(file) + if err != nil { + return luaErr(l, err) + } + return luaOk(l, res) + } + cryptoModule := make(map[string]any) cryptoModule["sha1"] = func (l *Lua) int { var str string @@ -444,6 +495,7 @@ func main() { module["http"] = httpModule module["db"] = dbModule module["utf8"] = utf8Module + module["fs"] = fsModule module["crypto"] = cryptoModule module["on-eval"] = func (l *Lua) int { var evalFn LuaRef @@ -535,3 +587,12 @@ func luaOk(l *Lua, res any) int { } return 2 } + +func mimetype(f *os.File) (string, error) { + firstBytes := make([]byte, 512) + _, err := f.ReadAt(firstBytes, 0) + if err != nil && err != io.EOF { + return "", err + } + return http.DetectContentType(firstBytes), nil +} -- cgit v1.2.3