Skip to content

Commit 3df2075

Browse files
authored
fix: Fix set(ArrayBuffer) on Web (#1026)
* fix: Fix `set(ArrayBuffer)` on Web * chore: Typse
1 parent 67a3cff commit 3df2075

3 files changed

Lines changed: 23 additions & 2 deletions

File tree

packages/react-native-mmkv/src/createMMKV/createMMKV.web.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { MMKV } from '../specs/MMKV.nitro'
22
import type { Configuration } from '../specs/MMKVFactory.nitro'
3+
import { createTextDecoder } from '../web/createTextDecoder'
34
import { createTextEncoder } from '../web/createTextEncoder'
45
import {
56
getLocalStorage,
@@ -16,6 +17,7 @@ export function createMMKV(
1617
throw new Error("MMKV: 'path' is not supported on Web!")
1718
}
1819

20+
const textDecoder = createTextDecoder()
1921
const textEncoder = createTextEncoder()
2022
const listeners = new Set<(key: string) => void>()
2123

@@ -71,7 +73,11 @@ export function createMMKV(
7173
set: (key, value) => {
7274
const storage = getLocalStorage()
7375
if (key === '') throw new Error('Cannot set a value for an empty key!')
74-
storage.setItem(prefixedKey(key), value.toString())
76+
if (value instanceof ArrayBuffer) {
77+
storage.setItem(prefixedKey(key), textDecoder.decode(value))
78+
} else {
79+
storage.setItem(prefixedKey(key), String(value))
80+
}
7581
callListeners(key)
7682
},
7783
getString: (key) => {
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export function createTextDecoder(): TextDecoder {
2+
const g = global ?? globalThis ?? window
3+
if (g.TextDecoder != null) {
4+
return new g.TextDecoder()
5+
} else {
6+
return {
7+
decode: () => {
8+
throw new Error('TextDecoder is not supported in this environment!')
9+
},
10+
encoding: 'utf-8',
11+
fatal: false,
12+
ignoreBOM: false,
13+
}
14+
}
15+
}

packages/react-native-mmkv/src/web/createTextEncoder.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export function createTextEncoder() {
1+
export function createTextEncoder(): TextEncoder {
22
const g = global ?? globalThis ?? window
33
if (g.TextEncoder != null) {
44
return new g.TextEncoder()

0 commit comments

Comments
 (0)