@@ -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 = '''
@@ -710,6 +713,8 @@ def generate_js(data_target, data_files, metadata):
710
713
create_data = '''// canOwn this data in the filesystem, it is a slide into the heap that will never change
711
714
Module['FS_createDataFile'](this.name, null, byteArray, true, true, true);
712
715
Module['removeRunDependency'](`fp ${that.name}`);'''
716
+ ready_promise = '''
717
+ loadDataResolve();'''
713
718
714
719
if not options .lz4 :
715
720
# Data requests - for getting a block of data out of the big archive - have
@@ -736,14 +741,14 @@ def generate_js(data_target, data_files, metadata):
736
741
finish: function(byteArray) {
737
742
var that = this;
738
743
%s
739
- this.requests[this.name] = null;
744
+ this.requests[this.name] = null;%s
740
745
}
741
746
};
742
747
743
748
var files = metadata['files'];
744
749
for (var i = 0; i < files.length; ++i) {
745
750
new DataRequest(files[i]['start'], files[i]['end'], files[i]['audio'] || 0).open('GET', files[i]['filename']);
746
- }\n ''' % (create_preloaded if options .use_preload_plugins else create_data )
751
+ }\n ''' % (create_preloaded if options .use_preload_plugins else create_data , ready_promise if options . export_es6 else '' )
747
752
748
753
if options .has_embedded and not options .obj_output :
749
754
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' )
@@ -1046,7 +1051,11 @@ def generate_js(data_target, data_files, metadata):
1046
1051
1047
1052
code += '''
1048
1053
Module['preloadResults'] ??= {};\n '''
1049
-
1054
+ catch_case = '''
1055
+ .catch((error) => {
1056
+ loadDataReject(error);
1057
+ })'''
1058
+
1050
1059
if options .use_preload_cache :
1051
1060
code += '''
1052
1061
async function preloadFallback(error) {
@@ -1072,10 +1081,10 @@ def generate_js(data_target, data_files, metadata):
1072
1081
}
1073
1082
}
1074
1083
} catch(e) {
1075
- await preloadFallback(e);
1084
+ await preloadFallback(e)%s ;
1076
1085
}
1077
1086
1078
- Module['setStatus']?.('Downloading...');\n '''
1087
+ Module['setStatus']?.('Downloading...');\n ''' % ( catch_case if options . export_es6 else '' )
1079
1088
else :
1080
1089
# Not using preload cache, so we might as well start the xhr ASAP,
1081
1090
# potentially before JS parsing of the main codebase if it's after us.
@@ -1088,14 +1097,16 @@ def generate_js(data_target, data_files, metadata):
1088
1097
if (!fetched) {
1089
1098
// Note that we don't use await here because we want to execute the
1090
1099
// the rest of this function immediately.
1091
- let packageData = await fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE);
1092
- if (fetchedCallback) {
1093
- fetchedCallback(packageData);
1094
- fetchedCallback = null;
1095
- } else {
1096
- fetched = packageData;
1097
- }
1098
- }\n '''
1100
+ fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE)
1101
+ .then((data) => {
1102
+ if (fetchedCallback) {
1103
+ fetchedCallback(data);
1104
+ fetchedCallback = null;
1105
+ } else {
1106
+ fetched = data;
1107
+ }
1108
+ })%s;
1109
+ }\n ''' % (catch_case if options .export_es6 else '' )
1099
1110
1100
1111
code += '''
1101
1112
Module['preloadResults'][PACKAGE_NAME] = {fromCache: false};
@@ -1112,10 +1123,10 @@ def generate_js(data_target, data_files, metadata):
1112
1123
ret += '''
1113
1124
}
1114
1125
if (Module['calledRun']) {
1115
- await runWithFS(Module);
1126
+ runWithFS(Module)%s ;
1116
1127
} else {
1117
1128
(Module['preRun'] ??= []).push(runWithFS); // FS is not initialized yet, wait for it
1118
- }\n '''
1129
+ }\n ''' % ( catch_case if options . export_es6 else '' )
1119
1130
1120
1131
if options .separate_metadata :
1121
1132
node_support_code = ''
@@ -1151,10 +1162,11 @@ def generate_js(data_target, data_files, metadata):
1151
1162
else :
1152
1163
ret += '''
1153
1164
}
1154
- await loadPackage(%s);\n ''' % json .dumps (metadata )
1165
+ loadPackage(%s);\n ''' % json .dumps (metadata )
1155
1166
1156
1167
if options .export_es6 :
1157
1168
ret += '''
1169
+ });
1158
1170
}
1159
1171
// END the loadDataFile function
1160
1172
'''
0 commit comments