@@ -616,8 +616,11 @@ def generate_js(data_target, data_files, metadata):
616616 // Do not attempt to redownload the virtual filesystem data when in a pthread or a Wasm Worker context.
617617 var isPthread = typeof ENVIRONMENT_IS_PTHREAD != 'undefined' && ENVIRONMENT_IS_PTHREAD;
618618 var isWasmWorker = typeof ENVIRONMENT_IS_WASM_WORKER != 'undefined' && ENVIRONMENT_IS_WASM_WORKER;
619- if (isPthread || isWasmWorker) return;
620- function loadPackage(metadata) {\n '''
619+ if (isPthread || isWasmWorker) return;\n '''
620+
621+ if options .support_node :
622+ ret += " var isNode = typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string';\n "
623+ ret += ' function loadPackage(metadata) {\n '
621624
622625 code = '''
623626 function assert(check, msg) {
@@ -785,22 +788,25 @@ def generate_js(data_target, data_files, metadata):
785788
786789 code += r'''
787790 var PACKAGE_UUID = metadata['package_uuid'];
788- var indexedDB;
789- if (typeof window === 'object') {
790- indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
791- } else if (typeof location !== 'undefined') {
792- // worker
793- indexedDB = self.indexedDB;
794- } else {
795- throw 'using IndexedDB to cache data can only be done on a web page or in a web worker';
796- }
797791 var IDB_RO = "readonly";
798792 var IDB_RW = "readwrite";
799793 var DB_NAME = "''' + options .indexeddb_name + '''";
800794 var DB_VERSION = 1;
801795 var METADATA_STORE_NAME = 'METADATA';
802796 var PACKAGE_STORE_NAME = 'PACKAGES';
803797 function openDatabase(callback, errback) {
798+ if (isNode) {
799+ return errback();
800+ }
801+ var indexedDB;
802+ if (typeof window === 'object') {
803+ indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
804+ } else if (typeof location !== 'undefined') {
805+ // worker
806+ indexedDB = self.indexedDB;
807+ } else {
808+ throw 'using IndexedDB to cache data can only be done on a web page or in a web worker';
809+ }
804810 try {
805811 var openRequest = indexedDB.open(DB_NAME, DB_VERSION);
806812 } catch (e) {
@@ -942,7 +948,7 @@ def generate_js(data_target, data_files, metadata):
942948 node_support_code = ''
943949 if options .support_node :
944950 node_support_code = '''
945- if (typeof process === 'object' && typeof process.versions === 'object' && typeof process.versions.node === 'string' ) {
951+ if (isNode ) {
946952 require('fs').readFile(packageName, (err, contents) => {
947953 if (err) {
948954 errback(err);
@@ -1098,14 +1104,29 @@ def generate_js(data_target, data_files, metadata):
10981104 }\n '''
10991105
11001106 if options .separate_metadata :
1101- _metadata_template = '''
1107+ node_support_code = ''
1108+ if options .support_node :
1109+ node_support_code = '''
1110+ if (isNode) {
1111+ require('fs').readFile(metadataUrl, 'utf8', (err, contents) => {
1112+ if (err) {
1113+ return Promise.reject(err);
1114+ } else {
1115+ loadPackage(JSON.parse(contents));
1116+ }
1117+ });
1118+ return;
1119+ }''' .strip ()
1120+
1121+ ret += '''
11021122 Module['removeRunDependency']('%(metadata_file)s');
11031123 }
11041124
11051125 function runMetaWithFS() {
11061126 Module['addRunDependency']('%(metadata_file)s');
1107- var REMOTE_METADATA_NAME = Module['locateFile'] ? Module['locateFile']('%(metadata_file)s', '') : '%(metadata_file)s';
1108- fetch(REMOTE_METADATA_NAME)
1127+ var metadataUrl = Module['locateFile'] ? Module['locateFile']('%(metadata_file)s', '') : '%(metadata_file)s';
1128+ %(node_support_code)s
1129+ fetch(metadataUrl)
11091130 .then((response) => {
11101131 if (response.ok) {
11111132 return response.json();
@@ -1120,14 +1141,14 @@ def generate_js(data_target, data_files, metadata):
11201141 } else {
11211142 if (!Module['preRun']) Module['preRun'] = [];
11221143 Module["preRun"].push(runMetaWithFS);
1123- }\n ''' % {'metadata_file' : os .path .basename (options .jsoutput + '.metadata' )}
1144+ }\n ''' % {'node_support_code' : node_support_code , ' metadata_file' : os .path .basename (options .jsoutput + '.metadata' )}
11241145 else :
1125- _metadata_template = '''
1146+ ret + = '''
11261147 }
11271148 loadPackage(%s);\n ''' % json .dumps (metadata )
11281149
1129- ret += '''%s
1130- })();\n ''' % _metadata_template
1150+ ret += '''
1151+ })();\n '''
11311152
11321153 return ret
11331154
0 commit comments