@@ -612,7 +612,7 @@ def generate_js(data_target, data_files, metadata):
612
612
var Module = typeof %(EXPORT_NAME)s != 'undefined' ? %(EXPORT_NAME)s : {};\n ''' % {"EXPORT_NAME" : options .export_name }
613
613
614
614
ret += '''
615
- Module['expectedDataFileDownloads'] ?? = 0;
615
+ if (! Module['expectedDataFileDownloads']) Module['expectedDataFileDownloads'] = 0;
616
616
Module['expectedDataFileDownloads']++;'''
617
617
618
618
if not options .export_es6 :
@@ -626,7 +626,7 @@ def generate_js(data_target, data_files, metadata):
626
626
if (isPthread || isWasmWorker) return;\n '''
627
627
628
628
if options .support_node :
629
- ret += " var isNode = globalThis.process?. versions?. node && globalThis.process? .type != 'renderer';\n "
629
+ ret += " var isNode = globalThis.process && globalThis.process. versions && globalThis.process.versions. node && globalThis.process.type != 'renderer';\n "
630
630
631
631
if options .support_node and options .export_es6 :
632
632
ret += '''if (isNode) {
@@ -682,7 +682,7 @@ def generate_js(data_target, data_files, metadata):
682
682
await Module['FS_preloadFile'](name, null, data, true, true, false, true);
683
683
Module['removeRunDependency'](`fp ${name}`);
684
684
} catch (e) {
685
- err(`Preloading file ${name} failed`);
685
+ err(`Preloading file ${name} failed`, e );
686
686
}\n '''
687
687
create_data = '''// canOwn this data in the filesystem, it is a slice into the heap that will never change
688
688
Module['FS_createDataFile'](name, null, data, true, true, true);
@@ -771,7 +771,7 @@ def generate_js(data_target, data_files, metadata):
771
771
}
772
772
var PACKAGE_NAME = '%s';
773
773
var REMOTE_PACKAGE_BASE = '%s';
774
- var REMOTE_PACKAGE_NAME = Module['locateFile']?. (REMOTE_PACKAGE_BASE, '') ?? REMOTE_PACKAGE_BASE;\n ''' % (js_manipulation .escape_for_js_string (data_target ), js_manipulation .escape_for_js_string (remote_package_name ))
774
+ var REMOTE_PACKAGE_NAME = Module['locateFile'] ? Module['locateFile'] (REMOTE_PACKAGE_BASE, '') : REMOTE_PACKAGE_BASE;\n ''' % (js_manipulation .escape_for_js_string (data_target ), js_manipulation .escape_for_js_string (remote_package_name ))
775
775
metadata ['remote_package_size' ] = remote_package_size
776
776
ret += " var REMOTE_PACKAGE_SIZE = metadata['remote_package_size'];\n "
777
777
@@ -938,15 +938,14 @@ def generate_js(data_target, data_files, metadata):
938
938
if options .support_node :
939
939
node_support_code = '''
940
940
if (isNode) {
941
- var fsPromises = require('fs/promises');
942
- var contents = await fsPromises.readFile(packageName);
943
- return contents.buffer;
941
+ var contents = require('fs').readFileSync(packageName);
942
+ return new Uint8Array(contents).buffer;
944
943
}''' .strip ()
945
944
946
945
ret += '''
947
946
async function fetchRemotePackage(packageName, packageSize) {
948
947
%(node_support_code)s
949
- Module['dataFileDownloads'] ?? = {};
948
+ if (! Module['dataFileDownloads']) Module['dataFileDownloads'] = {};
950
949
try {
951
950
var response = await fetch(packageName);
952
951
} catch (e) {
@@ -958,10 +957,10 @@ def generate_js(data_target, data_files, metadata):
958
957
959
958
const chunks = [];
960
959
const headers = response.headers;
961
- const total = Number(headers.get('Content-Length') ?? packageSize);
960
+ const total = Number(headers.get('Content-Length') || packageSize);
962
961
let loaded = 0;
963
962
964
- Module['setStatus']?. ('Downloading data...');
963
+ Module['setStatus'] && Module['setStatus'] ('Downloading data...');
965
964
const reader = response.body.getReader();
966
965
967
966
while (1) {
@@ -979,7 +978,7 @@ def generate_js(data_target, data_files, metadata):
979
978
totalSize += download.total;
980
979
}
981
980
982
- Module['setStatus']?. (`Downloading data... (${totalLoaded}/${totalSize})`);
981
+ Module['setStatus'] && Module['setStatus'] (`Downloading data... (${totalLoaded}/${totalSize})`);
983
982
}
984
983
985
984
const packageData = new Uint8Array(chunks.map((c) => c.length).reduce((a, b) => a + b, 0));
@@ -994,7 +993,7 @@ def generate_js(data_target, data_files, metadata):
994
993
code += '''
995
994
async function processPackageData(arrayBuffer) {
996
995
assert(arrayBuffer, 'Loading data file failed.');
997
- assert(arrayBuffer.constructor.name === ArrayBuffer.name, 'bad input to processPackageData' );
996
+ assert(arrayBuffer.constructor.name === ArrayBuffer.name, 'bad input to processPackageData ' + arrayBuffer.constructor.name );
998
997
var byteArray = new Uint8Array(arrayBuffer);
999
998
var curr;
1000
999
%s
@@ -1004,7 +1003,7 @@ def generate_js(data_target, data_files, metadata):
1004
1003
# we need to find the datafile in the same dir as the html file
1005
1004
1006
1005
code += '''
1007
- Module['preloadResults'] ?? = {};\n '''
1006
+ if (! Module['preloadResults']) Module['preloadResults'] = {};\n '''
1008
1007
1009
1008
if options .use_preload_cache :
1010
1009
code += '''
@@ -1034,7 +1033,7 @@ def generate_js(data_target, data_files, metadata):
1034
1033
await preloadFallback(e)%s;
1035
1034
}
1036
1035
1037
- Module['setStatus']?. ('Downloading...');\n ''' % catch_handler
1036
+ Module['setStatus'] && Module['setStatus'] ('Downloading...');\n ''' % catch_handler
1038
1037
else :
1039
1038
# Not using preload cache, so we might as well start the xhr ASAP,
1040
1039
# potentially before JS parsing of the main codebase if it's after us.
@@ -1065,17 +1064,21 @@ def generate_js(data_target, data_files, metadata):
1065
1064
if (Module['calledRun']) {
1066
1065
runWithFS(Module)%s;
1067
1066
} else {
1068
- (Module['preRun'] ??= []).push(runWithFS); // FS is not initialized yet, wait for it
1067
+ if (!Module['preRun']) Module['preRun'] = [];
1068
+ Module['preRun'].push(runWithFS); // FS is not initialized yet, wait for it
1069
1069
}\n ''' % catch_handler
1070
1070
1071
1071
if options .separate_metadata :
1072
1072
node_support_code = ''
1073
1073
if options .support_node :
1074
1074
node_support_code = '''
1075
1075
if (isNode) {
1076
- var fsPromises = require('fs/promises');
1077
- var contents = await fsPromises.readFile(metadataUrl, 'utf8');
1078
- return loadPackage(JSON.parse(contents));
1076
+ var contents = require('fs').readFileSync(metadataUrl, 'utf8');
1077
+ // The await here is needed, even though JSON.parse is a sync API. It works
1078
+ // around a issue with `removeRunDependency` otherwise being called to early
1079
+ // on the metadata object.
1080
+ var json = await JSON.parse(contents);
1081
+ return loadPackage(json);
1079
1082
}''' .strip ()
1080
1083
1081
1084
ret += '''
@@ -1084,20 +1087,21 @@ def generate_js(data_target, data_files, metadata):
1084
1087
1085
1088
async function runMetaWithFS() {
1086
1089
Module['addRunDependency']('%(metadata_file)s');
1087
- var metadataUrl = Module['locateFile']?. ('%(metadata_file)s', '') ?? '%(metadata_file)s';
1090
+ var metadataUrl = Module['locateFile'] ? Module['locateFile'] ('%(metadata_file)s', '') : '%(metadata_file)s';
1088
1091
%(node_support_code)s
1089
1092
var response = await fetch(metadataUrl);
1090
1093
if (!response.ok) {
1091
1094
throw new Error(`${response.status}: ${response.url}`);
1092
1095
}
1093
1096
var json = await response.json();
1094
- return loadPackage(json);
1097
+ await loadPackage(json);
1095
1098
}
1096
1099
1097
1100
if (Module['calledRun']) {
1098
1101
runMetaWithFS();
1099
1102
} else {
1100
- (Module['preRun'] ??= []).push(runMetaWithFS);
1103
+ if (!Module['preRun']) Module['preRun'] = [];
1104
+ Module['preRun'].push(runMetaWithFS);
1101
1105
}\n ''' % {'node_support_code' : node_support_code , 'metadata_file' : os .path .basename (options .jsoutput + '.metadata' )}
1102
1106
else :
1103
1107
ret += '''
0 commit comments