MCPcopy Create free account
hub / github.com/emscripten-core/emscripten / generate_preload_js

Function generate_preload_js

tools/file_packager.py:621–1115  ·  view source on GitHub ↗
(data_target, data_files, metadata, js_file)

Source from the content-addressed store, hash-verified

619
620
621def generate_preload_js(data_target, data_files, metadata, js_file):
622 # emcc will add this to the output itself, so it is only needed for
623 # standalone calls
624 if options.from_emcc:
625 ret = ''
626 else:
627 if options.export_es6:
628 ret = 'export default async function loadDataFile(Module) {\n'
629 else:
630 ret = '''
631 var Module = typeof %(EXPORT_NAME)s != 'undefined' ? %(EXPORT_NAME)s : {};\n''' % {"EXPORT_NAME": options.export_name}
632
633 ret += '''
634 if (!Module['expectedDataFileDownloads']) Module['expectedDataFileDownloads'] = 0;
635 Module['expectedDataFileDownloads']++;'''
636
637 if not options.export_es6:
638 ret += '''
639 (() => {'''
640
641 ret += '''
642 // Do not attempt to redownload the virtual filesystem data when in a pthread or a Wasm Worker context.
643 var isPthread = typeof ENVIRONMENT_IS_PTHREAD != 'undefined' && ENVIRONMENT_IS_PTHREAD;
644 var isWasmWorker = typeof ENVIRONMENT_IS_WASM_WORKER != 'undefined' && ENVIRONMENT_IS_WASM_WORKER;
645 if (isPthread || isWasmWorker) return;\n'''
646
647 if options.support_node:
648 ret += " var isNode = globalThis.process && globalThis.process.versions && globalThis.process.versions.node && globalThis.process.type != 'renderer';\n"
649
650 if options.support_node and options.export_es6:
651 ret += '''if (isNode) {
652 const { createRequire } = await import('node:module');
653 /** @suppress{duplicate} */
654 var require = createRequire(import.meta.url);
655 }\n'''
656
657 if options.export_es6:
658 ret += 'return new Promise((loadDataResolve, loadDataReject) => {\n'
659 ret += ' async function loadPackage(metadata) {\n'
660
661 code = '''
662 function assert(check, msg) {
663 if (!check) throw new Error(msg);
664 }\n'''
665
666 # Set up folders
667 partial_dirs = []
668 for file_ in data_files:
669 assert file_.mode == 'preload'
670 dirname = os.path.dirname(file_.dstpath)
671 dirname = dirname.lstrip('/') # absolute paths start with '/', remove that
672 if dirname:
673 parts = dirname.split('/')
674 for i in range(len(parts)):
675 partial = '/'.join(parts[:i + 1])
676 if partial not in partial_dirs:
677 code += ('''Module['FS_createPath'](%s, %s, true, true);\n'''
678 % (json.dumps('/' + '/'.join(parts[:i])), json.dumps(parts[i])))

Callers 1

mainFunction · 0.85

Calls 7

splitMethod · 0.80
appendMethod · 0.80
rangeFunction · 0.50
openFunction · 0.50
joinMethod · 0.45
writeMethod · 0.45
moveMethod · 0.45

Tested by

no test coverage detected