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