diff --git a/.github/workflows/pod-install.yml b/.github/workflows/pod-install.yml new file mode 100644 index 0000000..102a65b --- /dev/null +++ b/.github/workflows/pod-install.yml @@ -0,0 +1,45 @@ +name: Update Podfile.lock + +permissions: + contents: write + +on: + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + pod-install: + name: Run pod install and commit + runs-on: macOS-15 + steps: + - uses: actions/checkout@v6 + + - uses: oven-sh/setup-bun@v2 + + - name: Setup Ruby (bundle) + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.2' + bundler-cache: true + working-directory: example/ios + + - name: Install dependencies (bun) + run: bun install + + - name: Run codegen + run: bun run codegen + + - name: Commit updated lock files + run: | + git add example/ios/Podfile.lock bun.lock nitrogen/generated/ + git diff --cached --quiet && echo "No changes" && exit 0 + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git commit -m "chore: update Podfile.lock and bun.lock via CI" + git push + + - name: Check for other uncommitted changes + run: git status --short diff --git a/nitro.json b/nitro.json index 0337189..31fcc02 100644 --- a/nitro.json +++ b/nitro.json @@ -14,8 +14,14 @@ }, "autolinking": { "NitroFS": { - "swift": "HybridNitroFS", - "kotlin": "HybridNitroFS" + "ios": { + "language": "swift", + "implementationClassName": "HybridNitroFS" + }, + "android": { + "language": "kotlin", + "implementationClassName": "HybridNitroFS" + } } }, "ignorePaths": [ diff --git a/nitrogen/generated/android/NitroFS+autolinking.cmake b/nitrogen/generated/android/NitroFS+autolinking.cmake index da34ecc..76ad8e8 100644 --- a/nitrogen/generated/android/NitroFS+autolinking.cmake +++ b/nitrogen/generated/android/NitroFS+autolinking.cmake @@ -2,7 +2,7 @@ # NitroFS+autolinking.cmake # This file was generated by nitrogen. DO NOT MODIFY THIS FILE. # https://github.com/mrousavy/nitro -# Copyright © 2025 Marc Rousavy @ Margelo +# Copyright © Marc Rousavy @ Margelo # # This is a CMake file that adds all files generated by Nitrogen diff --git a/nitrogen/generated/android/NitroFS+autolinking.gradle b/nitrogen/generated/android/NitroFS+autolinking.gradle index a0f955e..88e7755 100644 --- a/nitrogen/generated/android/NitroFS+autolinking.gradle +++ b/nitrogen/generated/android/NitroFS+autolinking.gradle @@ -2,7 +2,7 @@ /// NitroFS+autolinking.gradle /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// /// This is a Gradle file that adds all files generated by Nitrogen diff --git a/nitrogen/generated/android/NitroFSOnLoad.cpp b/nitrogen/generated/android/NitroFSOnLoad.cpp index 94b0a1c..2e11cf5 100644 --- a/nitrogen/generated/android/NitroFSOnLoad.cpp +++ b/nitrogen/generated/android/NitroFSOnLoad.cpp @@ -2,7 +2,7 @@ /// NitroFSOnLoad.cpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #ifndef BUILDING_NITROFS_WITH_GENERATED_CMAKE_PROJECT @@ -22,25 +22,35 @@ namespace margelo::nitro::nitrofs { int initialize(JavaVM* vm) { + return facebook::jni::initialize(vm, []() { + ::margelo::nitro::nitrofs::registerAllNatives(); + }); +} + +struct JHybridNitroFSSpecImpl: public jni::JavaClass { + static constexpr auto kJavaDescriptor = "Lcom/nitrofs/HybridNitroFS;"; + static std::shared_ptr create() { + static const auto constructorFn = javaClassStatic()->getConstructor(); + jni::local_ref javaPart = javaClassStatic()->newObject(constructorFn); + return javaPart->getJHybridNitroFSSpec(); + } +}; + +void registerAllNatives() { using namespace margelo::nitro; using namespace margelo::nitro::nitrofs; - using namespace facebook; - - return facebook::jni::initialize(vm, [] { - // Register native JNI methods - margelo::nitro::nitrofs::JHybridNitroFSSpec::registerNatives(); - margelo::nitro::nitrofs::JFunc_void_double_double_cxx::registerNatives(); - - // Register Nitro Hybrid Objects - HybridObjectRegistry::registerHybridObjectConstructor( - "NitroFS", - []() -> std::shared_ptr { - static DefaultConstructableObject object("com/nitrofs/HybridNitroFS"); - auto instance = object.create(); - return instance->cthis()->shared(); - } - ); - }); + + // Register native JNI methods + margelo::nitro::nitrofs::JHybridNitroFSSpec::CxxPart::registerNatives(); + margelo::nitro::nitrofs::JFunc_void_double_double_cxx::registerNatives(); + + // Register Nitro Hybrid Objects + HybridObjectRegistry::registerHybridObjectConstructor( + "NitroFS", + []() -> std::shared_ptr { + return JHybridNitroFSSpecImpl::create(); + } + ); } } // namespace margelo::nitro::nitrofs diff --git a/nitrogen/generated/android/NitroFSOnLoad.hpp b/nitrogen/generated/android/NitroFSOnLoad.hpp index aeb1d4d..38c4b46 100644 --- a/nitrogen/generated/android/NitroFSOnLoad.hpp +++ b/nitrogen/generated/android/NitroFSOnLoad.hpp @@ -2,24 +2,33 @@ /// NitroFSOnLoad.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #include +#include #include namespace margelo::nitro::nitrofs { + [[deprecated("Use registerNatives() instead.")]] + int initialize(JavaVM* vm); + /** - * Initializes the native (C++) part of NitroFS, and autolinks all Hybrid Objects. - * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`). + * Register the native (C++) part of NitroFS, and autolinks all Hybrid Objects. + * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`), + * inside a `facebook::jni::initialize(vm, ...)` call. * Example: * ```cpp (cpp-adapter.cpp) * JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) { - * return margelo::nitro::nitrofs::initialize(vm); + * return facebook::jni::initialize(vm, []() { + * // register all NitroFS HybridObjects + * margelo::nitro::nitrofs::registerNatives(); + * // any other custom registrations go here. + * }); * } * ``` */ - int initialize(JavaVM* vm); + void registerAllNatives(); } // namespace margelo::nitro::nitrofs diff --git a/nitrogen/generated/android/c++/JFunc_void_double_double.hpp b/nitrogen/generated/android/c++/JFunc_void_double_double.hpp index 810a31b..4848570 100644 --- a/nitrogen/generated/android/c++/JFunc_void_double_double.hpp +++ b/nitrogen/generated/android/c++/JFunc_void_double_double.hpp @@ -2,7 +2,7 @@ /// JFunc_void_double_double.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -23,7 +23,7 @@ namespace margelo::nitro::nitrofs { */ struct JFunc_void_double_double: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/Func_void_double_double;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/Func_void_double_double;"; public: /** @@ -59,7 +59,7 @@ namespace margelo::nitro::nitrofs { } public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/Func_void_double_double_cxx;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/Func_void_double_double_cxx;"; static void registerNatives() { registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_double_double_cxx::invoke_cxx)}); } diff --git a/nitrogen/generated/android/c++/JHybridNitroFSSpec.cpp b/nitrogen/generated/android/c++/JHybridNitroFSSpec.cpp index 4c9a44b..c277db0 100644 --- a/nitrogen/generated/android/c++/JHybridNitroFSSpec.cpp +++ b/nitrogen/generated/android/c++/JHybridNitroFSSpec.cpp @@ -2,7 +2,7 @@ /// JHybridNitroFSSpec.cpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #include "JHybridNitroFSSpec.hpp" @@ -21,6 +21,7 @@ namespace margelo::nitro::nitrofs { enum class NitroUploadMethod; } #include #include #include +#include #include "NitroFileStat.hpp" #include "JNitroFileStat.hpp" #include "NitroFile.hpp" @@ -39,77 +40,78 @@ namespace margelo::nitro::nitrofs { enum class NitroUploadMethod; } namespace margelo::nitro::nitrofs { - jni::local_ref JHybridNitroFSSpec::initHybrid(jni::alias_ref jThis) { - return makeCxxInstance(jThis); - } - - void JHybridNitroFSSpec::registerNatives() { - registerHybrid({ - makeNativeMethod("initHybrid", JHybridNitroFSSpec::initHybrid), - }); + std::shared_ptr JHybridNitroFSSpec::JavaPart::getJHybridNitroFSSpec() { + auto hybridObject = JHybridObject::JavaPart::getJHybridObject(); + auto castHybridObject = std::dynamic_pointer_cast(hybridObject); + if (castHybridObject == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to downcast JHybridObject to JHybridNitroFSSpec!"); + } + return castHybridObject; } - size_t JHybridNitroFSSpec::getExternalMemorySize() noexcept { - static const auto method = javaClassStatic()->getMethod("getMemorySize"); - return method(_javaPart); + jni::local_ref JHybridNitroFSSpec::CxxPart::initHybrid(jni::alias_ref jThis) { + return makeCxxInstance(jThis); } - void JHybridNitroFSSpec::dispose() noexcept { - static const auto method = javaClassStatic()->getMethod("dispose"); - method(_javaPart); + std::shared_ptr JHybridNitroFSSpec::CxxPart::createHybridObject(const jni::local_ref& javaPart) { + auto castJavaPart = jni::dynamic_ref_cast(javaPart); + if (castJavaPart == nullptr) [[unlikely]] { + throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridNitroFSSpec::JavaPart!"); + } + return std::make_shared(castJavaPart); } - std::string JHybridNitroFSSpec::toString() { - static const auto method = javaClassStatic()->getMethod("toString"); - auto javaString = method(_javaPart); - return javaString->toStdString(); + void JHybridNitroFSSpec::CxxPart::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", JHybridNitroFSSpec::CxxPart::initHybrid), + }); } // Properties std::string JHybridNitroFSSpec::getBUNDLE_DIR() { - static const auto method = javaClassStatic()->getMethod()>("getBUNDLE_DIR"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getBUNDLE_DIR"); auto __result = method(_javaPart); return __result->toStdString(); } std::string JHybridNitroFSSpec::getDOCUMENT_DIR() { - static const auto method = javaClassStatic()->getMethod()>("getDOCUMENT_DIR"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getDOCUMENT_DIR"); auto __result = method(_javaPart); return __result->toStdString(); } std::string JHybridNitroFSSpec::getCACHE_DIR() { - static const auto method = javaClassStatic()->getMethod()>("getCACHE_DIR"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getCACHE_DIR"); auto __result = method(_javaPart); return __result->toStdString(); } std::string JHybridNitroFSSpec::getDOWNLOAD_DIR() { - static const auto method = javaClassStatic()->getMethod()>("getDOWNLOAD_DIR"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getDOWNLOAD_DIR"); auto __result = method(_javaPart); return __result->toStdString(); } std::string JHybridNitroFSSpec::getDCIM_DIR() { - static const auto method = javaClassStatic()->getMethod()>("getDCIM_DIR"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getDCIM_DIR"); auto __result = method(_javaPart); return __result->toStdString(); } std::string JHybridNitroFSSpec::getPICTURES_DIR() { - static const auto method = javaClassStatic()->getMethod()>("getPICTURES_DIR"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getPICTURES_DIR"); auto __result = method(_javaPart); return __result->toStdString(); } std::string JHybridNitroFSSpec::getMOVIES_DIR() { - static const auto method = javaClassStatic()->getMethod()>("getMOVIES_DIR"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getMOVIES_DIR"); auto __result = method(_javaPart); return __result->toStdString(); } std::string JHybridNitroFSSpec::getMUSIC_DIR() { - static const auto method = javaClassStatic()->getMethod()>("getMUSIC_DIR"); + static const auto method = _javaPart->javaClassStatic()->getMethod()>("getMUSIC_DIR"); auto __result = method(_javaPart); return __result->toStdString(); } // Methods std::shared_ptr> JHybridNitroFSSpec::exists(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("exists"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("exists"); auto __result = method(_javaPart, jni::make_jstring(path)); return [&]() { auto __promise = Promise::create(); @@ -125,7 +127,7 @@ namespace margelo::nitro::nitrofs { }(); } std::shared_ptr> JHybridNitroFSSpec::writeFile(const std::string& path, const std::string& data, NitroFileEncoding encoding) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */, jni::alias_ref /* data */, jni::alias_ref /* encoding */)>("writeFile"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */, jni::alias_ref /* data */, jni::alias_ref /* encoding */)>("writeFile"); auto __result = method(_javaPart, jni::make_jstring(path), jni::make_jstring(data), JNitroFileEncoding::fromCpp(encoding)); return [&]() { auto __promise = Promise::create(); @@ -140,7 +142,7 @@ namespace margelo::nitro::nitrofs { }(); } std::shared_ptr> JHybridNitroFSSpec::readFile(const std::string& path, NitroFileEncoding encoding) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */, jni::alias_ref /* encoding */)>("readFile"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */, jni::alias_ref /* encoding */)>("readFile"); auto __result = method(_javaPart, jni::make_jstring(path), JNitroFileEncoding::fromCpp(encoding)); return [&]() { auto __promise = Promise::create(); @@ -156,7 +158,7 @@ namespace margelo::nitro::nitrofs { }(); } std::shared_ptr> JHybridNitroFSSpec::copyFile(const std::string& srcPath, const std::string& destPath) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* srcPath */, jni::alias_ref /* destPath */)>("copyFile"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* srcPath */, jni::alias_ref /* destPath */)>("copyFile"); auto __result = method(_javaPart, jni::make_jstring(srcPath), jni::make_jstring(destPath)); return [&]() { auto __promise = Promise::create(); @@ -171,7 +173,7 @@ namespace margelo::nitro::nitrofs { }(); } std::shared_ptr> JHybridNitroFSSpec::copy(const std::string& srcPath, const std::string& destPath) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* srcPath */, jni::alias_ref /* destPath */)>("copy"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* srcPath */, jni::alias_ref /* destPath */)>("copy"); auto __result = method(_javaPart, jni::make_jstring(srcPath), jni::make_jstring(destPath)); return [&]() { auto __promise = Promise::create(); @@ -186,7 +188,7 @@ namespace margelo::nitro::nitrofs { }(); } std::shared_ptr> JHybridNitroFSSpec::unlink(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("unlink"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("unlink"); auto __result = method(_javaPart, jni::make_jstring(path)); return [&]() { auto __promise = Promise::create(); @@ -202,7 +204,7 @@ namespace margelo::nitro::nitrofs { }(); } std::shared_ptr> JHybridNitroFSSpec::mkdir(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("mkdir"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("mkdir"); auto __result = method(_javaPart, jni::make_jstring(path)); return [&]() { auto __promise = Promise::create(); @@ -218,7 +220,7 @@ namespace margelo::nitro::nitrofs { }(); } std::shared_ptr> JHybridNitroFSSpec::stat(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("stat"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("stat"); auto __result = method(_javaPart, jni::make_jstring(path)); return [&]() { auto __promise = Promise::create(); @@ -234,7 +236,7 @@ namespace margelo::nitro::nitrofs { }(); } std::shared_ptr>> JHybridNitroFSSpec::readdir(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("readdir"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("readdir"); auto __result = method(_javaPart, jni::make_jstring(path)); return [&]() { auto __promise = Promise>::create(); @@ -259,7 +261,7 @@ namespace margelo::nitro::nitrofs { }(); } std::shared_ptr> JHybridNitroFSSpec::rename(const std::string& oldPath, const std::string& newPath) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* oldPath */, jni::alias_ref /* newPath */)>("rename"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* oldPath */, jni::alias_ref /* newPath */)>("rename"); auto __result = method(_javaPart, jni::make_jstring(oldPath), jni::make_jstring(newPath)); return [&]() { auto __promise = Promise::create(); @@ -274,22 +276,22 @@ namespace margelo::nitro::nitrofs { }(); } std::string JHybridNitroFSSpec::dirname(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("dirname"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("dirname"); auto __result = method(_javaPart, jni::make_jstring(path)); return __result->toStdString(); } std::string JHybridNitroFSSpec::basename(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("basename"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("basename"); auto __result = method(_javaPart, jni::make_jstring(path)); return __result->toStdString(); } std::string JHybridNitroFSSpec::extname(const std::string& path) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* path */)>("extname"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* path */)>("extname"); auto __result = method(_javaPart, jni::make_jstring(path)); return __result->toStdString(); } std::shared_ptr> JHybridNitroFSSpec::uploadFile(const NitroFile& file, const NitroUploadOptions& uploadOptions, const std::optional>& onProgress) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* file */, jni::alias_ref /* uploadOptions */, jni::alias_ref /* onProgress */)>("uploadFile_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* file */, jni::alias_ref /* uploadOptions */, jni::alias_ref /* onProgress */)>("uploadFile_cxx"); auto __result = method(_javaPart, JNitroFile::fromCpp(file), JNitroUploadOptions::fromCpp(uploadOptions), onProgress.has_value() ? JFunc_void_double_double_cxx::fromCpp(onProgress.value()) : nullptr); return [&]() { auto __promise = Promise::create(); @@ -304,7 +306,7 @@ namespace margelo::nitro::nitrofs { }(); } std::shared_ptr> JHybridNitroFSSpec::downloadFile(const std::string& serverUrl, const std::string& destinationPath, const std::optional>& onProgress) { - static const auto method = javaClassStatic()->getMethod(jni::alias_ref /* serverUrl */, jni::alias_ref /* destinationPath */, jni::alias_ref /* onProgress */)>("downloadFile_cxx"); + static const auto method = _javaPart->javaClassStatic()->getMethod(jni::alias_ref /* serverUrl */, jni::alias_ref /* destinationPath */, jni::alias_ref /* onProgress */)>("downloadFile_cxx"); auto __result = method(_javaPart, jni::make_jstring(serverUrl), jni::make_jstring(destinationPath), onProgress.has_value() ? JFunc_void_double_double_cxx::fromCpp(onProgress.value()) : nullptr); return [&]() { auto __promise = Promise::create(); diff --git a/nitrogen/generated/android/c++/JHybridNitroFSSpec.hpp b/nitrogen/generated/android/c++/JHybridNitroFSSpec.hpp index 0a5762f..e2bb54a 100644 --- a/nitrogen/generated/android/c++/JHybridNitroFSSpec.hpp +++ b/nitrogen/generated/android/c++/JHybridNitroFSSpec.hpp @@ -2,7 +2,7 @@ /// HybridNitroFSSpec.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -18,33 +18,33 @@ namespace margelo::nitro::nitrofs { using namespace facebook; - class JHybridNitroFSSpec: public jni::HybridClass, - public virtual HybridNitroFSSpec { + class JHybridNitroFSSpec: public virtual HybridNitroFSSpec, public virtual JHybridObject { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/HybridNitroFSSpec;"; - static jni::local_ref initHybrid(jni::alias_ref jThis); - static void registerNatives(); - - protected: - // C++ constructor (called from Java via `initHybrid()`) - explicit JHybridNitroFSSpec(jni::alias_ref jThis) : - HybridObject(HybridNitroFSSpec::TAG), - HybridBase(jThis), - _javaPart(jni::make_global(jThis)) {} + struct JavaPart: public jni::JavaClass { + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/HybridNitroFSSpec;"; + std::shared_ptr getJHybridNitroFSSpec(); + }; + struct CxxPart: public jni::HybridClass { + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/HybridNitroFSSpec$CxxPart;"; + static jni::local_ref initHybrid(jni::alias_ref jThis); + static void registerNatives(); + using HybridBase::HybridBase; + protected: + std::shared_ptr createHybridObject(const jni::local_ref& javaPart) override; + }; public: + explicit JHybridNitroFSSpec(const jni::local_ref& javaPart): + HybridObject(HybridNitroFSSpec::TAG), + JHybridObject(javaPart), + _javaPart(jni::make_global(javaPart)) {} ~JHybridNitroFSSpec() override { // Hermes GC can destroy JS objects on a non-JNI Thread. jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); }); } public: - size_t getExternalMemorySize() noexcept override; - void dispose() noexcept override; - std::string toString() override; - - public: - inline const jni::global_ref& getJavaPart() const noexcept { + inline const jni::global_ref& getJavaPart() const noexcept { return _javaPart; } @@ -78,9 +78,7 @@ namespace margelo::nitro::nitrofs { std::shared_ptr> downloadFile(const std::string& serverUrl, const std::string& destinationPath, const std::optional>& onProgress) override; private: - friend HybridBase; - using HybridBase::HybridBase; - jni::global_ref _javaPart; + jni::global_ref _javaPart; }; } // namespace margelo::nitro::nitrofs diff --git a/nitrogen/generated/android/c++/JNitroFile.hpp b/nitrogen/generated/android/c++/JNitroFile.hpp index a1c5e95..691ca57 100644 --- a/nitrogen/generated/android/c++/JNitroFile.hpp +++ b/nitrogen/generated/android/c++/JNitroFile.hpp @@ -2,7 +2,7 @@ /// JNitroFile.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -21,7 +21,7 @@ namespace margelo::nitro::nitrofs { */ struct JNitroFile final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/NitroFile;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/NitroFile;"; public: /** diff --git a/nitrogen/generated/android/c++/JNitroFileEncoding.hpp b/nitrogen/generated/android/c++/JNitroFileEncoding.hpp index acd7b6f..eb44df0 100644 --- a/nitrogen/generated/android/c++/JNitroFileEncoding.hpp +++ b/nitrogen/generated/android/c++/JNitroFileEncoding.hpp @@ -2,7 +2,7 @@ /// JNitroFileEncoding.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -19,7 +19,7 @@ namespace margelo::nitro::nitrofs { */ struct JNitroFileEncoding final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/NitroFileEncoding;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/NitroFileEncoding;"; public: /** @@ -41,16 +41,15 @@ namespace margelo::nitro::nitrofs { [[maybe_unused]] static jni::alias_ref fromCpp(NitroFileEncoding value) { static const auto clazz = javaClassStatic(); - static const auto fieldUTF8 = clazz->getStaticField("UTF8"); - static const auto fieldASCII = clazz->getStaticField("ASCII"); - static const auto fieldBASE64 = clazz->getStaticField("BASE64"); - switch (value) { case NitroFileEncoding::UTF8: + static const auto fieldUTF8 = clazz->getStaticField("UTF8"); return clazz->getStaticFieldValue(fieldUTF8); case NitroFileEncoding::ASCII: + static const auto fieldASCII = clazz->getStaticField("ASCII"); return clazz->getStaticFieldValue(fieldASCII); case NitroFileEncoding::BASE64: + static const auto fieldBASE64 = clazz->getStaticField("BASE64"); return clazz->getStaticFieldValue(fieldBASE64); default: std::string stringValue = std::to_string(static_cast(value)); diff --git a/nitrogen/generated/android/c++/JNitroFileStat.hpp b/nitrogen/generated/android/c++/JNitroFileStat.hpp index 1643397..9d3691a 100644 --- a/nitrogen/generated/android/c++/JNitroFileStat.hpp +++ b/nitrogen/generated/android/c++/JNitroFileStat.hpp @@ -2,7 +2,7 @@ /// JNitroFileStat.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -21,7 +21,7 @@ namespace margelo::nitro::nitrofs { */ struct JNitroFileStat final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/NitroFileStat;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/NitroFileStat;"; public: /** diff --git a/nitrogen/generated/android/c++/JNitroUploadMethod.hpp b/nitrogen/generated/android/c++/JNitroUploadMethod.hpp index 3618d1c..21e1e58 100644 --- a/nitrogen/generated/android/c++/JNitroUploadMethod.hpp +++ b/nitrogen/generated/android/c++/JNitroUploadMethod.hpp @@ -2,7 +2,7 @@ /// JNitroUploadMethod.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -19,7 +19,7 @@ namespace margelo::nitro::nitrofs { */ struct JNitroUploadMethod final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/NitroUploadMethod;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/NitroUploadMethod;"; public: /** @@ -41,16 +41,15 @@ namespace margelo::nitro::nitrofs { [[maybe_unused]] static jni::alias_ref fromCpp(NitroUploadMethod value) { static const auto clazz = javaClassStatic(); - static const auto fieldPOST = clazz->getStaticField("POST"); - static const auto fieldPUT = clazz->getStaticField("PUT"); - static const auto fieldPATCH = clazz->getStaticField("PATCH"); - switch (value) { case NitroUploadMethod::POST: + static const auto fieldPOST = clazz->getStaticField("POST"); return clazz->getStaticFieldValue(fieldPOST); case NitroUploadMethod::PUT: + static const auto fieldPUT = clazz->getStaticField("PUT"); return clazz->getStaticFieldValue(fieldPUT); case NitroUploadMethod::PATCH: + static const auto fieldPATCH = clazz->getStaticField("PATCH"); return clazz->getStaticFieldValue(fieldPATCH); default: std::string stringValue = std::to_string(static_cast(value)); diff --git a/nitrogen/generated/android/c++/JNitroUploadOptions.hpp b/nitrogen/generated/android/c++/JNitroUploadOptions.hpp index 6b222e6..b97c558 100644 --- a/nitrogen/generated/android/c++/JNitroUploadOptions.hpp +++ b/nitrogen/generated/android/c++/JNitroUploadOptions.hpp @@ -2,7 +2,7 @@ /// JNitroUploadOptions.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -24,7 +24,7 @@ namespace margelo::nitro::nitrofs { */ struct JNitroUploadOptions final: public jni::JavaClass { public: - static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/NitroUploadOptions;"; + static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrofs/NitroUploadOptions;"; public: /** diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/Func_void_double_double.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/Func_void_double_double.kt index 5034c75..dff9b27 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/Func_void_double_double.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/Func_void_double_double.kt @@ -2,7 +2,7 @@ /// Func_void_double_double.kt /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// package com.margelo.nitro.nitrofs diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/HybridNitroFSSpec.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/HybridNitroFSSpec.kt index 822f7b2..b1d29a6 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/HybridNitroFSSpec.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/HybridNitroFSSpec.kt @@ -2,7 +2,7 @@ /// HybridNitroFSSpec.kt /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// package com.margelo.nitro.nitrofs @@ -25,23 +25,6 @@ import com.margelo.nitro.core.HybridObject "LocalVariableName", "PropertyName", "PrivatePropertyName", "FunctionName" ) abstract class HybridNitroFSSpec: HybridObject() { - @DoNotStrip - private var mHybridData: HybridData = initHybrid() - - init { - super.updateNative(mHybridData) - } - - override fun updateNative(hybridData: HybridData) { - mHybridData = hybridData - super.updateNative(hybridData) - } - - // Default implementation of `HybridObject.toString()` - override fun toString(): String { - return "[HybridObject NitroFS]" - } - // Properties @get:DoNotStrip @get:Keep @@ -146,7 +129,21 @@ abstract class HybridNitroFSSpec: HybridObject() { return __result } - private external fun initHybrid(): HybridData + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject NitroFS]" + } + + // C++ backing class + @DoNotStrip + @Keep + protected open class CxxPart(javaPart: HybridNitroFSSpec): HybridObject.CxxPart(javaPart) { + // C++ JHybridNitroFSSpec::CxxPart::initHybrid(...) + external override fun initHybrid(): HybridData + } + override fun createCxxPart(): CxxPart { + return CxxPart(this) + } companion object { protected const val TAG = "HybridNitroFSSpec" diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFSOnLoad.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFSOnLoad.kt index e2b58a7..6625d0b 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFSOnLoad.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFSOnLoad.kt @@ -2,7 +2,7 @@ /// NitroFSOnLoad.kt /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// package com.margelo.nitro.nitrofs diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFile.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFile.kt index 6335079..8dea9e1 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFile.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFile.kt @@ -2,7 +2,7 @@ /// NitroFile.kt /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// package com.margelo.nitro.nitrofs @@ -29,7 +29,7 @@ data class NitroFile( ) { /* primary constructor */ - private companion object { + companion object { /** * Constructor called from C++ */ diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFileEncoding.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFileEncoding.kt index 33190a9..98b8c87 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFileEncoding.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFileEncoding.kt @@ -2,7 +2,7 @@ /// NitroFileEncoding.kt /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// package com.margelo.nitro.nitrofs @@ -19,4 +19,6 @@ enum class NitroFileEncoding(@DoNotStrip @Keep val value: Int) { UTF8(0), ASCII(1), BASE64(2); + + companion object } diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFileStat.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFileStat.kt index d80cf75..af0f440 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFileStat.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroFileStat.kt @@ -2,7 +2,7 @@ /// NitroFileStat.kt /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// package com.margelo.nitro.nitrofs @@ -35,7 +35,7 @@ data class NitroFileStat( ) { /* primary constructor */ - private companion object { + companion object { /** * Constructor called from C++ */ diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroUploadMethod.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroUploadMethod.kt index 405e1b0..bb6af78 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroUploadMethod.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroUploadMethod.kt @@ -2,7 +2,7 @@ /// NitroUploadMethod.kt /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// package com.margelo.nitro.nitrofs @@ -19,4 +19,6 @@ enum class NitroUploadMethod(@DoNotStrip @Keep val value: Int) { POST(0), PUT(1), PATCH(2); + + companion object } diff --git a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroUploadOptions.kt b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroUploadOptions.kt index f1f1e34..50d24a0 100644 --- a/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroUploadOptions.kt +++ b/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrofs/NitroUploadOptions.kt @@ -2,7 +2,7 @@ /// NitroUploadOptions.kt /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// package com.margelo.nitro.nitrofs @@ -29,7 +29,7 @@ data class NitroUploadOptions( ) { /* primary constructor */ - private companion object { + companion object { /** * Constructor called from C++ */ diff --git a/nitrogen/generated/ios/NitroFS+autolinking.rb b/nitrogen/generated/ios/NitroFS+autolinking.rb index e1e54cb..74449fa 100644 --- a/nitrogen/generated/ios/NitroFS+autolinking.rb +++ b/nitrogen/generated/ios/NitroFS+autolinking.rb @@ -2,7 +2,7 @@ # NitroFS+autolinking.rb # This file was generated by nitrogen. DO NOT MODIFY THIS FILE. # https://github.com/mrousavy/nitro -# Copyright © 2025 Marc Rousavy @ Margelo +# Copyright © Marc Rousavy @ Margelo # # This is a Ruby script that adds all files generated by Nitrogen @@ -52,7 +52,7 @@ def add_nitrogen_files(spec) spec.pod_target_xcconfig = current_pod_target_xcconfig.merge({ # Use C++ 20 "CLANG_CXX_LANGUAGE_STANDARD" => "c++20", - # Enables C++ <-> Swift interop (by default it's only C) + # Enables C++ <-> Swift interop (by default it's only ObjC) "SWIFT_OBJC_INTEROP_MODE" => "objcxx", # Enables stricter modular headers "DEFINES_MODULE" => "YES", diff --git a/nitrogen/generated/ios/NitroFS-Swift-Cxx-Bridge.cpp b/nitrogen/generated/ios/NitroFS-Swift-Cxx-Bridge.cpp index dc2f354..aad784e 100644 --- a/nitrogen/generated/ios/NitroFS-Swift-Cxx-Bridge.cpp +++ b/nitrogen/generated/ios/NitroFS-Swift-Cxx-Bridge.cpp @@ -2,7 +2,7 @@ /// NitroFS-Swift-Cxx-Bridge.cpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #include "NitroFS-Swift-Cxx-Bridge.hpp" diff --git a/nitrogen/generated/ios/NitroFS-Swift-Cxx-Bridge.hpp b/nitrogen/generated/ios/NitroFS-Swift-Cxx-Bridge.hpp index 5ad6404..8f2f8e6 100644 --- a/nitrogen/generated/ios/NitroFS-Swift-Cxx-Bridge.hpp +++ b/nitrogen/generated/ios/NitroFS-Swift-Cxx-Bridge.hpp @@ -2,7 +2,7 @@ /// NitroFS-Swift-Cxx-Bridge.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -257,7 +257,7 @@ namespace margelo::nitro::nitrofs::bridge::swift { return optional.has_value(); } inline NitroUploadMethod get_std__optional_NitroUploadMethod_(const std::optional& optional) noexcept { - return *optional; + return optional.value(); } // pragma MARK: std::optional @@ -272,7 +272,7 @@ namespace margelo::nitro::nitrofs::bridge::swift { return optional.has_value(); } inline std::string get_std__optional_std__string_(const std::optional& optional) noexcept { - return *optional; + return optional.value(); } // pragma MARK: std::function @@ -309,7 +309,7 @@ namespace margelo::nitro::nitrofs::bridge::swift { return optional.has_value(); } inline std::function get_std__optional_std__function_void_double____uploadedBytes_____double____totalBytes______(const std::optional>& optional) noexcept { - return *optional; + return optional.value(); } // pragma MARK: std::shared_ptr> @@ -358,7 +358,7 @@ namespace margelo::nitro::nitrofs::bridge::swift { return optional.has_value(); } inline std::function get_std__optional_std__function_void_double____downloadedBytes_____double____totalBytes______(const std::optional>& optional) noexcept { - return *optional; + return optional.value(); } // pragma MARK: std::shared_ptr diff --git a/nitrogen/generated/ios/NitroFS-Swift-Cxx-Umbrella.hpp b/nitrogen/generated/ios/NitroFS-Swift-Cxx-Umbrella.hpp index 16ec4d2..afdbed7 100644 --- a/nitrogen/generated/ios/NitroFS-Swift-Cxx-Umbrella.hpp +++ b/nitrogen/generated/ios/NitroFS-Swift-Cxx-Umbrella.hpp @@ -2,7 +2,7 @@ /// NitroFS-Swift-Cxx-Umbrella.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once diff --git a/nitrogen/generated/ios/NitroFSAutolinking.mm b/nitrogen/generated/ios/NitroFSAutolinking.mm index 173dccf..cdf4b05 100644 --- a/nitrogen/generated/ios/NitroFSAutolinking.mm +++ b/nitrogen/generated/ios/NitroFSAutolinking.mm @@ -2,7 +2,7 @@ /// NitroFSAutolinking.mm /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #import diff --git a/nitrogen/generated/ios/NitroFSAutolinking.swift b/nitrogen/generated/ios/NitroFSAutolinking.swift index 6f48532..6ca7fbd 100644 --- a/nitrogen/generated/ios/NitroFSAutolinking.swift +++ b/nitrogen/generated/ios/NitroFSAutolinking.swift @@ -2,19 +2,16 @@ /// NitroFSAutolinking.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// +import NitroModules + +// TODO: Use empty enums once Swift supports exporting them as namespaces +// See: https://github.com/swiftlang/swift/pull/83616 public final class NitroFSAutolinking { public typealias bridge = margelo.nitro.nitrofs.bridge.swift - /** - * Creates an instance of a Swift class that implements `HybridNitroFSSpec`, - * and wraps it in a Swift class that can directly interop with C++ (`HybridNitroFSSpec_cxx`) - * - * This is generated by Nitrogen and will initialize the class specified - * in the `"autolinking"` property of `nitro.json` (in this case, `HybridNitroFS`). - */ public static func createNitroFS() -> bridge.std__shared_ptr_HybridNitroFSSpec_ { let hybridObject = HybridNitroFS() return { () -> bridge.std__shared_ptr_HybridNitroFSSpec_ in @@ -22,4 +19,8 @@ public final class NitroFSAutolinking { return __cxxWrapped.getCxxPart() }() } + + public static func isNitroFSRecyclable() -> Bool { + return HybridNitroFS.self is any RecyclableView.Type + } } diff --git a/nitrogen/generated/ios/c++/HybridNitroFSSpecSwift.cpp b/nitrogen/generated/ios/c++/HybridNitroFSSpecSwift.cpp index 22926e8..503875e 100644 --- a/nitrogen/generated/ios/c++/HybridNitroFSSpecSwift.cpp +++ b/nitrogen/generated/ios/c++/HybridNitroFSSpecSwift.cpp @@ -2,7 +2,7 @@ /// HybridNitroFSSpecSwift.cpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #include "HybridNitroFSSpecSwift.hpp" diff --git a/nitrogen/generated/ios/c++/HybridNitroFSSpecSwift.hpp b/nitrogen/generated/ios/c++/HybridNitroFSSpecSwift.hpp index 1ffb5e4..ab17999 100644 --- a/nitrogen/generated/ios/c++/HybridNitroFSSpecSwift.hpp +++ b/nitrogen/generated/ios/c++/HybridNitroFSSpecSwift.hpp @@ -2,7 +2,7 @@ /// HybridNitroFSSpecSwift.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -65,6 +65,12 @@ namespace margelo::nitro::nitrofs { inline size_t getExternalMemorySize() noexcept override { return _swiftPart.getMemorySize(); } + bool equals(const std::shared_ptr& other) override { + if (auto otherCast = std::dynamic_pointer_cast(other)) { + return _swiftPart.equals(otherCast->_swiftPart); + } + return false; + } void dispose() noexcept override { _swiftPart.dispose(); } diff --git a/nitrogen/generated/ios/swift/Func_void.swift b/nitrogen/generated/ios/swift/Func_void.swift index c417782..2c0c354 100644 --- a/nitrogen/generated/ios/swift/Func_void.swift +++ b/nitrogen/generated/ios/swift/Func_void.swift @@ -2,10 +2,9 @@ /// Func_void.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** diff --git a/nitrogen/generated/ios/swift/Func_void_NitroFile.swift b/nitrogen/generated/ios/swift/Func_void_NitroFile.swift index 6e51d2d..1873071 100644 --- a/nitrogen/generated/ios/swift/Func_void_NitroFile.swift +++ b/nitrogen/generated/ios/swift/Func_void_NitroFile.swift @@ -2,10 +2,9 @@ /// Func_void_NitroFile.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** diff --git a/nitrogen/generated/ios/swift/Func_void_NitroFileStat.swift b/nitrogen/generated/ios/swift/Func_void_NitroFileStat.swift index 42ff3fd..fc6ebe3 100644 --- a/nitrogen/generated/ios/swift/Func_void_NitroFileStat.swift +++ b/nitrogen/generated/ios/swift/Func_void_NitroFileStat.swift @@ -2,10 +2,9 @@ /// Func_void_NitroFileStat.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** diff --git a/nitrogen/generated/ios/swift/Func_void_bool.swift b/nitrogen/generated/ios/swift/Func_void_bool.swift index 3731ecf..3e69485 100644 --- a/nitrogen/generated/ios/swift/Func_void_bool.swift +++ b/nitrogen/generated/ios/swift/Func_void_bool.swift @@ -2,10 +2,9 @@ /// Func_void_bool.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** diff --git a/nitrogen/generated/ios/swift/Func_void_double_double.swift b/nitrogen/generated/ios/swift/Func_void_double_double.swift index 4c4ca87..a037158 100644 --- a/nitrogen/generated/ios/swift/Func_void_double_double.swift +++ b/nitrogen/generated/ios/swift/Func_void_double_double.swift @@ -2,10 +2,9 @@ /// Func_void_double_double.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** diff --git a/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift b/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift index e7df9ac..ced9302 100644 --- a/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +++ b/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift @@ -2,10 +2,9 @@ /// Func_void_std__exception_ptr.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** diff --git a/nitrogen/generated/ios/swift/Func_void_std__string.swift b/nitrogen/generated/ios/swift/Func_void_std__string.swift index c4726d8..8fa1549 100644 --- a/nitrogen/generated/ios/swift/Func_void_std__string.swift +++ b/nitrogen/generated/ios/swift/Func_void_std__string.swift @@ -2,10 +2,9 @@ /// Func_void_std__string.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** diff --git a/nitrogen/generated/ios/swift/Func_void_std__vector_NitroFile_.swift b/nitrogen/generated/ios/swift/Func_void_std__vector_NitroFile_.swift index 18eb94f..5cc4319 100644 --- a/nitrogen/generated/ios/swift/Func_void_std__vector_NitroFile_.swift +++ b/nitrogen/generated/ios/swift/Func_void_std__vector_NitroFile_.swift @@ -2,10 +2,9 @@ /// Func_void_std__vector_NitroFile_.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** diff --git a/nitrogen/generated/ios/swift/HybridNitroFSSpec.swift b/nitrogen/generated/ios/swift/HybridNitroFSSpec.swift index a9d411d..4083404 100644 --- a/nitrogen/generated/ios/swift/HybridNitroFSSpec.swift +++ b/nitrogen/generated/ios/swift/HybridNitroFSSpec.swift @@ -2,10 +2,9 @@ /// HybridNitroFSSpec.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /// See ``HybridNitroFSSpec`` @@ -51,14 +50,14 @@ open class HybridNitroFSSpec_base { public init() { } public func getCxxWrapper() -> HybridNitroFSSpec_cxx { #if DEBUG - guard self is HybridNitroFSSpec else { + guard self is any HybridNitroFSSpec else { fatalError("`self` is not a `HybridNitroFSSpec`! Did you accidentally inherit from `HybridNitroFSSpec_base` instead of `HybridNitroFSSpec`?") } #endif if let cxxWrapper = self.cxxWrapper { return cxxWrapper } else { - let cxxWrapper = HybridNitroFSSpec_cxx(self as! HybridNitroFSSpec) + let cxxWrapper = HybridNitroFSSpec_cxx(self as! any HybridNitroFSSpec) self.cxxWrapper = cxxWrapper return cxxWrapper } diff --git a/nitrogen/generated/ios/swift/HybridNitroFSSpec_cxx.swift b/nitrogen/generated/ios/swift/HybridNitroFSSpec_cxx.swift index 8015f1e..99cf647 100644 --- a/nitrogen/generated/ios/swift/HybridNitroFSSpec_cxx.swift +++ b/nitrogen/generated/ios/swift/HybridNitroFSSpec_cxx.swift @@ -2,10 +2,9 @@ /// HybridNitroFSSpec_cxx.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** @@ -96,6 +95,14 @@ open class HybridNitroFSSpec_cxx { return MemoryHelper.getSizeOf(self.__implementation) + self.__implementation.memorySize } + /** + * Compares this object with the given [other] object for reference equality. + */ + @inline(__always) + public func equals(other: HybridNitroFSSpec_cxx) -> Bool { + return self.__implementation === other.__implementation + } + /** * Call dispose() on the Swift class. * This _may_ be called manually from JS. diff --git a/nitrogen/generated/ios/swift/NitroFile.swift b/nitrogen/generated/ios/swift/NitroFile.swift index 63db534..147ae1f 100644 --- a/nitrogen/generated/ios/swift/NitroFile.swift +++ b/nitrogen/generated/ios/swift/NitroFile.swift @@ -2,10 +2,9 @@ /// NitroFile.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** @@ -23,36 +22,18 @@ public extension NitroFile { self.init(std.string(name), std.string(mimeType), std.string(path)) } + @inline(__always) var name: String { - @inline(__always) - get { - return String(self.__name) - } - @inline(__always) - set { - self.__name = std.string(newValue) - } + return String(self.__name) } + @inline(__always) var mimeType: String { - @inline(__always) - get { - return String(self.__mimeType) - } - @inline(__always) - set { - self.__mimeType = std.string(newValue) - } + return String(self.__mimeType) } + @inline(__always) var path: String { - @inline(__always) - get { - return String(self.__path) - } - @inline(__always) - set { - self.__path = std.string(newValue) - } + return String(self.__path) } } diff --git a/nitrogen/generated/ios/swift/NitroFileEncoding.swift b/nitrogen/generated/ios/swift/NitroFileEncoding.swift index 38e0b97..6104640 100644 --- a/nitrogen/generated/ios/swift/NitroFileEncoding.swift +++ b/nitrogen/generated/ios/swift/NitroFileEncoding.swift @@ -2,7 +2,7 @@ /// NitroFileEncoding.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// /** diff --git a/nitrogen/generated/ios/swift/NitroFileStat.swift b/nitrogen/generated/ios/swift/NitroFileStat.swift index 3068516..83dca56 100644 --- a/nitrogen/generated/ios/swift/NitroFileStat.swift +++ b/nitrogen/generated/ios/swift/NitroFileStat.swift @@ -2,10 +2,9 @@ /// NitroFileStat.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** @@ -23,58 +22,28 @@ public extension NitroFileStat { self.init(size, ctime, mtime, isFile, isDirectory) } + @inline(__always) var size: Double { - @inline(__always) - get { - return self.__size - } - @inline(__always) - set { - self.__size = newValue - } + return self.__size } + @inline(__always) var ctime: Double { - @inline(__always) - get { - return self.__ctime - } - @inline(__always) - set { - self.__ctime = newValue - } + return self.__ctime } + @inline(__always) var mtime: Double { - @inline(__always) - get { - return self.__mtime - } - @inline(__always) - set { - self.__mtime = newValue - } + return self.__mtime } + @inline(__always) var isFile: Bool { - @inline(__always) - get { - return self.__isFile - } - @inline(__always) - set { - self.__isFile = newValue - } + return self.__isFile } + @inline(__always) var isDirectory: Bool { - @inline(__always) - get { - return self.__isDirectory - } - @inline(__always) - set { - self.__isDirectory = newValue - } + return self.__isDirectory } } diff --git a/nitrogen/generated/ios/swift/NitroUploadMethod.swift b/nitrogen/generated/ios/swift/NitroUploadMethod.swift index da1197f..ffcaca7 100644 --- a/nitrogen/generated/ios/swift/NitroUploadMethod.swift +++ b/nitrogen/generated/ios/swift/NitroUploadMethod.swift @@ -2,7 +2,7 @@ /// NitroUploadMethod.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// /** diff --git a/nitrogen/generated/ios/swift/NitroUploadOptions.swift b/nitrogen/generated/ios/swift/NitroUploadOptions.swift index 2141117..9e1539a 100644 --- a/nitrogen/generated/ios/swift/NitroUploadOptions.swift +++ b/nitrogen/generated/ios/swift/NitroUploadOptions.swift @@ -2,10 +2,9 @@ /// NitroUploadOptions.swift /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// -import Foundation import NitroModules /** @@ -35,55 +34,25 @@ public extension NitroUploadOptions { }()) } + @inline(__always) var url: String { - @inline(__always) - get { - return String(self.__url) - } - @inline(__always) - set { - self.__url = std.string(newValue) - } + return String(self.__url) } + @inline(__always) var method: NitroUploadMethod? { - @inline(__always) - get { - return self.__method.value - } - @inline(__always) - set { - self.__method = { () -> bridge.std__optional_NitroUploadMethod_ in - if let __unwrappedValue = newValue { - return bridge.create_std__optional_NitroUploadMethod_(__unwrappedValue) - } else { - return .init() - } - }() - } + return self.__method.value } + @inline(__always) var field: String? { - @inline(__always) - get { - return { () -> String? in - if bridge.has_value_std__optional_std__string_(self.__field) { - let __unwrapped = bridge.get_std__optional_std__string_(self.__field) - return String(__unwrapped) - } else { - return nil - } - }() - } - @inline(__always) - set { - self.__field = { () -> bridge.std__optional_std__string_ in - if let __unwrappedValue = newValue { - return bridge.create_std__optional_std__string_(std.string(__unwrappedValue)) - } else { - return .init() - } - }() - } + return { () -> String? in + if bridge.has_value_std__optional_std__string_(self.__field) { + let __unwrapped = bridge.get_std__optional_std__string_(self.__field) + return String(__unwrapped) + } else { + return nil + } + }() } } diff --git a/nitrogen/generated/shared/c++/HybridNitroFSSpec.cpp b/nitrogen/generated/shared/c++/HybridNitroFSSpec.cpp index f26b426..70a5a10 100644 --- a/nitrogen/generated/shared/c++/HybridNitroFSSpec.cpp +++ b/nitrogen/generated/shared/c++/HybridNitroFSSpec.cpp @@ -2,7 +2,7 @@ /// HybridNitroFSSpec.cpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #include "HybridNitroFSSpec.hpp" diff --git a/nitrogen/generated/shared/c++/HybridNitroFSSpec.hpp b/nitrogen/generated/shared/c++/HybridNitroFSSpec.hpp index a2c7cce..ebd5581 100644 --- a/nitrogen/generated/shared/c++/HybridNitroFSSpec.hpp +++ b/nitrogen/generated/shared/c++/HybridNitroFSSpec.hpp @@ -2,7 +2,7 @@ /// HybridNitroFSSpec.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once diff --git a/nitrogen/generated/shared/c++/NitroFile.hpp b/nitrogen/generated/shared/c++/NitroFile.hpp index 4a40b0f..1d87940 100644 --- a/nitrogen/generated/shared/c++/NitroFile.hpp +++ b/nitrogen/generated/shared/c++/NitroFile.hpp @@ -2,7 +2,7 @@ /// NitroFile.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -22,6 +22,11 @@ #else #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif @@ -32,7 +37,7 @@ namespace margelo::nitro::nitrofs { /** * A struct which can be represented as a JavaScript object (NitroFile). */ - struct NitroFile { + struct NitroFile final { public: std::string name SWIFT_PRIVATE; std::string mimeType SWIFT_PRIVATE; @@ -41,6 +46,9 @@ namespace margelo::nitro::nitrofs { public: NitroFile() = default; explicit NitroFile(std::string name, std::string mimeType, std::string path): name(name), mimeType(mimeType), path(path) {} + + public: + friend bool operator==(const NitroFile& lhs, const NitroFile& rhs) = default; }; } // namespace margelo::nitro::nitrofs @@ -53,16 +61,16 @@ namespace margelo::nitro { static inline margelo::nitro::nitrofs::NitroFile fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { jsi::Object obj = arg.asObject(runtime); return margelo::nitro::nitrofs::NitroFile( - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "name")), - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "mimeType")), - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "path")) + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "name"))), + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "mimeType"))), + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "path"))) ); } static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::nitrofs::NitroFile& arg) { jsi::Object obj(runtime); - obj.setProperty(runtime, "name", JSIConverter::toJSI(runtime, arg.name)); - obj.setProperty(runtime, "mimeType", JSIConverter::toJSI(runtime, arg.mimeType)); - obj.setProperty(runtime, "path", JSIConverter::toJSI(runtime, arg.path)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "name"), JSIConverter::toJSI(runtime, arg.name)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "mimeType"), JSIConverter::toJSI(runtime, arg.mimeType)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "path"), JSIConverter::toJSI(runtime, arg.path)); return obj; } static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { @@ -73,9 +81,9 @@ namespace margelo::nitro { if (!nitro::isPlainObject(runtime, obj)) { return false; } - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "name"))) return false; - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "mimeType"))) return false; - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "path"))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "name")))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "mimeType")))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "path")))) return false; return true; } }; diff --git a/nitrogen/generated/shared/c++/NitroFileEncoding.hpp b/nitrogen/generated/shared/c++/NitroFileEncoding.hpp index 91b36a2..b34422e 100644 --- a/nitrogen/generated/shared/c++/NitroFileEncoding.hpp +++ b/nitrogen/generated/shared/c++/NitroFileEncoding.hpp @@ -2,7 +2,7 @@ /// NitroFileEncoding.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once diff --git a/nitrogen/generated/shared/c++/NitroFileStat.hpp b/nitrogen/generated/shared/c++/NitroFileStat.hpp index fe3b56c..75287e7 100644 --- a/nitrogen/generated/shared/c++/NitroFileStat.hpp +++ b/nitrogen/generated/shared/c++/NitroFileStat.hpp @@ -2,7 +2,7 @@ /// NitroFileStat.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -22,6 +22,11 @@ #else #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif @@ -32,7 +37,7 @@ namespace margelo::nitro::nitrofs { /** * A struct which can be represented as a JavaScript object (NitroFileStat). */ - struct NitroFileStat { + struct NitroFileStat final { public: double size SWIFT_PRIVATE; double ctime SWIFT_PRIVATE; @@ -43,6 +48,9 @@ namespace margelo::nitro::nitrofs { public: NitroFileStat() = default; explicit NitroFileStat(double size, double ctime, double mtime, bool isFile, bool isDirectory): size(size), ctime(ctime), mtime(mtime), isFile(isFile), isDirectory(isDirectory) {} + + public: + friend bool operator==(const NitroFileStat& lhs, const NitroFileStat& rhs) = default; }; } // namespace margelo::nitro::nitrofs @@ -55,20 +63,20 @@ namespace margelo::nitro { static inline margelo::nitro::nitrofs::NitroFileStat fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { jsi::Object obj = arg.asObject(runtime); return margelo::nitro::nitrofs::NitroFileStat( - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "size")), - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "ctime")), - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "mtime")), - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "isFile")), - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "isDirectory")) + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "size"))), + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ctime"))), + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "mtime"))), + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "isFile"))), + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "isDirectory"))) ); } static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::nitrofs::NitroFileStat& arg) { jsi::Object obj(runtime); - obj.setProperty(runtime, "size", JSIConverter::toJSI(runtime, arg.size)); - obj.setProperty(runtime, "ctime", JSIConverter::toJSI(runtime, arg.ctime)); - obj.setProperty(runtime, "mtime", JSIConverter::toJSI(runtime, arg.mtime)); - obj.setProperty(runtime, "isFile", JSIConverter::toJSI(runtime, arg.isFile)); - obj.setProperty(runtime, "isDirectory", JSIConverter::toJSI(runtime, arg.isDirectory)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "size"), JSIConverter::toJSI(runtime, arg.size)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "ctime"), JSIConverter::toJSI(runtime, arg.ctime)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "mtime"), JSIConverter::toJSI(runtime, arg.mtime)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "isFile"), JSIConverter::toJSI(runtime, arg.isFile)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "isDirectory"), JSIConverter::toJSI(runtime, arg.isDirectory)); return obj; } static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { @@ -79,11 +87,11 @@ namespace margelo::nitro { if (!nitro::isPlainObject(runtime, obj)) { return false; } - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "size"))) return false; - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "ctime"))) return false; - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "mtime"))) return false; - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "isFile"))) return false; - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "isDirectory"))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "size")))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "ctime")))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "mtime")))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "isFile")))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "isDirectory")))) return false; return true; } }; diff --git a/nitrogen/generated/shared/c++/NitroUploadMethod.hpp b/nitrogen/generated/shared/c++/NitroUploadMethod.hpp index c089958..f69133e 100644 --- a/nitrogen/generated/shared/c++/NitroUploadMethod.hpp +++ b/nitrogen/generated/shared/c++/NitroUploadMethod.hpp @@ -2,7 +2,7 @@ /// NitroUploadMethod.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once diff --git a/nitrogen/generated/shared/c++/NitroUploadOptions.hpp b/nitrogen/generated/shared/c++/NitroUploadOptions.hpp index bbfab98..5036e14 100644 --- a/nitrogen/generated/shared/c++/NitroUploadOptions.hpp +++ b/nitrogen/generated/shared/c++/NitroUploadOptions.hpp @@ -2,7 +2,7 @@ /// NitroUploadOptions.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo +/// Copyright © Marc Rousavy @ Margelo /// #pragma once @@ -22,6 +22,11 @@ #else #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif // Forward declaration of `NitroUploadMethod` to properly resolve imports. namespace margelo::nitro::nitrofs { enum class NitroUploadMethod; } @@ -35,7 +40,7 @@ namespace margelo::nitro::nitrofs { /** * A struct which can be represented as a JavaScript object (NitroUploadOptions). */ - struct NitroUploadOptions { + struct NitroUploadOptions final { public: std::string url SWIFT_PRIVATE; std::optional method SWIFT_PRIVATE; @@ -44,6 +49,9 @@ namespace margelo::nitro::nitrofs { public: NitroUploadOptions() = default; explicit NitroUploadOptions(std::string url, std::optional method, std::optional field): url(url), method(method), field(field) {} + + public: + friend bool operator==(const NitroUploadOptions& lhs, const NitroUploadOptions& rhs) = default; }; } // namespace margelo::nitro::nitrofs @@ -56,16 +64,16 @@ namespace margelo::nitro { static inline margelo::nitro::nitrofs::NitroUploadOptions fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { jsi::Object obj = arg.asObject(runtime); return margelo::nitro::nitrofs::NitroUploadOptions( - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "url")), - JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, "method")), - JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, "field")) + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "url"))), + JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "method"))), + JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "field"))) ); } static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::nitrofs::NitroUploadOptions& arg) { jsi::Object obj(runtime); - obj.setProperty(runtime, "url", JSIConverter::toJSI(runtime, arg.url)); - obj.setProperty(runtime, "method", JSIConverter>::toJSI(runtime, arg.method)); - obj.setProperty(runtime, "field", JSIConverter>::toJSI(runtime, arg.field)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "url"), JSIConverter::toJSI(runtime, arg.url)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "method"), JSIConverter>::toJSI(runtime, arg.method)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "field"), JSIConverter>::toJSI(runtime, arg.field)); return obj; } static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { @@ -76,9 +84,9 @@ namespace margelo::nitro { if (!nitro::isPlainObject(runtime, obj)) { return false; } - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "url"))) return false; - if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, "method"))) return false; - if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, "field"))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "url")))) return false; + if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "method")))) return false; + if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "field")))) return false; return true; } }; diff --git a/package.json b/package.json index 856792c..798b386 100644 --- a/package.json +++ b/package.json @@ -58,7 +58,7 @@ "@types/jest": "^29.5.12", "@types/react": "^19.1.0", "conventional-changelog-conventionalcommits": "^9.1.0", - "nitrogen": "^0.31.9", + "nitrogen": "^0.35.1", "react": "19.1.0", "react-native": "0.81.5", "react-native-builder-bob": "^0.37.0",