Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,9 +78,5 @@ android/keystores/debug.keystore
# generated by bob
lib/

# React Native Codegen
ios/generated
android/generated

# React Native Nitro Modules
nitrogen/
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,14 @@ Try the benchmarks in the [example](./example) app.
npm install react-native-quick-base64
```

> [!IMPORTANT]
> **Requires the New Architecture.** Version `3.0.0`+ is a pure C++ TurboModule and only registers when the app runs with React Native's New Architecture enabled:
>
> - Bare React Native: `newArchEnabled=true` (default on RN 0.76+; forced on 0.85+).
> - Expo: SDK 54+ (New Architecture is default), or SDK 53 with New Architecture explicitly enabled.
>
> On the Old Architecture you'll get `TurboModuleRegistry.getEnforcing(...): 'QuickBase64' could not be found`. Enable the New Architecture and rebuild (`cd android && ./gradlew clean`), or pin `react-native-quick-base64@2.2.2` to stay on the Old Architecture.

---

This module installs its native bindings automatically.
Expand Down
43 changes: 43 additions & 0 deletions android/generated/java/com/quickbase64/NativeQuickBase64Spec.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@

/**
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
*
* Do not edit this file as changes may cause incorrect behavior and will be lost
* once the code is regenerated.
*
* @generated by codegen project: GenerateModuleJavaSpec.js
*
* @nolint
*/

package com.quickbase64;

import com.facebook.proguard.annotations.DoNotStrip;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
import javax.annotation.Nonnull;

public abstract class NativeQuickBase64Spec extends ReactContextBaseJavaModule implements TurboModule {
public static final String NAME = "QuickBase64";

public NativeQuickBase64Spec(ReactApplicationContext reactContext) {
super(reactContext);
}

@Override
public @Nonnull String getName() {
return NAME;
}

@ReactMethod(isBlockingSynchronousMethod = true)
@DoNotStrip
public abstract String base64FromArrayBuffer(ReadableMap buf, boolean urlSafe);

@ReactMethod(isBlockingSynchronousMethod = true)
@DoNotStrip
public abstract WritableMap base64ToArrayBuffer(String b64, boolean removeLinebreaks);
}
28 changes: 28 additions & 0 deletions android/generated/jni/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
#
# This source code is licensed under the MIT license found in the
# LICENSE file in the root directory of this source tree.

cmake_minimum_required(VERSION 3.13)
set(CMAKE_VERBOSE_MAKEFILE on)

file(GLOB react_codegen_SRCS CONFIGURE_DEPENDS *.cpp react/renderer/components/QuickBase64Spec/*.cpp)

add_library(
react_codegen_QuickBase64Spec
OBJECT
${react_codegen_SRCS}
)

target_include_directories(react_codegen_QuickBase64Spec PUBLIC . react/renderer/components/QuickBase64Spec)

target_link_libraries(
react_codegen_QuickBase64Spec
fbjni
jsi
# We need to link different libraries based on whether we are building rncore or not, that's necessary
# because we want to break a circular dependency between react_codegen_rncore and reactnative
reactnative
)

target_compile_reactnative_options(react_codegen_QuickBase64Spec PRIVATE)
38 changes: 38 additions & 0 deletions android/generated/jni/QuickBase64Spec-generated.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@

/**
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
*
* Do not edit this file as changes may cause incorrect behavior and will be lost
* once the code is regenerated.
*
* @generated by codegen project: GenerateModuleJniCpp.js
*/

#include "QuickBase64Spec.h"

namespace facebook::react {

static facebook::jsi::Value __hostFunction_NativeQuickBase64SpecJSI_base64FromArrayBuffer(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
static jmethodID cachedMethodId = nullptr;
return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, StringKind, "base64FromArrayBuffer", "(Lcom/facebook/react/bridge/ReadableMap;Z)Ljava/lang/String;", args, count, cachedMethodId);
}

static facebook::jsi::Value __hostFunction_NativeQuickBase64SpecJSI_base64ToArrayBuffer(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
static jmethodID cachedMethodId = nullptr;
return static_cast<JavaTurboModule &>(turboModule).invokeJavaMethod(rt, ObjectKind, "base64ToArrayBuffer", "(Ljava/lang/String;Z)Lcom/facebook/react/bridge/WritableMap;", args, count, cachedMethodId);
}

NativeQuickBase64SpecJSI::NativeQuickBase64SpecJSI(const JavaTurboModule::InitParams &params)
: JavaTurboModule(params) {
methodMap_["base64FromArrayBuffer"] = MethodMetadata {2, __hostFunction_NativeQuickBase64SpecJSI_base64FromArrayBuffer};
methodMap_["base64ToArrayBuffer"] = MethodMetadata {2, __hostFunction_NativeQuickBase64SpecJSI_base64ToArrayBuffer};
}

std::shared_ptr<TurboModule> QuickBase64Spec_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams &params) {
if (moduleName == "QuickBase64") {
return std::make_shared<NativeQuickBase64SpecJSI>(params);
}
return nullptr;
}

} // namespace facebook::react
31 changes: 31 additions & 0 deletions android/generated/jni/QuickBase64Spec.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

/**
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
*
* Do not edit this file as changes may cause incorrect behavior and will be lost
* once the code is regenerated.
*
* @generated by codegen project: GenerateModuleJniH.js
*/

#pragma once

#include <ReactCommon/JavaTurboModule.h>
#include <ReactCommon/TurboModule.h>
#include <jsi/jsi.h>

namespace facebook::react {

/**
* JNI C++ class for module 'NativeQuickBase64'
*/
class JSI_EXPORT NativeQuickBase64SpecJSI : public JavaTurboModule {
public:
NativeQuickBase64SpecJSI(const JavaTurboModule::InitParams &params);
};


JSI_EXPORT
std::shared_ptr<TurboModule> QuickBase64Spec_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams &params);

} // namespace facebook::react
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
*
* Do not edit this file as changes may cause incorrect behavior and will be lost
* once the code is regenerated.
*
* @generated by codegen project: GenerateModuleH.js
*/

#pragma once

#include <ReactCommon/TurboModule.h>
#include <react/bridging/Bridging.h>

namespace facebook::react {


template <typename T>
class JSI_EXPORT NativeQuickBase64CxxSpec : public TurboModule {
public:
static constexpr std::string_view kModuleName = "QuickBase64";

protected:
NativeQuickBase64CxxSpec(std::shared_ptr<CallInvoker> jsInvoker) : TurboModule(std::string{NativeQuickBase64CxxSpec::kModuleName}, jsInvoker) {
methodMap_["base64FromArrayBuffer"] = MethodMetadata {.argCount = 2, .invoker = __base64FromArrayBuffer};
methodMap_["base64ToArrayBuffer"] = MethodMetadata {.argCount = 2, .invoker = __base64ToArrayBuffer};
}

private:
static jsi::Value __base64FromArrayBuffer(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
static_assert(
bridging::getParameterCount(&T::base64FromArrayBuffer) == 3,
"Expected base64FromArrayBuffer(...) to have 3 parameters");
return bridging::callFromJs<jsi::String>(rt, &T::base64FromArrayBuffer, static_cast<NativeQuickBase64CxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asObject(rt),
count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asBool());
}

static jsi::Value __base64ToArrayBuffer(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
static_assert(
bridging::getParameterCount(&T::base64ToArrayBuffer) == 3,
"Expected base64ToArrayBuffer(...) to have 3 parameters");
return bridging::callFromJs<jsi::Object>(rt, &T::base64ToArrayBuffer, static_cast<NativeQuickBase64CxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asBool());
}
};

} // namespace facebook::react
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
*
* Do not edit this file as changes may cause incorrect behavior and will be lost
* once the code is regenerated.
*
* @generated by codegen project: GenerateModuleObjCpp
*
* We create an umbrella header (and corresponding implementation) here since
* Cxx compilation in BUCK has a limitation: source-code producing genrule()s
* must have a single output. More files => more genrule()s => slower builds.
*/

#import "QuickBase64Spec.h"


@implementation NativeQuickBase64SpecBase


- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper
{
_eventEmitterCallback = std::move(eventEmitterCallbackWrapper->_eventEmitterCallback);
}
@end


namespace facebook::react {

static facebook::jsi::Value __hostFunction_NativeQuickBase64SpecJSI_base64FromArrayBuffer(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, StringKind, "base64FromArrayBuffer", @selector(base64FromArrayBuffer:urlSafe:), args, count);
}

static facebook::jsi::Value __hostFunction_NativeQuickBase64SpecJSI_base64ToArrayBuffer(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, ObjectKind, "base64ToArrayBuffer", @selector(base64ToArrayBuffer:removeLinebreaks:), args, count);
}

NativeQuickBase64SpecJSI::NativeQuickBase64SpecJSI(const ObjCTurboModule::InitParams &params)
: ObjCTurboModule(params) {

methodMap_["base64FromArrayBuffer"] = MethodMetadata {2, __hostFunction_NativeQuickBase64SpecJSI_base64FromArrayBuffer};


methodMap_["base64ToArrayBuffer"] = MethodMetadata {2, __hostFunction_NativeQuickBase64SpecJSI_base64ToArrayBuffer};

}
} // namespace facebook::react
65 changes: 65 additions & 0 deletions ios/generated/ReactCodegen/QuickBase64Spec/QuickBase64Spec.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/**
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
*
* Do not edit this file as changes may cause incorrect behavior and will be lost
* once the code is regenerated.
*
* @generated by codegen project: GenerateModuleObjCpp
*
* We create an umbrella header (and corresponding implementation) here since
* Cxx compilation in BUCK has a limitation: source-code producing genrule()s
* must have a single output. More files => more genrule()s => slower builds.
*/

#ifndef __cplusplus
#error This file must be compiled as Obj-C++. If you are importing it, you must change your file extension to .mm.
#endif

// Avoid multiple includes of QuickBase64Spec symbols
#ifndef QuickBase64Spec_H
#define QuickBase64Spec_H

#import <Foundation/Foundation.h>
#import <RCTRequired/RCTRequired.h>
#import <RCTTypeSafety/RCTConvertHelpers.h>
#import <RCTTypeSafety/RCTTypedModuleConstants.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTCxxConvert.h>
#import <React/RCTManagedPointer.h>
#import <ReactCommon/RCTTurboModule.h>
#import <optional>
#import <vector>


NS_ASSUME_NONNULL_BEGIN

@protocol NativeQuickBase64Spec <RCTBridgeModule, RCTTurboModule>

- (NSString *)base64FromArrayBuffer:(NSDictionary *)buf
urlSafe:(BOOL)urlSafe;
- (NSDictionary *)base64ToArrayBuffer:(NSString *)b64
removeLinebreaks:(BOOL)removeLinebreaks;

@end

@interface NativeQuickBase64SpecBase : NSObject {
@protected
facebook::react::EventEmitterCallback _eventEmitterCallback;
}
- (void)setEventEmitterCallback:(EventEmitterCallbackWrapper *)eventEmitterCallbackWrapper;


@end

namespace facebook::react {
/**
* ObjC++ class for module 'NativeQuickBase64'
*/
class JSI_EXPORT NativeQuickBase64SpecJSI : public ObjCTurboModule {
public:
NativeQuickBase64SpecJSI(const ObjCTurboModule::InitParams &params);
};
} // namespace facebook::react

NS_ASSUME_NONNULL_END
#endif // QuickBase64Spec_H
49 changes: 49 additions & 0 deletions ios/generated/ReactCodegen/QuickBase64SpecJSI.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
*
* Do not edit this file as changes may cause incorrect behavior and will be lost
* once the code is regenerated.
*
* @generated by codegen project: GenerateModuleH.js
*/

#pragma once

#include <ReactCommon/TurboModule.h>
#include <react/bridging/Bridging.h>

namespace facebook::react {


template <typename T>
class JSI_EXPORT NativeQuickBase64CxxSpec : public TurboModule {
public:
static constexpr std::string_view kModuleName = "QuickBase64";

protected:
NativeQuickBase64CxxSpec(std::shared_ptr<CallInvoker> jsInvoker) : TurboModule(std::string{NativeQuickBase64CxxSpec::kModuleName}, jsInvoker) {
methodMap_["base64FromArrayBuffer"] = MethodMetadata {.argCount = 2, .invoker = __base64FromArrayBuffer};
methodMap_["base64ToArrayBuffer"] = MethodMetadata {.argCount = 2, .invoker = __base64ToArrayBuffer};
}

private:
static jsi::Value __base64FromArrayBuffer(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
static_assert(
bridging::getParameterCount(&T::base64FromArrayBuffer) == 3,
"Expected base64FromArrayBuffer(...) to have 3 parameters");
return bridging::callFromJs<jsi::String>(rt, &T::base64FromArrayBuffer, static_cast<NativeQuickBase64CxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asObject(rt),
count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asBool());
}

static jsi::Value __base64ToArrayBuffer(jsi::Runtime &rt, TurboModule &turboModule, const jsi::Value* args, size_t count) {
static_assert(
bridging::getParameterCount(&T::base64ToArrayBuffer) == 3,
"Expected base64ToArrayBuffer(...) to have 3 parameters");
return bridging::callFromJs<jsi::Object>(rt, &T::base64ToArrayBuffer, static_cast<NativeQuickBase64CxxSpec*>(&turboModule)->jsInvoker_, static_cast<T*>(&turboModule),
count <= 0 ? throw jsi::JSError(rt, "Expected argument in position 0 to be passed") : args[0].asString(rt),
count <= 1 ? throw jsi::JSError(rt, "Expected argument in position 1 to be passed") : args[1].asBool());
}
};

} // namespace facebook::react
Loading