A framework for building native applications using React
Align Flow lib defs for Node.js child_process with v24 (#55186)
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 R
Rob Hogan committed
2e9b7fb2add9b34db34122716be75c9c7245a1ba
Parent: 9353eb5
Committed by meta-codesync[bot] <215208954+meta-codesync[bot]@users.noreply.github.com>
on 1/18/2026, 8:52:52 PM