From ad9c0573228fcc8fc1a0a443d39ebaaba9b63a55 Mon Sep 17 00:00:00 2001 From: Louis Poirier Date: Wed, 17 Apr 2024 00:04:38 +0200 Subject: [PATCH] feat: define module/import in red-scripts and script 'bundle'. Define missing aliases on RTTI side. --- bundle.mjs | 19 ++++++++++++++++--- scripts/RedFileSystem/File.reds | 2 ++ .../{Enum => }/FileSystemStatus.reds | 0 .../{Enum => }/FileSystemWriteMode.reds | 0 .../Test/FileSystemStorageTest.reds | 2 ++ .../RedFileSystem/Test/FileSystemTest.reds | 2 ++ scripts/RedFileSystem/Test/FileTest.reds | 3 +++ scripts/RedFileSystem/Test/Main.reds | 1 + src/File.h | 2 -- src/FileSystemStatus.h | 2 +- src/FileSystemWriteMode.h | 2 +- 11 files changed, 28 insertions(+), 7 deletions(-) rename scripts/RedFileSystem/{Enum => }/FileSystemStatus.reds (100%) rename scripts/RedFileSystem/{Enum => }/FileSystemWriteMode.reds (100%) diff --git a/bundle.mjs b/bundle.mjs index f77b1c9..2ebb0a5 100644 --- a/bundle.mjs +++ b/bundle.mjs @@ -50,7 +50,7 @@ const graph = { name: '', path: PLUGIN_SCRIPT_PATH, scripts: scripts, - imports: ['Enum'] + imports: ['$RedData.Json.*'] }, modules: [] }; @@ -102,6 +102,10 @@ archive.finalize(); /// Helpers /// function createModule(module, path) { + if (module.scripts.length === 0) { + console.log(` ยท no entry-point module`); + return 0; + } let moduleName; if (module.name.length > 0) { @@ -110,8 +114,17 @@ function createModule(module, path) { moduleName = `${PLUGIN_NAME}`; } path = `${path}${moduleName}.reds`; - let data = `// ${PLUGIN_NAME} v${PLUGIN_VERSION}\n\n`; - + let data = `// ${PLUGIN_NAME} v${PLUGIN_VERSION}\n`; + + data += `module ${moduleName}\n`; + for (const dependencyName of module.imports) { + if (dependencyName.startsWith('$')) { + data += `import ${dependencyName.slice(1)}\n`; + } else { + data += `import ${PLUGIN_NAME}.${dependencyName}.*\n`; + } + } + data += '\n'; for (const script of module.scripts) { data += fs.readFileSync(`${module.path}${script.name}`, {encoding: 'utf8'}).trim(); data += '\n\n'; diff --git a/scripts/RedFileSystem/File.reds b/scripts/RedFileSystem/File.reds index 208c391..3574f42 100644 --- a/scripts/RedFileSystem/File.reds +++ b/scripts/RedFileSystem/File.reds @@ -12,10 +12,12 @@ public native class File { public native func WriteText(text: String, opt mode: FileSystemWriteMode) -> Bool; public native func WriteLines(lines: array, opt mode: FileSystemWriteMode) -> Bool; + @if(ModuleExists("RedData.Json")) public func ReadAsJson() -> ref { return ParseJson(this.ReadAsText()); } + @if(ModuleExists("RedData.Json")) public func WriteJson(json: ref) -> Bool { return this.WriteText(json.ToString()); } diff --git a/scripts/RedFileSystem/Enum/FileSystemStatus.reds b/scripts/RedFileSystem/FileSystemStatus.reds similarity index 100% rename from scripts/RedFileSystem/Enum/FileSystemStatus.reds rename to scripts/RedFileSystem/FileSystemStatus.reds diff --git a/scripts/RedFileSystem/Enum/FileSystemWriteMode.reds b/scripts/RedFileSystem/FileSystemWriteMode.reds similarity index 100% rename from scripts/RedFileSystem/Enum/FileSystemWriteMode.reds rename to scripts/RedFileSystem/FileSystemWriteMode.reds diff --git a/scripts/RedFileSystem/Test/FileSystemStorageTest.reds b/scripts/RedFileSystem/Test/FileSystemStorageTest.reds index 5429d28..2e9f2ec 100644 --- a/scripts/RedFileSystem/Test/FileSystemStorageTest.reds +++ b/scripts/RedFileSystem/Test/FileSystemStorageTest.reds @@ -1,3 +1,5 @@ +import RedFileSystem.* + public class FileSystemStorageTest extends BaseTest { private let m_storage: ref; diff --git a/scripts/RedFileSystem/Test/FileSystemTest.reds b/scripts/RedFileSystem/Test/FileSystemTest.reds index 6d2f963..a26ba33 100644 --- a/scripts/RedFileSystem/Test/FileSystemTest.reds +++ b/scripts/RedFileSystem/Test/FileSystemTest.reds @@ -1,3 +1,5 @@ +import RedFileSystem.* + public class FileSystemTest extends BaseTest { private let m_storage: ref; diff --git a/scripts/RedFileSystem/Test/FileTest.reds b/scripts/RedFileSystem/Test/FileTest.reds index d4a6136..72cb198 100644 --- a/scripts/RedFileSystem/Test/FileTest.reds +++ b/scripts/RedFileSystem/Test/FileTest.reds @@ -1,3 +1,6 @@ +import RedFileSystem.* +import RedData.Json.* + public class FileTest extends BaseTest { private let STORAGE_PATH: String = "C:\\Program Files (x86)\\Steam\\steamapps\\common\\Cyberpunk 2077\\red4ext\\plugins\\RedFileSystem\\storages\\Test\\"; diff --git a/scripts/RedFileSystem/Test/Main.reds b/scripts/RedFileSystem/Test/Main.reds index bada1b6..20186d7 100644 --- a/scripts/RedFileSystem/Test/Main.reds +++ b/scripts/RedFileSystem/Test/Main.reds @@ -1,4 +1,5 @@ import Codeware.* +import RedFileSystem.* public class RedFSTest extends ScriptableEnv { private let m_storage: ref; diff --git a/src/File.h b/src/File.h index 501a571..f1003be 100644 --- a/src/File.h +++ b/src/File.h @@ -53,11 +53,9 @@ RTTI_DEFINE_CLASS(RedFS::File, { RTTI_METHOD(read_as_text, "ReadAsText"); RTTI_METHOD(read_as_lines, "ReadAsLines"); - //RTTI_METHOD(read_as_json, "ReadAsJson"); RTTI_METHOD(write_text, "WriteText"); RTTI_METHOD(write_lines, "WriteLines"); - //RTTI_METHOD(write_json, "WriteJson"); }); #endif //REDFS_FILE_H diff --git a/src/FileSystemStatus.h b/src/FileSystemStatus.h index f6c1c31..5f5badb 100644 --- a/src/FileSystemStatus.h +++ b/src/FileSystemStatus.h @@ -14,6 +14,6 @@ enum class FileSystemStatus { } -RTTI_DEFINE_ENUM(RedFS::FileSystemStatus) +RTTI_DEFINE_ENUM(RedFS::FileSystemStatus, "RedFileSystem.FileSystemStatus") #endif //REDFS_FILESYSTEMSTATUS_H diff --git a/src/FileSystemWriteMode.h b/src/FileSystemWriteMode.h index 07380a6..e4e44d8 100644 --- a/src/FileSystemWriteMode.h +++ b/src/FileSystemWriteMode.h @@ -12,6 +12,6 @@ enum class FileSystemWriteMode { } -RTTI_DEFINE_ENUM(RedFS::FileSystemWriteMode) +RTTI_DEFINE_ENUM(RedFS::FileSystemWriteMode, "RedFileSystem.FileSystemWriteMode") #endif //REDFS_FILESYSTEMWRITEMODE_H