1712e5c6cSSzymon20000// Copyright 2015-present 650 Industries. All rights reserved. 2631604b1STomasz Sapeta 3*51e273e0STomasz Sapeta#if __has_include(<ExpoFileSystem/EXFileSystem.h>) 442e5df8fSKudo Chien#import <ExpoModulesCore/EXDefines.h> 542e5df8fSKudo Chien#import <ExpoModulesCore/EXInternalModule.h> 6712e5c6cSSzymon20000#import "EXScopedFileSystemModule.h" 7e61ddc0cSStanisław Chmiela#import "EXUtil.h" 8c9802ebaSStanisław Chmiela 9c9802ebaSStanisław Chmiela// TODO @sjchmiela: Should this be versioned? It is only used in detached scenario. 10c9802ebaSStanisław ChmielaNSString * const EXShellManifestResourceName = @"shell-app-manifest"; 11712e5c6cSSzymon20000 12712e5c6cSSzymon20000@implementation EXScopedFileSystemModule 13712e5c6cSSzymon20000 14c9802ebaSStanisław Chmiela- (NSDictionary *)constantsToExport 15712e5c6cSSzymon20000{ 16c9802ebaSStanisław Chmiela NSMutableDictionary *constants = [[NSMutableDictionary alloc] initWithDictionary:[super constantsToExport]]; 17c9802ebaSStanisław Chmiela constants[@"bundledAssets"] = [self bundledAssets] ?: [NSNull null]; 18c9802ebaSStanisław Chmiela return constants; 19712e5c6cSSzymon20000} 20712e5c6cSSzymon20000 21c9802ebaSStanisław Chmiela- (NSArray<NSString *> *)bundledAssets 22712e5c6cSSzymon20000{ 23c9802ebaSStanisław Chmiela static NSArray<NSString *> *bundledAssets = nil; 24c9802ebaSStanisław Chmiela static dispatch_once_t once; 25c9802ebaSStanisław Chmiela dispatch_once(&once, ^{ 26c9802ebaSStanisław Chmiela NSString *manifestBundlePath = [[NSBundle mainBundle] pathForResource:EXShellManifestResourceName ofType:@"json"]; 27c9802ebaSStanisław Chmiela NSData *data = [NSData dataWithContentsOfFile:manifestBundlePath]; 28c9802ebaSStanisław Chmiela if (data.length == 0) { 29c9802ebaSStanisław Chmiela return; 30c9802ebaSStanisław Chmiela } 31c9802ebaSStanisław Chmiela __block NSError *error; 32c9802ebaSStanisław Chmiela id manifest = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; 33c9802ebaSStanisław Chmiela if (error) { 34efd75decSTomasz Sapeta EXLogError(@"Error parsing bundled manifest: %@", error); 35c9802ebaSStanisław Chmiela return; 36c9802ebaSStanisław Chmiela } 37c9802ebaSStanisław Chmiela bundledAssets = manifest[@"bundledAssets"]; 38c9802ebaSStanisław Chmiela }); 39c9802ebaSStanisław Chmiela return bundledAssets; 40712e5c6cSSzymon20000} 41712e5c6cSSzymon20000 42712e5c6cSSzymon20000@end 43631604b1STomasz Sapeta#endif 44