@@ -492,7 +492,8 @@ def main(): # noqa: C901, PLR0912, PLR0915
492
492
return 1
493
493
494
494
if options .from_emcc and options .export_es6 :
495
- diagnostics .error ('Can\' t use --export-es6 option together with --from-emcc since the code should be embedded within emcc\' s code' )
495
+ diagnostics .error ('Can\' t use --export-es6 option together with --from-emcc since the code should be embedded '
496
+ 'within emcc\' s code' )
496
497
return 1
497
498
498
499
walked .append (__file__ )
@@ -643,7 +644,7 @@ def generate_js(data_target, data_files, metadata):
643
644
644
645
if not options .export_es6 :
645
646
ret += '''
646
- (async () => {'''
647
+ (() => {'''
647
648
648
649
ret += '''
649
650
// Do not attempt to redownload the virtual filesystem data when in a pthread or a Wasm Worker context.
@@ -661,6 +662,8 @@ def generate_js(data_target, data_files, metadata):
661
662
var require = createRequire(import.meta.url);
662
663
}\n '''
663
664
665
+ if options .export_es6 :
666
+ ret += 'return new Promise((loadDataResolve, loadDataReject) => {\n '
664
667
ret += ' async function loadPackage(metadata) {\n '
665
668
666
669
code = '''
@@ -713,6 +716,8 @@ def generate_js(data_target, data_files, metadata):
713
716
create_data = '''// canOwn this data in the filesystem, it is a slice into the heap that will never change
714
717
Module['FS_createDataFile'](this.name, null, byteArray, true, true, true);
715
718
Module['removeRunDependency'](`fp ${that.name}`);'''
719
+ ready_promise = '''
720
+ loadDataResolve();'''
716
721
717
722
if not options .lz4 :
718
723
# Data requests - for getting a block of data out of the big archive - have
@@ -739,14 +744,14 @@ def generate_js(data_target, data_files, metadata):
739
744
finish: async function(byteArray) {
740
745
var that = this;
741
746
%s
742
- this.requests[this.name] = null;
747
+ this.requests[this.name] = null;%s
743
748
}
744
749
};
745
750
746
751
var files = metadata['files'];
747
752
for (var i = 0; i < files.length; ++i) {
748
753
new DataRequest(files[i]['start'], files[i]['end'], files[i]['audio'] || 0).open('GET', files[i]['filename']);
749
- }\n ''' % (create_preloaded if options .use_preload_plugins else create_data )
754
+ }\n ''' % (create_preloaded if options .use_preload_plugins else create_data , ready_promise if options . export_es6 else '' )
750
755
751
756
if options .has_embedded and not options .obj_output :
752
757
diagnostics .warn ('--obj-output is recommended when using --embed. This outputs an object file for linking directly into your application is more efficient than JS encoding' )
@@ -1049,6 +1054,10 @@ def generate_js(data_target, data_files, metadata):
1049
1054
1050
1055
code += '''
1051
1056
Module['preloadResults'] ??= {};\n '''
1057
+ catch_case = '''
1058
+ .catch((error) => {
1059
+ loadDataReject(error);
1060
+ })'''
1052
1061
1053
1062
if options .use_preload_cache :
1054
1063
code += '''
@@ -1075,10 +1084,10 @@ def generate_js(data_target, data_files, metadata):
1075
1084
}
1076
1085
}
1077
1086
} catch(e) {
1078
- await preloadFallback(e);
1087
+ await preloadFallback(e)%s ;
1079
1088
}
1080
1089
1081
- Module['setStatus']?.('Downloading...');\n '''
1090
+ Module['setStatus']?.('Downloading...');\n ''' % ( catch_case if options . export_es6 else '' )
1082
1091
else :
1083
1092
# Not using preload cache, so we might as well start the xhr ASAP,
1084
1093
# potentially before JS parsing of the main codebase if it's after us.
@@ -1091,14 +1100,16 @@ def generate_js(data_target, data_files, metadata):
1091
1100
if (!fetched) {
1092
1101
// Note that we don't use await here because we want to execute the
1093
1102
// the rest of this function immediately.
1094
- let packageData = await fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE);
1095
- if (fetchedCallback) {
1096
- fetchedCallback(packageData);
1097
- fetchedCallback = null;
1098
- } else {
1099
- fetched = packageData;
1100
- }
1101
- }\n '''
1103
+ fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE)
1104
+ .then((data) => {
1105
+ if (fetchedCallback) {
1106
+ fetchedCallback(data);
1107
+ fetchedCallback = null;
1108
+ } else {
1109
+ fetched = data;
1110
+ }
1111
+ })%s;
1112
+ }\n ''' % (catch_case if options .export_es6 else '' )
1102
1113
1103
1114
code += '''
1104
1115
Module['preloadResults'][PACKAGE_NAME] = {fromCache: false};
@@ -1115,10 +1126,10 @@ def generate_js(data_target, data_files, metadata):
1115
1126
ret += '''
1116
1127
}
1117
1128
if (Module['calledRun']) {
1118
- await runWithFS(Module);
1129
+ runWithFS(Module)%s ;
1119
1130
} else {
1120
1131
(Module['preRun'] ??= []).push(runWithFS); // FS is not initialized yet, wait for it
1121
- }\n '''
1132
+ }\n ''' % ( catch_case if options . export_es6 else '' )
1122
1133
1123
1134
if options .separate_metadata :
1124
1135
node_support_code = ''
@@ -1154,10 +1165,11 @@ def generate_js(data_target, data_files, metadata):
1154
1165
else :
1155
1166
ret += '''
1156
1167
}
1157
- await loadPackage(%s);\n ''' % json .dumps (metadata )
1168
+ loadPackage(%s);\n ''' % json .dumps (metadata )
1158
1169
1159
1170
if options .export_es6 :
1160
1171
ret += '''
1172
+ });
1161
1173
}
1162
1174
// END the loadDataFile function
1163
1175
'''
0 commit comments