mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Add NativeModule Spec for AsyncStorage
Summary: Two NativeModules (SQLiteDBStorage on Android and AsyncLocalStorage on iOS) implement the AsyncStorage interface. So, I created one spec file for both. Reviewed By: fkgozali Differential Revision: D15804415 fbshipit-source-id: 0c922352378fbdb460839527db3c21387ab16b87
This commit is contained in:
committed by
Facebook Github Bot
parent
929a7cbfbd
commit
3e989b6519
@@ -434,6 +434,97 @@ namespace facebook {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
@implementation RCTCxxConvert (NativeAsyncStorage_SpecMultiGetCallbackErrorsElement)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecMultiGetCallbackErrorsElement:(id)json
|
||||
{
|
||||
return facebook::react::managedPointer<JS::NativeAsyncStorage::SpecMultiGetCallbackErrorsElement>(json);
|
||||
}
|
||||
@end
|
||||
@implementation RCTCxxConvert (NativeAsyncStorage_SpecMultiSetCallbackErrorsElement)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecMultiSetCallbackErrorsElement:(id)json
|
||||
{
|
||||
return facebook::react::managedPointer<JS::NativeAsyncStorage::SpecMultiSetCallbackErrorsElement>(json);
|
||||
}
|
||||
@end
|
||||
@implementation RCTCxxConvert (NativeAsyncStorage_SpecMultiMergeCallbackErrorsElement)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecMultiMergeCallbackErrorsElement:(id)json
|
||||
{
|
||||
return facebook::react::managedPointer<JS::NativeAsyncStorage::SpecMultiMergeCallbackErrorsElement>(json);
|
||||
}
|
||||
@end
|
||||
@implementation RCTCxxConvert (NativeAsyncStorage_SpecMultiRemoveCallbackErrorsElement)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecMultiRemoveCallbackErrorsElement:(id)json
|
||||
{
|
||||
return facebook::react::managedPointer<JS::NativeAsyncStorage::SpecMultiRemoveCallbackErrorsElement>(json);
|
||||
}
|
||||
@end
|
||||
@implementation RCTCxxConvert (NativeAsyncStorage_SpecClearCallbackError)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecClearCallbackError:(id)json
|
||||
{
|
||||
return facebook::react::managedPointer<JS::NativeAsyncStorage::SpecClearCallbackError>(json);
|
||||
}
|
||||
@end
|
||||
@implementation RCTCxxConvert (NativeAsyncStorage_SpecGetAllKeysCallbackError)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecGetAllKeysCallbackError:(id)json
|
||||
{
|
||||
return facebook::react::managedPointer<JS::NativeAsyncStorage::SpecGetAllKeysCallbackError>(json);
|
||||
}
|
||||
@end
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeAsyncStorageSpecJSI_multiGet(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "multiGet", @selector(multiGet:callback:), args, count);
|
||||
}
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeAsyncStorageSpecJSI_multiSet(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "multiSet", @selector(multiSet:callback:), args, count);
|
||||
}
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeAsyncStorageSpecJSI_multiMerge(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "multiMerge", @selector(multiMerge:callback:), args, count);
|
||||
}
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeAsyncStorageSpecJSI_multiRemove(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "multiRemove", @selector(multiRemove:callback:), args, count);
|
||||
}
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeAsyncStorageSpecJSI_clear(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "clear", @selector(clear:), args, count);
|
||||
}
|
||||
|
||||
static facebook::jsi::Value __hostFunction_NativeAsyncStorageSpecJSI_getAllKeys(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
|
||||
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "getAllKeys", @selector(getAllKeys:), args, count);
|
||||
}
|
||||
|
||||
|
||||
NativeAsyncStorageSpecJSI::NativeAsyncStorageSpecJSI(id<RCTTurboModule> instance, std::shared_ptr<JSCallInvoker> jsInvoker)
|
||||
: ObjCTurboModule("AsyncStorage", instance, jsInvoker) {
|
||||
|
||||
methodMap_["multiGet"] = MethodMetadata {2, __hostFunction_NativeAsyncStorageSpecJSI_multiGet};
|
||||
|
||||
|
||||
methodMap_["multiSet"] = MethodMetadata {2, __hostFunction_NativeAsyncStorageSpecJSI_multiSet};
|
||||
|
||||
|
||||
methodMap_["multiMerge"] = MethodMetadata {2, __hostFunction_NativeAsyncStorageSpecJSI_multiMerge};
|
||||
|
||||
|
||||
methodMap_["multiRemove"] = MethodMetadata {2, __hostFunction_NativeAsyncStorageSpecJSI_multiRemove};
|
||||
|
||||
|
||||
methodMap_["clear"] = MethodMetadata {1, __hostFunction_NativeAsyncStorageSpecJSI_clear};
|
||||
|
||||
|
||||
methodMap_["getAllKeys"] = MethodMetadata {1, __hostFunction_NativeAsyncStorageSpecJSI_getAllKeys};
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
} // namespace react
|
||||
|
||||
@@ -405,6 +405,129 @@ namespace facebook {
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
|
||||
namespace JS {
|
||||
namespace NativeAsyncStorage {
|
||||
struct SpecMultiGetCallbackErrorsElement {
|
||||
NSString *message() const;
|
||||
|
||||
SpecMultiGetCallbackErrorsElement(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
NSDictionary *_v;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@interface RCTCxxConvert (NativeAsyncStorage_SpecMultiGetCallbackErrorsElement)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecMultiGetCallbackErrorsElement:(id)json;
|
||||
@end
|
||||
|
||||
namespace JS {
|
||||
namespace NativeAsyncStorage {
|
||||
struct SpecMultiSetCallbackErrorsElement {
|
||||
NSString *message() const;
|
||||
|
||||
SpecMultiSetCallbackErrorsElement(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
NSDictionary *_v;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@interface RCTCxxConvert (NativeAsyncStorage_SpecMultiSetCallbackErrorsElement)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecMultiSetCallbackErrorsElement:(id)json;
|
||||
@end
|
||||
|
||||
namespace JS {
|
||||
namespace NativeAsyncStorage {
|
||||
struct SpecMultiMergeCallbackErrorsElement {
|
||||
NSString *message() const;
|
||||
|
||||
SpecMultiMergeCallbackErrorsElement(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
NSDictionary *_v;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@interface RCTCxxConvert (NativeAsyncStorage_SpecMultiMergeCallbackErrorsElement)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecMultiMergeCallbackErrorsElement:(id)json;
|
||||
@end
|
||||
|
||||
namespace JS {
|
||||
namespace NativeAsyncStorage {
|
||||
struct SpecMultiRemoveCallbackErrorsElement {
|
||||
NSString *message() const;
|
||||
|
||||
SpecMultiRemoveCallbackErrorsElement(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
NSDictionary *_v;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@interface RCTCxxConvert (NativeAsyncStorage_SpecMultiRemoveCallbackErrorsElement)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecMultiRemoveCallbackErrorsElement:(id)json;
|
||||
@end
|
||||
|
||||
namespace JS {
|
||||
namespace NativeAsyncStorage {
|
||||
struct SpecClearCallbackError {
|
||||
NSString *message() const;
|
||||
|
||||
SpecClearCallbackError(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
NSDictionary *_v;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@interface RCTCxxConvert (NativeAsyncStorage_SpecClearCallbackError)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecClearCallbackError:(id)json;
|
||||
@end
|
||||
|
||||
namespace JS {
|
||||
namespace NativeAsyncStorage {
|
||||
struct SpecGetAllKeysCallbackError {
|
||||
NSString *message() const;
|
||||
|
||||
SpecGetAllKeysCallbackError(NSDictionary *const v) : _v(v) {}
|
||||
private:
|
||||
NSDictionary *_v;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@interface RCTCxxConvert (NativeAsyncStorage_SpecGetAllKeysCallbackError)
|
||||
+ (RCTManagedPointer *)JS_NativeAsyncStorage_SpecGetAllKeysCallbackError:(id)json;
|
||||
@end
|
||||
@protocol NativeAsyncStorageSpec <RCTBridgeModule, RCTTurboModule>
|
||||
|
||||
- (void)multiGet:(NSArray *)keys
|
||||
callback:(RCTResponseSenderBlock)callback;
|
||||
- (void)multiSet:(NSArray *)kvPairs
|
||||
callback:(RCTResponseSenderBlock)callback;
|
||||
- (void)multiMerge:(NSArray *)kvPairs
|
||||
callback:(RCTResponseSenderBlock)callback;
|
||||
- (void)multiRemove:(NSArray *)keys
|
||||
callback:(RCTResponseSenderBlock)callback;
|
||||
- (void)clear:(RCTResponseSenderBlock)callback;
|
||||
- (void)getAllKeys:(RCTResponseSenderBlock)callback;
|
||||
|
||||
@end
|
||||
namespace facebook {
|
||||
namespace react {
|
||||
/**
|
||||
* ObjC++ class for module 'AsyncStorage'
|
||||
*/
|
||||
|
||||
class JSI_EXPORT NativeAsyncStorageSpecJSI : public ObjCTurboModule {
|
||||
public:
|
||||
NativeAsyncStorageSpecJSI(id<RCTTurboModule> instance, std::shared_ptr<JSCallInvoker> jsInvoker);
|
||||
|
||||
};
|
||||
} // namespace react
|
||||
} // namespace facebook
|
||||
|
||||
namespace JS {
|
||||
namespace NativeBlobModule {
|
||||
struct Constants {
|
||||
@@ -2044,6 +2167,36 @@ inline JS::NativeAppState::Constants::Builder::Builder(const Input i) : _factory
|
||||
inline JS::NativeAppState::Constants::Builder::Builder(Constants i) : _factory(^{
|
||||
return i.unsafeRawValue();
|
||||
}) {}
|
||||
inline NSString *JS::NativeAsyncStorage::SpecMultiGetCallbackErrorsElement::message() const
|
||||
{
|
||||
id const p = _v[@"message"];
|
||||
return RCTBridgingToString(p);
|
||||
}
|
||||
inline NSString *JS::NativeAsyncStorage::SpecMultiSetCallbackErrorsElement::message() const
|
||||
{
|
||||
id const p = _v[@"message"];
|
||||
return RCTBridgingToString(p);
|
||||
}
|
||||
inline NSString *JS::NativeAsyncStorage::SpecMultiMergeCallbackErrorsElement::message() const
|
||||
{
|
||||
id const p = _v[@"message"];
|
||||
return RCTBridgingToString(p);
|
||||
}
|
||||
inline NSString *JS::NativeAsyncStorage::SpecMultiRemoveCallbackErrorsElement::message() const
|
||||
{
|
||||
id const p = _v[@"message"];
|
||||
return RCTBridgingToString(p);
|
||||
}
|
||||
inline NSString *JS::NativeAsyncStorage::SpecClearCallbackError::message() const
|
||||
{
|
||||
id const p = _v[@"message"];
|
||||
return RCTBridgingToString(p);
|
||||
}
|
||||
inline NSString *JS::NativeAsyncStorage::SpecGetAllKeysCallbackError::message() const
|
||||
{
|
||||
id const p = _v[@"message"];
|
||||
return RCTBridgingToString(p);
|
||||
}
|
||||
inline JS::NativeBlobModule::Constants::Builder::Builder(const Input i) : _factory(^{
|
||||
NSMutableDictionary *d = [NSMutableDictionary new];
|
||||
auto BLOB_URI_SCHEME = i.BLOB_URI_SCHEME.get();
|
||||
|
||||
@@ -12,11 +12,11 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
const NativeModules = require('../BatchedBridge/NativeModules');
|
||||
import NativeAsyncStorage from './NativeAsyncStorage';
|
||||
import invariant from 'invariant';
|
||||
|
||||
// Use SQLite if available, otherwise file storage.
|
||||
const RCTAsyncStorage =
|
||||
NativeModules.AsyncSQLiteDBStorage || NativeModules.AsyncLocalStorage;
|
||||
const RCTAsyncStorage = NativeAsyncStorage;
|
||||
|
||||
/**
|
||||
* `AsyncStorage` is a simple, unencrypted, asynchronous, persistent, key-value
|
||||
@@ -39,6 +39,7 @@ const AsyncStorage = {
|
||||
key: string,
|
||||
callback?: ?(error: ?Error, result: ?string) => void,
|
||||
): Promise {
|
||||
invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');
|
||||
return new Promise((resolve, reject) => {
|
||||
RCTAsyncStorage.multiGet([key], function(errors, result) {
|
||||
// Unpack result to get value from [[key,value]]
|
||||
@@ -64,6 +65,7 @@ const AsyncStorage = {
|
||||
value: string,
|
||||
callback?: ?(error: ?Error) => void,
|
||||
): Promise {
|
||||
invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');
|
||||
return new Promise((resolve, reject) => {
|
||||
RCTAsyncStorage.multiSet([[key, value]], function(errors) {
|
||||
const errs = convertErrors(errors);
|
||||
@@ -86,6 +88,7 @@ const AsyncStorage = {
|
||||
key: string,
|
||||
callback?: ?(error: ?Error) => void,
|
||||
): Promise {
|
||||
invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');
|
||||
return new Promise((resolve, reject) => {
|
||||
RCTAsyncStorage.multiRemove([key], function(errors) {
|
||||
const errs = convertErrors(errors);
|
||||
@@ -112,6 +115,7 @@ const AsyncStorage = {
|
||||
value: string,
|
||||
callback?: ?(error: ?Error) => void,
|
||||
): Promise {
|
||||
invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');
|
||||
return new Promise((resolve, reject) => {
|
||||
RCTAsyncStorage.multiMerge([[key, value]], function(errors) {
|
||||
const errs = convertErrors(errors);
|
||||
@@ -133,6 +137,7 @@ const AsyncStorage = {
|
||||
* See http://facebook.github.io/react-native/docs/asyncstorage.html#clear
|
||||
*/
|
||||
clear: function(callback?: ?(error: ?Error) => void): Promise {
|
||||
invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');
|
||||
return new Promise((resolve, reject) => {
|
||||
RCTAsyncStorage.clear(function(error) {
|
||||
callback && callback(convertError(error));
|
||||
@@ -153,6 +158,7 @@ const AsyncStorage = {
|
||||
getAllKeys: function(
|
||||
callback?: ?(error: ?Error, keys: ?Array<string>) => void,
|
||||
): Promise {
|
||||
invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');
|
||||
return new Promise((resolve, reject) => {
|
||||
RCTAsyncStorage.getAllKeys(function(error, keys) {
|
||||
callback && callback(convertError(error), keys);
|
||||
@@ -187,6 +193,7 @@ const AsyncStorage = {
|
||||
this._getRequests = [];
|
||||
this._getKeys = [];
|
||||
|
||||
invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');
|
||||
RCTAsyncStorage.multiGet(getKeys, function(errors, result) {
|
||||
// Even though the runtime complexity of this is theoretically worse vs if we used a map,
|
||||
// it's much, much faster in practice for the data sets we deal with (we avoid
|
||||
@@ -264,6 +271,7 @@ const AsyncStorage = {
|
||||
keyValuePairs: Array<Array<string>>,
|
||||
callback?: ?(errors: ?Array<Error>) => void,
|
||||
): Promise {
|
||||
invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');
|
||||
return new Promise((resolve, reject) => {
|
||||
RCTAsyncStorage.multiSet(keyValuePairs, function(errors) {
|
||||
const error = convertErrors(errors);
|
||||
@@ -286,6 +294,7 @@ const AsyncStorage = {
|
||||
keys: Array<string>,
|
||||
callback?: ?(errors: ?Array<Error>) => void,
|
||||
): Promise {
|
||||
invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');
|
||||
return new Promise((resolve, reject) => {
|
||||
RCTAsyncStorage.multiRemove(keys, function(errors) {
|
||||
const error = convertErrors(errors);
|
||||
@@ -311,6 +320,7 @@ const AsyncStorage = {
|
||||
keyValuePairs: Array<Array<string>>,
|
||||
callback?: ?(errors: ?Array<Error>) => void,
|
||||
): Promise {
|
||||
invariant(RCTAsyncStorage, 'RCTAsyncStorage not available');
|
||||
return new Promise((resolve, reject) => {
|
||||
RCTAsyncStorage.multiMerge(keyValuePairs, function(errors) {
|
||||
const error = convertErrors(errors);
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @flow
|
||||
* @format
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import type {TurboModule} from '../TurboModule/RCTExport';
|
||||
import * as TurboModuleRegistry from '../TurboModule/TurboModuleRegistry';
|
||||
|
||||
export interface Spec extends TurboModule {
|
||||
+getConstants: () => {||};
|
||||
+multiGet: (
|
||||
keys: Array<string>,
|
||||
callback: (
|
||||
errors: ?Array<{|message: string|}>,
|
||||
kvPairs: ?Array<Array<string>>,
|
||||
) => void,
|
||||
) => void;
|
||||
+multiSet: (
|
||||
kvPairs: Array<Array<string>>,
|
||||
callback: (errors: ?Array<{|message: string|}>) => void,
|
||||
) => void;
|
||||
+multiMerge: (
|
||||
kvPairs: Array<Array<string>>,
|
||||
callback: (errors: ?Array<{|message: string|}>) => void,
|
||||
) => void;
|
||||
+multiRemove: (
|
||||
keys: Array<string>,
|
||||
callback: (errors: ?Array<{|message: string|}>) => void,
|
||||
) => void;
|
||||
+clear: (callback: (error: {|message: string|}) => void) => void;
|
||||
+getAllKeys: (
|
||||
callback: (error: ?{|message: string|}, allKeys: ?Array<string>) => void,
|
||||
) => void;
|
||||
}
|
||||
|
||||
export default TurboModuleRegistry.get<Spec>('AsyncSQLiteDBStorage') ||
|
||||
TurboModuleRegistry.get<Spec>('AsyncLocalStorage');
|
||||
Reference in New Issue
Block a user