From a1adf0acf680f3b8a5a41daf34192e0f43ab93eb Mon Sep 17 00:00:00 2001 From: "Dr. Sergey Pogodin" Date: Mon, 7 Aug 2023 17:18:27 +0200 Subject: [PATCH 1/2] [#1] v2.21.0-alpha.2: Updates dependencies + Internal improvements --- example/ios/Podfile | 2 +- example/ios/Podfile.lock | 6 +-- ios/{RNException.h => RNFSException.h} | 12 +++--- ios/{RNException.mm => RNFSException.mm} | 24 ++++++------ ios/ReactNativeFs.mm | 42 ++++++++++----------- ios/ReactNativeFs.xcodeproj/project.pbxproj | 8 ++-- package-lock.json | 24 +++++++++--- package.json | 4 +- 8 files changed, 67 insertions(+), 55 deletions(-) rename ios/{RNException.h => RNFSException.h} (52%) rename ios/{RNException.mm => RNFSException.mm} (65%) diff --git a/example/ios/Podfile b/example/ios/Podfile index f70b6560..b04143ca 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -55,7 +55,7 @@ target 'ReactNativeFsExample' do react_native_post_install( installer, config[:reactNativePath], - :mac_catalyst_enabled => false + :mac_catalyst_enabled => ENV['MAC_CATALYST'] == '1' ) __apply_Xcode_12_5_M1_post_install_workaround(installer) end diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index fdbe30ef..2880ba60 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -2,7 +2,7 @@ PODS: - boost (1.76.0) - CocoaAsyncSocket (7.6.5) - DoubleConversion (1.1.6) - - dr-pogodin-react-native-fs (2.21.0-alpha.1): + - dr-pogodin-react-native-fs (2.21.0-alpha.2): - hermes-engine - RCT-Folly (= 2021.07.22.00) - RCTRequired @@ -1259,7 +1259,7 @@ SPEC CHECKSUMS: boost: 57d2868c099736d80fcd648bf211b4431e51a558 CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 - dr-pogodin-react-native-fs: bbb9988de39ebd12dde9c3d05c210002ca3eb57c + dr-pogodin-react-native-fs: 2ea0bcb4cc87ad09f8929476acf38cdea5f5e75a FBLazyVector: 4cce221dd782d3ff7c4172167bba09d58af67ccb Flipper: 6edb735e6c3e332975d1b17956bcc584eccf5818 Flipper-Boost-iOSX: fd1e2b8cbef7e662a122412d7ac5f5bea715403c @@ -1314,6 +1314,6 @@ SPEC CHECKSUMS: Yoga: 8796b55dba14d7004f980b54bcc9833ee45b28ce YogaKit: f782866e155069a2cca2517aafea43200b01fd5a -PODFILE CHECKSUM: 590fe0a5893c85a8f75660561157ee1d2cee82db +PODFILE CHECKSUM: 37e3e3cd5f6e9261215fe1830262c52d2266ce15 COCOAPODS: 1.12.1 diff --git a/ios/RNException.h b/ios/RNFSException.h similarity index 52% rename from ios/RNException.h rename to ios/RNFSException.h index fcbe6339..3a2c564a 100644 --- a/ios/RNException.h +++ b/ios/RNFSException.h @@ -1,16 +1,16 @@ #import -@interface RNException : NSException +@interface RNFSException : NSException - (id) initWithName: (NSString*)name details: (NSString*)details; - (NSError*) error; -- (RNException*) log; +- (RNFSException*) log; - (void) reject:(RCTPromiseRejectBlock)reject; - (void) reject:(RCTPromiseRejectBlock)reject details:(NSString*)details; -+ (RNException*) from: (NSException*)exception; -+ (RNException*) name: (NSString*)name; -+ (RNException*) name: (NSString*)name details: (NSString*)details; ++ (RNFSException*) from: (NSException*)exception; ++ (RNFSException*) name: (NSString*)name; ++ (RNFSException*) name: (NSString*)name details: (NSString*)details; -+ (RNException*) NOT_IMPLEMENTED; ++ (RNFSException*) NOT_IMPLEMENTED; @property(readonly) NSInteger code; @end diff --git a/ios/RNException.mm b/ios/RNFSException.mm similarity index 65% rename from ios/RNException.mm rename to ios/RNFSException.mm index 55a8f9f3..d4a7bab5 100644 --- a/ios/RNException.mm +++ b/ios/RNFSException.mm @@ -1,8 +1,8 @@ -#import "RNException.h" +#import "RNFSException.h" static NSString * const ERROR_DOMAIN = @"RNFS"; -@implementation RNException; +@implementation RNFSException; - (id) initWithName:(NSString*)name details:(NSString*)details { @@ -11,7 +11,7 @@ - (id) initWithName:(NSString*)name details:(NSString*)details } /** - * Creates a new NSError object based on this RNException + * Creates a new NSError object based on this RNFSException */ - (NSError*) error { @@ -22,7 +22,7 @@ - (NSError*) error ]; } -- (RNException*) log +- (RNFSException*) log { NSLog(@"%@: %@", self.name, self.reason); return self; @@ -40,29 +40,29 @@ - (void) reject: (RCTPromiseRejectBlock)reject details: (NSString*) details reject(self.name, reason, [self error]); } -+ (RNException*) from: (NSException*)exception ++ (RNFSException*) from: (NSException*)exception { - return [[RNException alloc] + return [[RNFSException alloc] initWithName: exception.name reason: exception.reason userInfo: exception.userInfo ]; } -+ (RNException*) name: (NSString*)name ++ (RNFSException*) name: (NSString*)name { - return [[RNException alloc] initWithName:name details:nil]; + return [[RNFSException alloc] initWithName:name details:nil]; } -+ (RNException*) name: (NSString*)name details:(NSString*)details ++ (RNFSException*) name: (NSString*)name details:(NSString*)details { - return [[RNException alloc] initWithName:name details:details]; + return [[RNFSException alloc] initWithName:name details:details]; } -+ (RNException*) NOT_IMPLEMENTED ++ (RNFSException*) NOT_IMPLEMENTED { return [ - [RNException alloc] + [RNFSException alloc] initWithName:@"NOT_IMPLEMENTED" details:@"This method is not implemented for iOS" ]; diff --git a/ios/ReactNativeFs.mm b/ios/ReactNativeFs.mm index cb6969bd..74f3a639 100644 --- a/ios/ReactNativeFs.mm +++ b/ios/ReactNativeFs.mm @@ -16,7 +16,7 @@ #import #import -#import "RNException.h" +#import "RNFSException.h" typedef void (^CompletionHandler)(void); @@ -591,7 +591,7 @@ @implementation ReactNativeFs resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { - [[RNException NOT_IMPLEMENTED] reject:reject]; + [[RNFSException NOT_IMPLEMENTED] reject:reject]; /* RNFSUploadParams* params = [RNFSUploadParams alloc]; @@ -898,7 +898,7 @@ @implementation ReactNativeFs resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject) { - [[RNException NOT_IMPLEMENTED] reject:reject]; + [[RNFSException NOT_IMPLEMENTED] reject:reject]; /* NSFileManager *manager = [NSFileManager defaultManager]; BOOL exists = [manager fileExistsAtPath:filepath isDirectory:NULL]; @@ -969,7 +969,7 @@ - (NSDictionary *) getConstants { } - (void)appendFile:(NSString *)path b64:(NSString *)b64 resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"appendFile()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"appendFile()"]; } @@ -979,86 +979,86 @@ - (void)completeHandlerIOS:(double)jobId { - (void)copyAssetsFileIOS:(NSString *)imageUri destPath:(NSString *)destPath width:(double)width height:(double)height scale:(double)scale compression:(double)compression resizeMode:(NSString *)resizeMode resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"copyAssetsFileIOS()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"copyAssetsFileIOS()"]; } - (void)copyAssetsVideoIOS:(NSString *)imageUri destPath:(NSString *)destPath resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"copyAssetsVideoIOS()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"copyAssetsVideoIOS()"]; } - (void)copyFile:(NSString *)from to:(NSString *)to options:(JS::NativeReactNativeFs::FileOptions &)options resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"copyFile()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"copyFile()"]; } - (void)copyFileAssets:(NSString *)from to:(NSString *)to resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"copyFileAssets()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"copyFileAssets()"]; } - (void)copyFileRes:(NSString *)from to:(NSString *)to resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"copyFileRes()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"copyFileRes()"]; } - (void)copyFolder:(NSString *)from to:(NSString *)to resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"copyFolder()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"copyFolder()"]; } - (void)existsAssets:(NSString *)path resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"existsAssets()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"existsAssets()"]; } - (void)existsRes:(NSString *)path resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"existsRes()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"existsRes()"]; } - (void)getAllExternalFilesDirs:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"getAllExternalFilesDirs()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"getAllExternalFilesDirs()"]; } - (void)moveFile:(NSString *)from to:(NSString *)to options:(JS::NativeReactNativeFs::FileOptions &)options resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"moveFile()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"moveFile()"]; } - (void)readFileAssets:(NSString *)path resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"readFileAssets()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"readFileAssets()"]; } - (void)readFileRes:(NSString *)path resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"readFileRes()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"readFileRes()"]; } - (void)scanFile:(NSString *)path resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"scanFile()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"scanFile()"]; } - (void)scanFile:(NSString *)filepath readable:(BOOL)readable ownerOnly:(BOOL)ownerOnly resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"scanFile()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"scanFile()"]; } - (void)write:(NSString *)path b64:(NSString *)b64 position:(double)position resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"write()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"write()"]; } - (void)readDirAssets:(NSString *)path resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"readDirAssets()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"readDirAssets()"]; } - (void)setReadable:(NSString *)filepath readable:(BOOL)readable ownerOnly:(BOOL)ownerOnly resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject { - [[RNException NOT_IMPLEMENTED] reject:reject details:@"setReadable()"]; + [[RNFSException NOT_IMPLEMENTED] reject:reject details:@"setReadable()"]; } +(void)setCompletionHandlerForIdentifier: (NSString *)identifier completionHandler: (CompletionHandler)completionHandler diff --git a/ios/ReactNativeFs.xcodeproj/project.pbxproj b/ios/ReactNativeFs.xcodeproj/project.pbxproj index 91135ca2..c4b8ae2b 100644 --- a/ios/ReactNativeFs.xcodeproj/project.pbxproj +++ b/ios/ReactNativeFs.xcodeproj/project.pbxproj @@ -20,8 +20,8 @@ /* Begin PBXFileReference section */ 134814201AA4EA6300B7C361 /* libReactNativeFs.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libReactNativeFs.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 6321E9672A7D4C3500762564 /* RNException.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = RNException.mm; sourceTree = ""; }; - 6321E9682A7D4C3500762564 /* RNException.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNException.h; sourceTree = ""; }; + 6321E9672A7D4C3500762564 /* RNFSException.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = RNFSException.mm; sourceTree = ""; }; + 6321E9682A7D4C3500762564 /* RNFSException.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RNFSException.h; sourceTree = ""; }; 633BCE662A7D375E00263BFD /* Downloader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Downloader.h; sourceTree = ""; }; 633BCE672A7D375E00263BFD /* NSArray+Map.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NSArray+Map.h"; sourceTree = ""; }; 633BCE6A2A7D376400263BFD /* Uploader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Uploader.h; sourceTree = ""; }; @@ -54,8 +54,8 @@ 58B511D21A9E6C8500147676 = { isa = PBXGroup; children = ( - 6321E9682A7D4C3500762564 /* RNException.h */, - 6321E9672A7D4C3500762564 /* RNException.mm */, + 6321E9682A7D4C3500762564 /* RNFSException.h */, + 6321E9672A7D4C3500762564 /* RNFSException.mm */, 633BCE6D2A7D380900263BFD /* Downloader.mm */, 633BCE6C2A7D380900263BFD /* NSArray+Map.mm */, 633BCE6E2A7D380900263BFD /* Uploader.mm */, diff --git a/package-lock.json b/package-lock.json index 7beaeaed..24fca9ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@dr.pogodin/react-native-fs", - "version": "2.21.0-alpha.1", + "version": "2.21.0-alpha.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@dr.pogodin/react-native-fs", - "version": "2.21.0-alpha.1", + "version": "2.21.0-alpha.2", "license": "MIT", "dependencies": { "buffer": "^6.0.3" @@ -17,7 +17,7 @@ "@types/react": "^18.2.15", "del-cli": "^5.0.0", "eslint": "^8.45.0", - "eslint-config-prettier": "^8.10.0", + "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.6.1", "metro-config": "^0.76.7", @@ -5303,6 +5303,18 @@ "prettier": ">=2" } }, + "node_modules/@react-native/eslint-config/node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, "node_modules/@react-native/eslint-config/node_modules/eslint-plugin-prettier": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", @@ -8089,9 +8101,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", - "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", + "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" diff --git a/package.json b/package.json index 1ff16d88..42c2cd6e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dr.pogodin/react-native-fs", - "version": "2.21.0-alpha.1", + "version": "2.21.0-alpha.2", "description": "Native filesystem access for react-native", "main": "lib/commonjs/index", "module": "lib/module/index", @@ -43,7 +43,7 @@ "@types/react": "^18.2.15", "del-cli": "^5.0.0", "eslint": "^8.45.0", - "eslint-config-prettier": "^8.10.0", + "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.0", "jest": "^29.6.1", "metro-config": "^0.76.7", From 128c892901ebfaf1e06d91adb8f80c6b738fce24 Mon Sep 17 00:00:00 2001 From: "Dr. Sergey Pogodin" Date: Mon, 7 Aug 2023 22:52:49 +0200 Subject: [PATCH 2/2] [#2] [iOS] Fixes Old Arch support --- ios/ReactNativeFs.h | 109 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 108 insertions(+), 1 deletion(-) diff --git a/ios/ReactNativeFs.h b/ios/ReactNativeFs.h index 6b6e184f..9835f7c5 100644 --- a/ios/ReactNativeFs.h +++ b/ios/ReactNativeFs.h @@ -5,7 +5,114 @@ @interface ReactNativeFs : RCTEventEmitter #else -#import +#import +#import +#import + +// These are automatically generated by RN Codegen when using the New Arch, +// however for the backward compatibility to the Old Arch we need to provide +// these ourselves. +namespace JS { + namespace NativeReactNativeFs { + struct FileOptions { + NSString *NSFileProtectionKey() const { + return _v[@"NSFileProtectionKey"]; + }; + FileOptions(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + + struct MkdirOptions { + std::optional NSURLIsExcludedFromBackupKey() const { + return _v[@"NSURLIsExcludedFromBackupKey"]; + } + NSString *NSFileProtectionKey() const { + return _v[@"NSFileProtectionKey"]; + } + + MkdirOptions(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + + struct NativeDownloadFileOptions { + double jobId() const { return [_v[@"jobId"] doubleValue]; } + NSString *fromUrl() const { return _v[@"fromUrl"]; } + NSString *toFile() const { return _v[@"toFile"]; } + bool background() const { return _v[@"background"]; } + double backgroundTimeout() const { return [_v[@"backgroundTimeout"] doubleValue]; } + bool cacheable() const { return _v[@"cacheable"]; } + double connectionTimeout() const { return [_v[@"connectionTimeout"] doubleValue]; } + bool discretionary() const { return _v[@"discretionary"]; } + id headers() const { return _v[@"headers"]; } + double progressDivider() const { return [_v[@"progressDivider"] doubleValue]; } + double progressInterval() const { return [_v[@"progressInterval"] doubleValue]; } + double readTimeout() const { return [_v[@"readTimeout"] doubleValue]; } + bool hasBeginCallback() const { return _v[@"hasBeginCallback"]; } + bool hasProgressCallback() const { return _v[@"hasProgressCallback"]; } + bool hasResumableCallback() const { return _v[@"hasResumableCallback"]; } + + NativeDownloadFileOptions(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + + typedef NSDictionary NativeUploadFileOptions; + typedef NSDictionary TouchOptions; + + /* + struct UploadFileItem { + NSString *name() const; + NSString *filename() const; + NSString *filepath() const; + NSString *filetype() const; + + UploadFileItem(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + + template + using LazyVector = FB::LazyVector; + + struct NativeUploadFileOptions { + NSString *toUrl() const; + std::optional binaryStreamOnly() const; + LazyVector files() const; + id _Nullable headers() const; + id _Nullable fields() const; + NSString *method() const; + + NativeUploadFileOptions(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + + struct TouchOptions { + std::optional ctime() const; + std::optional mtime() const; + + TouchOptions(NSDictionary *const v) : _v(v) {} + private: + NSDictionary *_v; + }; + */ + } +} + +@implementation RCTCxxConvert (NativeReactNativeFs_FileOptions) ++ (RCTManagedPointer *)JS_NativeReactNativeFs_FileOptions:(id)json +{ + return facebook::react::managedPointer(json); +} +@end +@implementation RCTCxxConvert (NativeReactNativeFs_MkdirOptions) ++ (RCTManagedPointer *)JS_NativeReactNativeFs_MkdirOptions:(id)json +{ + return facebook::react::managedPointer(json); +} +@end @interface ReactNativeFs : RCTEventEmitter #endif