diff --git a/.changeset/review-errors.md b/.changeset/review-errors.md new file mode 100644 index 00000000..7e4302fa --- /dev/null +++ b/.changeset/review-errors.md @@ -0,0 +1,6 @@ +--- +"@react-native-async-storage/async-storage": patch +--- + +Return existing AsyncStorageError instances, handle null rejection values safely, and classify LegacyStorageException as OtherStorageError. + diff --git a/packages/async-storage/src/AsyncStorageError.ts b/packages/async-storage/src/AsyncStorageError.ts index 7b1bd987..ef070420 100644 --- a/packages/async-storage/src/AsyncStorageError.ts +++ b/packages/async-storage/src/AsyncStorageError.ts @@ -40,7 +40,7 @@ export class AsyncStorageError extends Error { static nativeError(e: unknown): AsyncStorageError { // do not override own error if (e instanceof AsyncStorageError) { - throw e; + return e; } const error = getNativeError(e); @@ -58,6 +58,7 @@ export class AsyncStorageError extends Error { errorType = AsyncStorageErrorType.SqliteStorageError; break; case "OtherException": + case "LegacyStorageException": errorType = AsyncStorageErrorType.OtherStorageError; break; } @@ -77,7 +78,7 @@ export class AsyncStorageError extends Error { // Native module reject promises with special code function isNativeError(e: unknown): e is PotentialNativeError { - if (typeof e !== "object") { + if (e === null || typeof e !== "object") { return false; }