react-native-nitro-buffer 0.0.1
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.
- package/README.md +129 -0
- package/cpp/HybridNitroBuffer.cpp +497 -0
- package/cpp/HybridNitroBuffer.hpp +44 -0
- package/lib/Buffer.d.ts +79 -0
- package/lib/Buffer.js +642 -0
- package/lib/NitroBuffer.nitro.d.ts +18 -0
- package/lib/NitroBuffer.nitro.js +2 -0
- package/lib/index.d.ts +12 -0
- package/lib/index.js +34 -0
- package/lib/utils.d.ts +7 -0
- package/lib/utils.js +90 -0
- package/nitrogen/generated/.gitattributes +1 -0
- package/nitrogen/generated/android/NitroBuffer+autolinking.cmake +81 -0
- package/nitrogen/generated/android/NitroBuffer+autolinking.gradle +27 -0
- package/nitrogen/generated/android/NitroBufferOnLoad.cpp +44 -0
- package/nitrogen/generated/android/NitroBufferOnLoad.hpp +25 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitro_buffer/NitroBufferOnLoad.kt +35 -0
- package/nitrogen/generated/ios/NitroBuffer+autolinking.rb +60 -0
- package/nitrogen/generated/ios/NitroBuffer-Swift-Cxx-Bridge.cpp +17 -0
- package/nitrogen/generated/ios/NitroBuffer-Swift-Cxx-Bridge.hpp +27 -0
- package/nitrogen/generated/ios/NitroBuffer-Swift-Cxx-Umbrella.hpp +38 -0
- package/nitrogen/generated/ios/NitroBufferAutolinking.mm +35 -0
- package/nitrogen/generated/ios/NitroBufferAutolinking.swift +12 -0
- package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.cpp +32 -0
- package/nitrogen/generated/shared/c++/HybridNitroBufferSpec.hpp +74 -0
- package/package.json +55 -0
- package/react-native-nitro-buffer.podspec +40 -0
- package/src/Buffer.ts +675 -0
- package/src/NitroBuffer.nitro.ts +19 -0
- package/src/index.ts +18 -0
- package/src/utils.ts +76 -0
package/src/index.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export { Buffer } from './Buffer'
|
|
2
|
+
export * from './utils'
|
|
3
|
+
|
|
4
|
+
export const INSPECT_MAX_BYTES = 50
|
|
5
|
+
export const kMaxLength = 2147483647
|
|
6
|
+
export const kStringMaxLength = 536870888
|
|
7
|
+
|
|
8
|
+
export const constants = {
|
|
9
|
+
MAX_LENGTH: kMaxLength,
|
|
10
|
+
MAX_STRING_LENGTH: kStringMaxLength
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export class SlowBuffer extends Uint8Array {
|
|
14
|
+
constructor(size: number) {
|
|
15
|
+
super(size)
|
|
16
|
+
Object.setPrototypeOf(this, require('./Buffer').Buffer.prototype)
|
|
17
|
+
}
|
|
18
|
+
}
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
|
|
2
|
+
import { Buffer } from './Buffer'
|
|
3
|
+
|
|
4
|
+
export function atob(data: string): string {
|
|
5
|
+
return Buffer.from(data, 'base64').toString('binary')
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export function btoa(data: string): string {
|
|
9
|
+
return Buffer.from(data, 'binary').toString('base64')
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function isAscii(input: Buffer | Uint8Array | ArrayBuffer): boolean {
|
|
13
|
+
const arr = input instanceof Uint8Array ? input : new Uint8Array(input as ArrayBuffer)
|
|
14
|
+
for (let i = 0; i < arr.length; i++) {
|
|
15
|
+
if (arr[i] > 127) return false
|
|
16
|
+
}
|
|
17
|
+
return true
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function isUtf8(input: Buffer | Uint8Array | ArrayBuffer): boolean {
|
|
21
|
+
const arr = input instanceof Uint8Array ? input : new Uint8Array(input as ArrayBuffer)
|
|
22
|
+
try {
|
|
23
|
+
// Fast path: TextDecoder if available
|
|
24
|
+
if (typeof TextDecoder !== 'undefined') {
|
|
25
|
+
new TextDecoder('utf-8', { fatal: true }).decode(arr)
|
|
26
|
+
return true
|
|
27
|
+
}
|
|
28
|
+
} catch (e) {
|
|
29
|
+
return false
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// Fallback: JS implementation of UTF-8 validation
|
|
33
|
+
let i = 0
|
|
34
|
+
const len = arr.length
|
|
35
|
+
while (i < len) {
|
|
36
|
+
let descriptor = arr[i]
|
|
37
|
+
if (descriptor <= 127) {
|
|
38
|
+
i++
|
|
39
|
+
continue
|
|
40
|
+
} else if ((descriptor & 0xE0) === 0xC0) {
|
|
41
|
+
// 2 bytes
|
|
42
|
+
if (i + 1 >= len || (arr[i + 1] & 0xC0) !== 0x80) return false
|
|
43
|
+
if ((descriptor & 0xFE) === 0xC0) return false // Overlong
|
|
44
|
+
i += 2
|
|
45
|
+
} else if ((descriptor & 0xF0) === 0xE0) {
|
|
46
|
+
// 3 bytes
|
|
47
|
+
if (i + 2 >= len || (arr[i + 1] & 0xC0) !== 0x80 || (arr[i + 2] & 0xC0) !== 0x80) return false
|
|
48
|
+
if (descriptor === 0xE0 && (arr[i + 1] < 0xA0)) return false // Overlong
|
|
49
|
+
if (descriptor === 0xED && (arr[i + 1] >= 0xA0)) return false // Surrogate
|
|
50
|
+
i += 3
|
|
51
|
+
} else if ((descriptor & 0xF8) === 0xF0) {
|
|
52
|
+
// 4 bytes
|
|
53
|
+
if (i + 3 >= len || (arr[i + 1] & 0xC0) !== 0x80 || (arr[i + 2] & 0xC0) !== 0x80 || (arr[i + 3] & 0xC0) !== 0x80) return false
|
|
54
|
+
if (descriptor === 0xF0 && (arr[i + 1] < 0x90)) return false // Overlong
|
|
55
|
+
if (descriptor === 0xF4 && (arr[i + 1] >= 0x90)) return false // Out of range
|
|
56
|
+
i += 4
|
|
57
|
+
} else {
|
|
58
|
+
return false
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return true
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function transcode(source: Uint8Array, fromEnc: string, toEnc: string): Buffer {
|
|
65
|
+
if (!Buffer.isEncoding(fromEnc) || !Buffer.isEncoding(toEnc)) {
|
|
66
|
+
throw new TypeError('Invalid encoding')
|
|
67
|
+
}
|
|
68
|
+
const buf = source instanceof Buffer ? source : Buffer.from(source)
|
|
69
|
+
const str = buf.toString(fromEnc)
|
|
70
|
+
return Buffer.from(str, toEnc)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export function resolveObjectURL(id: string): string | undefined {
|
|
74
|
+
// Not implemented in RN context usually, stub or return undefined
|
|
75
|
+
return undefined
|
|
76
|
+
}
|