From 033325455a1c12eac13793b0fd85e4162f19375d Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Thu, 12 Aug 2021 12:54:52 -0600 Subject: [PATCH] Close #40 --- src/kiss/Kiss.hx | 1 + src/kiss/Prelude.hx | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/src/kiss/Kiss.hx b/src/kiss/Kiss.hx index 45dc76e..b96ed37 100644 --- a/src/kiss/Kiss.hx +++ b/src/kiss/Kiss.hx @@ -77,6 +77,7 @@ class Kiss { "enumerate" => Symbol("Prelude.enumerate"), "assertProcess" => Symbol("Prelude.assertProcess"), "random" => Symbol("Std.random"), + "walkDirectory" => Symbol("Prelude.walkDirectory"), // These work with (apply) because they are added as "opAliases" in Macros.kiss: "min" => Symbol("Prelude.min"), "max" => Symbol("Prelude.max"), diff --git a/src/kiss/Prelude.hx b/src/kiss/Prelude.hx index 9bf4905..b38da42 100644 --- a/src/kiss/Prelude.hx +++ b/src/kiss/Prelude.hx @@ -11,6 +11,9 @@ import js.node.Buffer; #elseif sys import sys.io.Process; #end +#if (sys || hxnodejs) +import sys.FileSystem; +#end #if python import python.lib.subprocess.Popen; import python.Bytearray; @@ -373,6 +376,23 @@ class Prelude { private static var kissProcess:Process = null; #end + public static function walkDirectory(basePath, directory, processFile:(String) -> Void, processSubdirectory:(String) -> Void) { + #if (sys || hxnodejs) + for (fileOrFolder in FileSystem.readDirectory(joinPath(basePath, directory))) { + switch (fileOrFolder) { + case folder if (FileSystem.isDirectory(joinPath(basePath, directory, folder))): + var subdirectory = joinPath(directory, folder); + processSubdirectory(subdirectory); + walkDirectory(basePath, subdirectory, processFile, processSubdirectory); + case file: + processFile(joinPath(directory, file)); + } + } + #else + throw "Can't walk a directory on this target."; + #end + } + /** * On Sys targets and nodejs, Kiss can be converted to hscript at runtime * NOTE on non-nodejs targets, after the first time calling this function,