| |
| |
| |
| |
| |
| #if STRICT_JS && !MODULARIZE |
| "use strict"; |
| #endif |
|
|
| #include "minimum_runtime_check.js" |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #if MODULARIZE |
| #if MODULARIZE == 'instance' |
| var Module = {}; |
| #else |
| var Module = moduleArg; |
| #endif |
| #elif USE_CLOSURE_COMPILER |
| |
| var Module; |
| |
| if (!Module) Module = {"__EMSCRIPTEN_PRIVATE_MODULE_EXPORT_NAME_SUBSTITUTION__":1}; |
| #elif ENVIRONMENT_MAY_BE_AUDIO_WORKLET |
| var Module = globalThis.Module || (typeof {{{ EXPORT_NAME }}} != 'undefined' ? {{{ EXPORT_NAME }}} : {}); |
| #else |
| var Module = typeof {{{ EXPORT_NAME }}} != 'undefined' ? {{{ EXPORT_NAME }}} : {}; |
| #endif |
|
|
| #if POLYFILL |
| #if WASM_BIGINT && MIN_SAFARI_VERSION < 150000 |
| |
| #include "polyfill/bigint64array.js" |
| #endif |
| #endif |
|
|
| #if WASM_WORKERS |
| |
| |
| var ENVIRONMENT_IS_WASM_WORKER = {{{ wasmWorkerDetection() }}}; |
| #endif |
|
|
| #if ENVIRONMENT_MAY_BE_AUDIO_WORKLET |
| var ENVIRONMENT_IS_AUDIO_WORKLET = !!globalThis.AudioWorkletGlobalScope; |
| #endif |
|
|
| #if AUDIO_WORKLET |
| |
| if (ENVIRONMENT_IS_AUDIO_WORKLET) ENVIRONMENT_IS_WASM_WORKER = true; |
| #endif |
|
|
| |
| |
|
|
| #if ENVIRONMENT.length == 1 && !ASSERTIONS |
| var ENVIRONMENT_IS_WEB = {{{ ENVIRONMENT[0] === 'web' }}}; |
| #if PTHREADS && ENVIRONMENT_MAY_BE_NODE |
| |
| var ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope; |
| #else |
| var ENVIRONMENT_IS_WORKER = {{{ ENVIRONMENT[0] === 'worker' }}}; |
| #endif |
| var ENVIRONMENT_IS_NODE = {{{ ENVIRONMENT[0] === 'node' }}}; |
| var ENVIRONMENT_IS_SHELL = {{{ ENVIRONMENT[0] === 'shell' }}}; |
| #else |
| |
| var ENVIRONMENT_IS_WEB = !!globalThis.window; |
| var ENVIRONMENT_IS_WORKER = !!globalThis.WorkerGlobalScope; |
| |
| |
| var ENVIRONMENT_IS_NODE = {{{ nodeDetectionCode() }}}; |
| #if ENVIRONMENT_MAY_BE_AUDIO_WORKLET |
| var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER && !ENVIRONMENT_IS_AUDIO_WORKLET; |
| #else |
| var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; |
| #endif |
| #endif |
|
|
| #if PTHREADS |
| |
| |
| |
| |
|
|
| |
| |
| var ENVIRONMENT_IS_PTHREAD = ENVIRONMENT_IS_WORKER && {{{ pthreadDetection() }}} |
|
|
| #if MODULARIZE && ASSERTIONS |
| if (ENVIRONMENT_IS_PTHREAD) { |
| assert(!globalThis.moduleLoaded, 'module should only be loaded once on each pthread worker'); |
| globalThis.moduleLoaded = true; |
| } |
| #endif |
| #endif |
|
|
| #if ENVIRONMENT_MAY_BE_NODE && (EXPORT_ES6 || PTHREADS || WASM_WORKERS) |
| if (ENVIRONMENT_IS_NODE) { |
| #if EXPORT_ES6 |
| |
| |
| const { createRequire } = await import('node:module'); |
| |
| var require = createRequire(import.meta.url); |
| #endif |
|
|
| #if PTHREADS || WASM_WORKERS |
| var worker_threads = require('node:worker_threads'); |
| globalThis.Worker = worker_threads.Worker; |
| ENVIRONMENT_IS_WORKER = !worker_threads.isMainThread; |
| #if PTHREADS |
| |
| |
| ENVIRONMENT_IS_PTHREAD = ENVIRONMENT_IS_WORKER && worker_threads.workerData == 'em-pthread' |
| #endif |
| #if WASM_WORKERS |
| ENVIRONMENT_IS_WASM_WORKER = ENVIRONMENT_IS_WORKER && worker_threads.workerData == 'em-ww' |
| #endif |
| #endif |
| } |
| #endif |
|
|
| |
| |
| {{{ preJS() }}} |
|
|
| var arguments_ = []; |
| var thisProgram = './this.program'; |
| var quit_ = (status, toThrow) => { |
| throw toThrow; |
| }; |
|
|
| #if EXPORT_ES6 |
| var _scriptName = import.meta.url; |
| #else |
| #if ENVIRONMENT_MAY_BE_WEB |
| #if !MODULARIZE |
| |
| |
| #if SINGLE_FILE && OUTPUT_FORMAT == 'HTML' |
| var _scriptName = globalThis.document ? URL.createObjectURL(new Blob([document.getElementById('mainScript').textContent], { "type" : "text/javascript" })) : undefined; |
| #else |
| var _scriptName = globalThis.document?.currentScript?.src; |
| #endif |
| #endif |
| #elif ENVIRONMENT_MAY_BE_NODE || ENVIRONMENT_MAY_BE_WORKER |
| var _scriptName; |
| #endif |
|
|
| #if ENVIRONMENT_MAY_BE_NODE |
| if (typeof __filename != 'undefined') { |
| _scriptName = __filename; |
| } else |
| #endif |
| #if ENVIRONMENT_MAY_BE_WORKER |
| if (ENVIRONMENT_IS_WORKER) { |
| _scriptName = self.location.href; |
| } |
| #elif ENVIRONMENT_MAY_BE_NODE |
| {} |
| #endif |
| #endif |
|
|
| |
| var scriptDirectory = ''; |
| function locateFile(path) { |
| #if RUNTIME_DEBUG |
| dbg('locateFile:', path, 'scriptDirectory:', scriptDirectory); |
| #endif |
| #if expectToReceiveOnModule('locateFile') |
| if (Module['locateFile']) { |
| return Module['locateFile'](path, scriptDirectory); |
| } |
| #endif |
| return scriptDirectory + path; |
| } |
|
|
| |
| var readAsync, readBinary; |
|
|
| #if ENVIRONMENT_MAY_BE_NODE |
| if (ENVIRONMENT_IS_NODE) { |
| #if ENVIRONMENT.length && ASSERTIONS |
| const isNode = {{{ nodeDetectionCode() }}}; |
| if (!isNode) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); |
| #endif |
|
|
| |
| |
| var fs = require('node:fs'); |
|
|
| #if EXPORT_ES6 |
| if (_scriptName.startsWith('file:')) { |
| scriptDirectory = require('node:path').dirname(require('node:url').fileURLToPath(_scriptName)) + '/'; |
| } |
| #else |
| scriptDirectory = __dirname + '/'; |
| #endif |
|
|
| #include "node_shell_read.js" |
|
|
| if (process.argv.length > 1) { |
| thisProgram = process.argv[1].replace(/\\/g, '/'); |
| } |
|
|
| arguments_ = process.argv.slice(2); |
|
|
| #if !MODULARIZE |
| |
| if (typeof module != 'undefined') { |
| module['exports'] = Module; |
| } |
| #endif |
|
|
| quit_ = (status, toThrow) => { |
| process.exitCode = status; |
| throw toThrow; |
| }; |
|
|
| #if WASM == 2 |
| |
| if (!globalThis.WebAssembly) { |
| eval(fs.readFileSync(locateFile('{{{ TARGET_BASENAME }}}.wasm.js'))+''); |
| } |
| #endif |
|
|
| } else |
| #endif |
| #if ENVIRONMENT_MAY_BE_SHELL || ASSERTIONS |
| if (ENVIRONMENT_IS_SHELL) { |
|
|
| #if ENVIRONMENT_MAY_BE_SHELL |
| readBinary = (f) => { |
| if (globalThis.readbuffer) { |
| return new Uint8Array(readbuffer(f)); |
| } |
| let data = read(f, 'binary'); |
| assert(typeof data == 'object'); |
| return data; |
| }; |
|
|
| readAsync = async (f) => readBinary(f); |
|
|
| globalThis.clearTimeout ??= (id) => {}; |
|
|
| |
| arguments_ = globalThis.arguments || globalThis.scriptArgs; |
|
|
| if (globalThis.quit) { |
| quit_ = (status, toThrow) => { |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| setTimeout(() => { |
| if (!(toThrow instanceof ExitStatus)) { |
| let toLog = toThrow; |
| if (toThrow && typeof toThrow == 'object' && toThrow.stack) { |
| toLog = [toThrow, toThrow.stack]; |
| } |
| err(`exiting due to exception: ${toLog}`); |
| } |
| quit(status); |
| }); |
| throw toThrow; |
| }; |
| } |
|
|
| if (globalThis.print) { |
| |
| globalThis.console ??= ({}); |
| console.log ??= (print); |
| console.warn ??= console.error ??= (globalThis.printErr ?? print); |
| } |
|
|
| #if WASM == 2 |
| |
| if (!globalThis.WebAssembly) { |
| eval(read(locateFile('{{{ TARGET_BASENAME }}}.wasm.js'))+''); |
| } |
| #endif |
| #endif |
|
|
| } else |
| #endif |
|
|
| |
| |
| |
| #if ENVIRONMENT_MAY_BE_WEB || ENVIRONMENT_MAY_BE_WORKER |
| if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { |
| try { |
| scriptDirectory = new URL('.', _scriptName).href; |
| } catch { |
| |
| |
| } |
|
|
| #if ENVIRONMENT.length && ASSERTIONS |
| if (!(globalThis.window || globalThis.WorkerGlobalScope)) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); |
| #endif |
|
|
| #if PTHREADS && ENVIRONMENT_MAY_BE_NODE |
| |
| |
| if (!ENVIRONMENT_IS_NODE) |
| #endif |
| { |
| #include "web_or_worker_shell_read.js" |
| } |
| } else |
| #endif |
| #if ENVIRONMENT_MAY_BE_AUDIO_WORKLET |
| #endif |
| #if ENVIRONMENT_MAY_BE_AUDIO_WORKLET && ASSERTIONS |
| if (!ENVIRONMENT_IS_AUDIO_WORKLET) |
| #endif |
| { |
| #if ASSERTIONS |
| throw new Error('environment detection error'); |
| #endif |
| } |
|
|
| #if ENVIRONMENT_MAY_BE_NODE && (PTHREADS || WASM_WORKERS) |
| |
| |
| |
| |
| |
| |
| var defaultPrint = console.log.bind(console); |
| var defaultPrintErr = console.error.bind(console); |
| if (ENVIRONMENT_IS_NODE) { |
| var utils = require('node:util'); |
| var stringify = (a) => typeof a == 'object' ? utils.inspect(a) : a; |
| defaultPrint = (...args) => fs.writeSync(1, args.map(stringify).join(' ') + '\n'); |
| defaultPrintErr = (...args) => fs.writeSync(2, args.map(stringify).join(' ') + '\n'); |
| } |
| {{{ makeModuleReceiveWithVar('out', 'print', 'defaultPrint') }}} |
| {{{ makeModuleReceiveWithVar('err', 'printErr', 'defaultPrintErr') }}} |
| #else |
| {{{ makeModuleReceiveWithVar('out', 'print', 'console.log.bind(console)') }}} |
| {{{ makeModuleReceiveWithVar('err', 'printErr', 'console.error.bind(console)') }}} |
| #endif |
|
|
| #if ASSERTIONS |
|
|
| {{{ makeRemovedFSAssert('IDBFS') }}} |
| {{{ makeRemovedFSAssert('PROXYFS') }}} |
| {{{ makeRemovedFSAssert('WORKERFS') }}} |
| {{{ makeRemovedFSAssert('FETCHFS') }}} |
| {{{ makeRemovedFSAssert('ICASEFS') }}} |
| {{{ makeRemovedFSAssert('JSFILEFS') }}} |
| {{{ makeRemovedFSAssert('OPFS') }}} |
|
|
| #if !NODERAWFS |
| {{{ makeRemovedFSAssert('NODEFS') }}} |
| #endif |
|
|
| |
| |
| #if PTHREADS |
| assert( |
| #if ENVIRONMENT_MAY_BE_AUDIO_WORKLET |
| ENVIRONMENT_IS_AUDIO_WORKLET || |
| #endif |
| ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER || ENVIRONMENT_IS_NODE, 'pthreads do not work in this environment yet (need Web Workers, or an alternative to them)'); |
| #else |
| #endif |
|
|
| #if !ENVIRONMENT_MAY_BE_WEB |
| assert(!ENVIRONMENT_IS_WEB, 'web environment detected but not enabled at build time (add `web` to `-sENVIRONMENT` to enable)'); |
| #endif |
|
|
| #if !ENVIRONMENT_MAY_BE_WORKER |
| assert(!ENVIRONMENT_IS_WORKER, 'worker environment detected but not enabled at build time (add `worker` to `-sENVIRONMENT` to enable)'); |
| #endif |
|
|
| #if !ENVIRONMENT_MAY_BE_NODE |
| assert(!ENVIRONMENT_IS_NODE, 'node environment detected but not enabled at build time (add `node` to `-sENVIRONMENT` to enable)'); |
| #endif |
|
|
| #if !ENVIRONMENT_MAY_BE_SHELL |
| assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time (add `shell` to `-sENVIRONMENT` to enable)'); |
| #endif |
|
|
| #endif |
|
|