fix: avoid DEP0190 deprecation on Windows by using single-string spawnSync for where bun (#1503)

Node 22+ emits DEP0190 when spawnSync is called with a separate args
array and shell:true, because the args are only concatenated (not
escaped). Split the findBun() PATH check into platform-specific calls:
Windows uses spawnSync('where bun', { shell: true }) as a single string,
Unix uses spawnSync('which', ['bun']) with no shell option.

Generated by Claude Code
Vibe coded by ousamabenyounes

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Ousama Ben Younes
2026-04-10 09:49:23 +00:00
parent 3651a34e96
commit e9a234308a
2 changed files with 61 additions and 6 deletions
+14 -6
View File
@@ -47,12 +47,20 @@ function fixBrokenScriptPath(argPath) {
* Find Bun executable - checks PATH first, then common install locations
*/
function findBun() {
// Try PATH first
const pathCheck = spawnSync(IS_WINDOWS ? 'where' : 'which', ['bun'], {
encoding: 'utf-8',
stdio: ['pipe', 'pipe', 'pipe'],
shell: IS_WINDOWS
});
// Try PATH first.
// On Windows, pass a single command string to avoid Node 22+ DEP0190 deprecation warning
// (triggered when an args array is combined with shell:true, as the args are only
// concatenated, not escaped). Fixes #1503.
const pathCheck = IS_WINDOWS
? spawnSync('where bun', {
encoding: 'utf-8',
stdio: ['pipe', 'pipe', 'pipe'],
shell: true
})
: spawnSync('which', ['bun'], {
encoding: 'utf-8',
stdio: ['pipe', 'pipe', 'pipe']
});
if (pathCheck.status === 0 && pathCheck.stdout.trim()) {
return 'bun'; // Found in PATH