Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/55186 This is an AI-assisted change to align the Flow definitions for the `child_process` module with the Node.js docs as at v24. **New v18+ Features:** 1. **AbortSignal Support** (v18.0.0) - Process cancellation - Added `signal?: AbortSignal` option to all async functions (exec, execFile, fork, spawn) - Enables cancellation of child processes using `AbortController` - Example: `const controller = new AbortController(); spawn('cmd', [], {signal: controller.signal}); controller.abort();` - https://nodejs.org/api/child_process.html#child_processexeccommand-options-callback 2. **Enhanced Process Properties** (v20.x) - `spawnargs: Array<string>` - Full command-line arguments used to launch the process - `spawnfile: string` - Executable file name of the child process - `signalCode: string | null` - Signal that terminated the child process - https://nodejs.org/api/child_process.html#subprocessspawnargs **ChildProcess Class Updates:** 3. **Improved Property Types** - `stdio` is now a properly typed tuple array with readonly modifier - `channel` changed from `Object` to `mixed` for better type safety 4. **Enhanced Method Signatures** - `kill(signal?: string | number): boolean` - Now returns boolean and accepts numeric signals - `send()` overloads properly typed with `child_process$Serializable` messages - `send()` accepts `keepOpen` option: `Readonly<{keepOpen?: boolean}>` - https://nodejs.org/api/child_process.html#subprocesskillsignal **Option Type Improvements:** 6. **Modern Readonly Syntax** - All input options use `Readonly<{...}>` - `execOpts`, `execFileOpts`, `forkOpts`, `spawnOpts`, `spawnSyncOpts`, etc. - Allows passing readonly types safely 7. **Enhanced Environment Variables** - Changed `env?: Object` to `env?: {[key: string]: string | void}` - More precise typing for environment variable dictionaries 8. **New Fork Options** (IPC enhancements) - `serialization?: 'json' | 'advanced'` - IPC serialization format - `killSignal` and `timeout` options added to fork - https://nodejs.org/api/child_process.html#child_processforkmodulepath-args-options 9. **Enhanced Spawn Options** - Added `killSignal`, `timeout`, `serialization` to `spawnOpts` - Better consistency across all spawn functions **Return Type Fixes:** 10. **spawnRet/spawnSyncRet** - Made fields properly nullable: - `status: number | null` - null if process never exited - `signal: string | null` - null if not terminated by signal - `error: Error | void` - void if no error occurred - Removed spread operator for exact types **Helper Types:** 11. **`child_process$Serializable`** - Union type for IPC messages: - `string | number | boolean | bigint | {...} | Array<mixed>` - Used in send() method signatures 12. **`child_process$SendHandle`** - Type for handle passing: - `net$Server | net$Socket` - Used for passing server/socket handles to child processes **References:** - Node.js child_process module docs: https://nodejs.org/api/child_process.html - AbortSignal integration: https://nodejs.org/api/child_process.html#child_processexeccommand-options-callback Changelog: [Internal] --- > Generated by [Confucius Code Assist (CCA)](https://www.internalfb.com/wiki/Confucius/Analect/Shared_Analects/Confucius_Code_Assist_(CCA)/) [Confucius Session](https://www.internalfb.com/confucius?host=devvm45708.cln0.facebook.com&port=8086&tab=Chat&session_id=1a3aa26e-e5a9-11f0-8d47-71a4a90f0494&entry_name=Code+Assist), [Trace](https://www.internalfb.com/confucius?session_id=1a3aa26e-e5a9-11f0-8d47-71a4a90f0494&tab=Trace) Reviewed By: vzaidman Differential Revision: D89944331 fbshipit-source-id: 744ae04051c2214d97269c48c115060f5f30fb1f
@react-native/debugger-shell
Experimental Electron-based shell for React Native DevTools. This package is not part of React Native's public API.
Why Electron?
The React Native DevTools frontend is based on Chrome DevTools, which is a web app, but is not particularly portable: it's designed to run in Chromium, and Chromium only. Prior to @react-native/debugger-shell, we would run it in hosted mode in an instance of Chrome or Edge.
Relying on hosted mode presents a variety of UX issues in the debugging workflow, such as the need to ask developers to install a particular browser before they can debug in React Native, and the inability to foreground/reuse existing debugger windows when relaunching the debugger for the same app. In order to address these issues effectively, we fundamentally need to leave the browser sandbox and run the debugger in a shell we can bundle with React Native, and whose behavior we can control.
Electron is a tried-and-tested framework for the specific task of embedding a Chromium browser in a portable, customized shell. As a rule we'll hold a high bar for performance and reliability, and we'll only add features to the shell if they are strictly necessary to complement the DevTools frontend's built-in capabilities.