react-native-nitro-buffer 0.0.14 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,6 +9,9 @@ add_library(NitroBuffer SHARED
9
9
  ../cpp/HybridNitroBuffer.cpp
10
10
  )
11
11
 
12
+ # Force both hash styles (sysv and gnu) for Android loader compatibility
13
+ target_link_options(NitroBuffer PRIVATE "-Wl,--hash-style=both")
14
+
12
15
  # Include paths for our headers
13
16
  include_directories(
14
17
  ${CMAKE_CURRENT_SOURCE_DIR}/../cpp
@@ -158,7 +158,7 @@ std::shared_ptr<ArrayBuffer> HybridNitroBuffer::allocUnsafe(double size) {
158
158
  double HybridNitroBuffer::byteLength(const std::string &string,
159
159
  const std::string &encoding) {
160
160
  if (encoding == "hex") {
161
- return string.length() / 2;
161
+ return (double)(string.length() / 2);
162
162
  } else if (encoding == "base64") {
163
163
  size_t len = string.length();
164
164
  if (len == 0)
@@ -168,10 +168,33 @@ double HybridNitroBuffer::byteLength(const std::string &string,
168
168
  padding++;
169
169
  if (len > 1 && string[len - 2] == '=')
170
170
  padding++;
171
- return (len * 3) / 4 - padding;
171
+ return (double)((len * 3) / 4 - padding);
172
+ } else if (encoding == "binary" || encoding == "latin1") {
173
+ // Each character in the original string (0-255) maps to one byte.
174
+ // The input 'string' is UTF-8 encoded. We count Unicode code points.
175
+ size_t count = 0;
176
+ size_t i = 0;
177
+ size_t len = string.length();
178
+ const char *str = string.c_str();
179
+ while (i < len) {
180
+ unsigned char byte = static_cast<unsigned char>(str[i]);
181
+ if (byte <= 0x7F) {
182
+ i += 1;
183
+ } else if ((byte & 0xE0) == 0xC0) {
184
+ i += 2;
185
+ } else if ((byte & 0xF0) == 0xE0) {
186
+ i += 3;
187
+ } else if ((byte & 0xF8) == 0xF0) {
188
+ i += 4;
189
+ } else {
190
+ i += 1;
191
+ }
192
+ count++;
193
+ }
194
+ return (double)count;
172
195
  }
173
196
  // utf8 (default)
174
- return string.length();
197
+ return (double)string.length();
175
198
  }
176
199
 
177
200
  double HybridNitroBuffer::write(const std::shared_ptr<ArrayBuffer> &buffer,
@@ -191,7 +214,7 @@ double HybridNitroBuffer::write(const std::shared_ptr<ArrayBuffer> &buffer,
191
214
  size_t strLen = string.length();
192
215
  size_t actualWrite = std::min(toWrite, strLen);
193
216
  memcpy(data + start, string.c_str(), actualWrite);
194
- return actualWrite;
217
+ return (double)actualWrite;
195
218
  } else if (encoding == "hex") {
196
219
  size_t strLen = string.length();
197
220
  size_t bytesCount = strLen / 2;
@@ -202,19 +225,58 @@ double HybridNitroBuffer::write(const std::shared_ptr<ArrayBuffer> &buffer,
202
225
  (unsigned char)strtol(byteString.c_str(), nullptr, 16);
203
226
  data[start + i] = byte;
204
227
  }
205
- return actualWrite;
228
+ return (double)actualWrite;
206
229
  } else if (encoding == "base64") {
207
230
  std::vector<unsigned char> decoded = base64_decode(string);
208
231
  size_t actualWrite = std::min(toWrite, decoded.size());
209
232
  memcpy(data + start, decoded.data(), actualWrite);
210
- return actualWrite;
233
+ return (double)actualWrite;
234
+ } else if (encoding == "binary" || encoding == "latin1") {
235
+ // Decode UTF-8 string back to raw bytes (0x00-0xFF)
236
+ size_t written = 0;
237
+ size_t i = 0;
238
+ const char *str = string.c_str();
239
+ size_t utf8Len = string.length();
240
+
241
+ while (i < utf8Len && written < toWrite) {
242
+ unsigned char byte = static_cast<unsigned char>(str[i]);
243
+ uint32_t codePoint = 0;
244
+ size_t seqLen = 0;
245
+
246
+ if (byte <= 0x7F) {
247
+ codePoint = byte;
248
+ seqLen = 1;
249
+ } else if ((byte & 0xE0) == 0xC0 && i + 1 < utf8Len) {
250
+ codePoint = ((byte & 0x1F) << 6) |
251
+ (static_cast<unsigned char>(str[i + 1]) & 0x3F);
252
+ seqLen = 2;
253
+ } else if ((byte & 0xF0) == 0xE0 && i + 2 < utf8Len) {
254
+ codePoint = ((byte & 0x0F) << 12) |
255
+ ((static_cast<unsigned char>(str[i + 1]) & 0x3F) << 6) |
256
+ (static_cast<unsigned char>(str[i + 2]) & 0x3F);
257
+ seqLen = 3;
258
+ } else if ((byte & 0xF8) == 0xF0 && i + 3 < utf8Len) {
259
+ codePoint = ((byte & 0x07) << 18) |
260
+ ((static_cast<unsigned char>(str[i + 1]) & 0x3F) << 12) |
261
+ ((static_cast<unsigned char>(str[i + 2]) & 0x3F) << 6) |
262
+ (static_cast<unsigned char>(str[i + 3]) & 0x3F);
263
+ seqLen = 4;
264
+ } else {
265
+ codePoint = byte;
266
+ seqLen = 1;
267
+ }
268
+
269
+ data[start + written++] = static_cast<uint8_t>(codePoint & 0xFF);
270
+ i += seqLen;
271
+ }
272
+ return (double)written;
211
273
  }
212
274
 
213
275
  // Fallback utf8
214
276
  size_t strLen = string.length();
215
277
  size_t actualWrite = std::min(toWrite, strLen);
216
278
  memcpy(data + start, string.c_str(), actualWrite);
217
- return actualWrite;
279
+ return (double)actualWrite;
218
280
  }
219
281
 
220
282
  // UTF-8 replacement character (U+FFFD) encoded as UTF-8
@@ -2,7 +2,7 @@
2
2
  # NitroBuffer+autolinking.cmake
3
3
  # This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  # https://github.com/mrousavy/nitro
5
- # Copyright © 2025 Marc Rousavy @ Margelo
5
+ # Copyright © 2026 Marc Rousavy @ Margelo
6
6
  #
7
7
 
8
8
  # This is a CMake file that adds all files generated by Nitrogen
@@ -2,7 +2,7 @@
2
2
  /// NitroBuffer+autolinking.gradle
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  /// This is a Gradle file that adds all files generated by Nitrogen
@@ -2,7 +2,7 @@
2
2
  /// NitroBufferOnLoad.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #ifndef BUILDING_NITROBUFFER_WITH_GENERATED_CMAKE_PROJECT
@@ -2,7 +2,7 @@
2
2
  /// NitroBufferOnLoad.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include <jni.h>
@@ -2,7 +2,7 @@
2
2
  /// NitroBufferOnLoad.kt
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  package com.margelo.nitro.buffer
@@ -2,7 +2,7 @@
2
2
  # NitroBuffer+autolinking.rb
3
3
  # This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  # https://github.com/mrousavy/nitro
5
- # Copyright © 2025 Marc Rousavy @ Margelo
5
+ # Copyright © 2026 Marc Rousavy @ Margelo
6
6
  #
7
7
 
8
8
  # This is a Ruby script that adds all files generated by Nitrogen
@@ -2,7 +2,7 @@
2
2
  /// NitroBuffer-Swift-Cxx-Bridge.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include "NitroBuffer-Swift-Cxx-Bridge.hpp"
@@ -2,7 +2,7 @@
2
2
  /// NitroBuffer-Swift-Cxx-Bridge.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -2,7 +2,7 @@
2
2
  /// NitroBuffer-Swift-Cxx-Umbrella.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
@@ -2,7 +2,7 @@
2
2
  /// NitroBufferAutolinking.mm
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #import <Foundation/Foundation.h>
@@ -2,7 +2,7 @@
2
2
  /// NitroBufferAutolinking.swift
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  public final class NitroBufferAutolinking {
@@ -2,7 +2,7 @@
2
2
  /// HybridNitroBufferSpec.cpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #include "HybridNitroBufferSpec.hpp"
@@ -2,7 +2,7 @@
2
2
  /// HybridNitroBufferSpec.hpp
3
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
4
  /// https://github.com/mrousavy/nitro
5
- /// Copyright © 2025 Marc Rousavy @ Margelo
5
+ /// Copyright © 2026 Marc Rousavy @ Margelo
6
6
  ///
7
7
 
8
8
  #pragma once
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nitro-buffer",
3
- "version": "0.0.14",
3
+ "version": "0.0.15",
4
4
  "description": "The fastest, 100% Node.js-compatible Buffer implementation for React Native, powered by Nitro Modules and C++.",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",