| |
| |
| |
| |
| |
|
|
| addToLibrary({ |
| $preloadPlugins__postset: () => addAtModule(makeModuleReceive('preloadPlugins')), |
| $preloadPlugins: [], |
|
|
| #if !MINIMAL_RUNTIME |
| |
| |
| $FS_handledByPreloadPlugin__internal: true, |
| $FS_handledByPreloadPlugin__deps: ['$preloadPlugins'], |
| $FS_handledByPreloadPlugin: async (byteArray, fullname) => { |
| #if LibraryManager.has('libbrowser.js') |
| |
| if (typeof Browser != 'undefined') Browser.init(); |
| #endif |
|
|
| for (var plugin of preloadPlugins) { |
| if (plugin['canHandle'](fullname)) { |
| #if ASSERTIONS |
| assert(plugin['handle'].constructor.name === 'AsyncFunction', 'Filesystem plugin handlers must be async functions (See #24914)') |
| #endif |
| return plugin['handle'](byteArray, fullname); |
| } |
| } |
| |
| |
| return byteArray; |
| }, |
|
|
| |
| $FS_createPreloadedFile__deps: ['$FS_preloadFile'], |
| $FS_createPreloadedFile: (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { |
| FS_preloadFile(parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish).then(onload).catch(onerror); |
| }, |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| $FS_preloadFile__deps: [ |
| '$asyncLoad', |
| '$PATH_FS', |
| '$FS_createDataFile', |
| '$getUniqueRunDependency', |
| '$addRunDependency', |
| '$removeRunDependency', |
| '$FS_handledByPreloadPlugin', |
| ], |
| $FS_preloadFile: async (parent, name, url, canRead, canWrite, dontCreateFile, canOwn, preFinish) => { |
| |
| |
| var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; |
| var dep = getUniqueRunDependency(`cp ${fullname}`); |
| addRunDependency(dep); |
|
|
| try { |
| var byteArray = url; |
| if (typeof url == 'string') { |
| byteArray = await asyncLoad(url); |
| } |
|
|
| byteArray = await FS_handledByPreloadPlugin(byteArray, fullname); |
| preFinish?.(); |
| if (!dontCreateFile) { |
| FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); |
| } |
| } finally { |
| removeRunDependency(dep); |
| } |
| }, |
| #endif |
|
|
| |
| $FS_modeStringToFlags: (str) => { |
| if (typeof str != 'string') return str; |
| var flagModes = { |
| 'r': {{{ cDefs.O_RDONLY }}}, |
| 'r+': {{{ cDefs.O_RDWR }}}, |
| 'w': {{{ cDefs.O_TRUNC }}} | {{{ cDefs.O_CREAT }}} | {{{ cDefs.O_WRONLY }}}, |
| 'w+': {{{ cDefs.O_TRUNC }}} | {{{ cDefs.O_CREAT }}} | {{{ cDefs.O_RDWR }}}, |
| 'a': {{{ cDefs.O_APPEND }}} | {{{ cDefs.O_CREAT }}} | {{{ cDefs.O_WRONLY }}}, |
| 'a+': {{{ cDefs.O_APPEND }}} | {{{ cDefs.O_CREAT }}} | {{{ cDefs.O_RDWR }}}, |
| }; |
| var flags = flagModes[str]; |
| if (typeof flags == 'undefined') { |
| throw new Error(`Unknown file open mode: ${str}`); |
| } |
| return flags; |
| }, |
| $FS_getMode: (canRead, canWrite) => { |
| var mode = 0; |
| if (canRead) mode |= {{{ cDefs.S_IRUGO }}} | {{{ cDefs.S_IXUGO }}}; |
| if (canWrite) mode |= {{{ cDefs.S_IWUGO }}}; |
| return mode; |
| }, |
|
|
| $FS_fileDataToTypedArray: (data) => { |
| if (typeof data == 'string') { |
| data = intArrayFromString(data, true); |
| } |
| if (!data.subarray) { |
| data = new Uint8Array(data); |
| } |
| return data; |
| }, |
|
|
| $FS_stdin_getChar_buffer: [], |
|
|
| |
| |
| |
| |
| $FS_stdin_getChar__deps: [ |
| '$FS_stdin_getChar_buffer', |
| '$intArrayFromString', |
| ], |
| $FS_stdin_getChar: () => { |
| if (!FS_stdin_getChar_buffer.length) { |
| var result = null; |
| #if ENVIRONMENT_MAY_BE_NODE |
| if (ENVIRONMENT_IS_NODE) { |
| |
| var BUFSIZE = 256; |
| var buf = Buffer.alloc(BUFSIZE); |
| var bytesRead = 0; |
|
|
| |
| |
| |
| |
| |
| |
| |
| var fd = process.stdin.fd; |
|
|
| try { |
| bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); |
| } catch(e) { |
| |
| |
| |
| if (e.toString().includes('EOF')) bytesRead = 0; |
| else throw e; |
| } |
|
|
| if (bytesRead > 0) { |
| result = buf.slice(0, bytesRead).toString('utf-8'); |
| } |
| } else |
| #endif |
| #if ENVIRONMENT_MAY_BE_WEB |
| if (globalThis.window?.prompt) { |
| |
| result = window.prompt('Input: '); |
| if (result !== null) { |
| result += '\n'; |
| } |
| } else |
| #endif |
| #if ENVIRONMENT_MAY_BE_SHELL |
| if (globalThis.readline) { |
| |
| result = readline(); |
| if (result) { |
| result += '\n'; |
| } |
| } else |
| #endif |
| {} |
| if (!result) { |
| return null; |
| } |
| FS_stdin_getChar_buffer = intArrayFromString(result, true); |
| } |
| return FS_stdin_getChar_buffer.shift(); |
| }, |
|
|
| $FS_unlink__deps: ['$FS'], |
| $FS_unlink: 'FS.unlink', |
|
|
| $FS_createPath__deps: ['$FS'], |
| $FS_createPath: 'FS.createPath', |
|
|
| $FS_createDevice__deps: ['$FS'], |
| $FS_createDevice: 'FS.createDevice', |
|
|
| $FS_readFile__deps: ['$FS'], |
| $FS_readFile: 'FS.readFile', |
| }); |
|
|
| |
| |
| |
| if (FORCE_FILESYSTEM) { |
| extraLibraryFuncs.push('$FS'); |
| } |
|
|