cross-spawn-cb 3.2.2 → 3.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -49,9 +49,10 @@ function spawn(command, args, options) {
49
49
  return spawned;
50
50
  }
51
51
  function spawnSync(command, args, options) {
52
+ var _ref;
52
53
  var parsed = (0, _parsets.parse)(command, args, options);
53
54
  var result = (0, _spawnSyncts.default)(parsed.command, parsed.args, parsed.options);
54
- result.error = result.error || (0, _enoentts.verifyENOENTSync)(result.status, parsed);
55
+ result.error = (_ref = result.error || (0, _enoentts.verifyENOENTSync)(result.status, parsed)) !== null && _ref !== void 0 ? _ref : undefined;
55
56
  return result;
56
57
  }
57
58
  var _default = spawn;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/index.ts"],"sourcesContent":["/**\n * Minimal cross-spawn shim for Windows compatibility on legacy Node.js\n *\n * This replaces the bundled cross-spawn v6.0.5 (~1,950 lines) with a minimal\n * implementation (~200 lines) that uses external dependencies:\n * - which@^1.0.0 (command resolution)\n * - env-path-key@^1.0.0 (cross-platform PATH key detection)\n */\n\nimport type { ChildProcess, SpawnSyncReturns } from 'child_process';\nimport cp from 'child_process';\nimport { hookChildProcess, notFoundError, verifyENOENT, verifyENOENTSync } from './enoent.ts';\nimport { parse } from './parse.ts';\nimport spawnSyncCompat from './spawnSync.ts';\nimport type { Parsed, ShimSpawnOptions } from './types.ts';\n\nfunction spawn(command: string, args?: string[] | ShimSpawnOptions, options?: ShimSpawnOptions): ChildProcess {\n const parsed = parse(command, args, options);\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n hookChildProcess(spawned, parsed);\n return spawned;\n}\n\nfunction spawnSync(command: string, args?: string[] | ShimSpawnOptions, options?: ShimSpawnOptions): SpawnSyncReturns<Buffer> {\n const parsed = parse(command, args, options);\n const result = spawnSyncCompat(parsed.command, parsed.args, parsed.options) as SpawnSyncReturns<Buffer> & { error?: Error };\n result.error = (result.error || verifyENOENTSync(result.status as number, parsed)) as Error | undefined;\n return result;\n}\n\n// Main export\nexport default spawn;\n\n// Named exports matching cross-spawn's API\n// Internal APIs used by crossSpawn.ts\nexport { parse as _parse, spawn, spawnSync as sync };\nexport const _enoent = {\n hookChildProcess,\n verifyENOENT,\n verifyENOENTSync,\n notFoundError,\n};\n\n// Re-export types\nexport type { Parsed, ShimSpawnOptions };\n"],"names":["_enoent","_parse","parse","spawn","sync","spawnSync","command","args","options","parsed","spawned","cp","hookChildProcess","result","spawnSyncCompat","error","verifyENOENTSync","status","verifyENOENT","notFoundError"],"mappings":"AAAA;;;;;;;CAOC;;;;;;;;;;;QA6BYA;eAAAA;;QADKC;eAATC,cAAK;;QALd,cAAc;IACd;eAAA;;QAI0BC;eAAAA;;QAAoBC;eAAbC;;;oEAzBlB;wBACiE;uBAC1D;kEACM;;;;;;AAG5B,SAASF,MAAMG,OAAe,EAAEC,IAAkC,EAAEC,OAA0B;IAC5F,IAAMC,SAASP,IAAAA,cAAK,EAACI,SAASC,MAAMC;IACpC,IAAME,UAAUC,sBAAE,CAACR,KAAK,CAACM,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IACpEI,IAAAA,0BAAgB,EAACF,SAASD;IAC1B,OAAOC;AACT;AAEA,SAASL,UAAUC,OAAe,EAAEC,IAAkC,EAAEC,OAA0B;IAChG,IAAMC,SAASP,IAAAA,cAAK,EAACI,SAASC,MAAMC;IACpC,IAAMK,SAASC,IAAAA,oBAAe,EAACL,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IAC1EK,OAAOE,KAAK,GAAIF,OAAOE,KAAK,IAAIC,IAAAA,0BAAgB,EAACH,OAAOI,MAAM,EAAYR;IAC1E,OAAOI;AACT;IAGA,WAAeV;AAKR,IAAMH,UAAU;IACrBY,kBAAAA,0BAAgB;IAChBM,cAAAA,sBAAY;IACZF,kBAAAA,0BAAgB;IAChBG,eAAAA,uBAAa;AACf"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/index.ts"],"sourcesContent":["/**\n * Minimal cross-spawn shim for Windows compatibility on legacy Node.js\n *\n * This replaces the bundled cross-spawn v6.0.5 (~1,950 lines) with a minimal\n * implementation (~200 lines) that uses external dependencies:\n * - which@^1.0.0 (command resolution)\n * - env-path-key@^1.0.0 (cross-platform PATH key detection)\n */\n\nimport type { ChildProcess, SpawnSyncReturns } from 'child_process';\nimport cp from 'child_process';\nimport { hookChildProcess, notFoundError, verifyENOENT, verifyENOENTSync } from './enoent.ts';\nimport { parse } from './parse.ts';\nimport spawnSyncCompat from './spawnSync.ts';\nimport type { Parsed, ShimSpawnOptions } from './types.ts';\n\nfunction spawn(command: string, args?: string[] | ShimSpawnOptions, options?: ShimSpawnOptions): ChildProcess {\n const parsed = parse(command, args, options);\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n hookChildProcess(spawned, parsed);\n return spawned;\n}\n\nfunction spawnSync(command: string, args?: string[] | ShimSpawnOptions, options?: ShimSpawnOptions): SpawnSyncReturns<Buffer> {\n const parsed = parse(command, args, options);\n const result = spawnSyncCompat(parsed.command, parsed.args, parsed.options) as SpawnSyncReturns<Buffer>;\n result.error = (result.error || verifyENOENTSync(result.status as number, parsed)) ?? undefined;\n return result;\n}\n\n// Main export\nexport default spawn;\n\n// Named exports matching cross-spawn's API\n// Internal APIs used by crossSpawn.ts\nexport { parse as _parse, spawn, spawnSync as sync };\nexport const _enoent = {\n hookChildProcess,\n verifyENOENT,\n verifyENOENTSync,\n notFoundError,\n};\n\n// Re-export types\nexport type { Parsed, ShimSpawnOptions };\n"],"names":["_enoent","_parse","parse","spawn","sync","spawnSync","command","args","options","parsed","spawned","cp","hookChildProcess","result","spawnSyncCompat","error","verifyENOENTSync","status","undefined","verifyENOENT","notFoundError"],"mappings":"AAAA;;;;;;;CAOC;;;;;;;;;;;QA6BYA;eAAAA;;QADKC;eAATC,cAAK;;QALd,cAAc;IACd;eAAA;;QAI0BC;eAAAA;;QAAoBC;eAAbC;;;oEAzBlB;wBACiE;uBAC1D;kEACM;;;;;;AAG5B,SAASF,MAAMG,OAAe,EAAEC,IAAkC,EAAEC,OAA0B;IAC5F,IAAMC,SAASP,IAAAA,cAAK,EAACI,SAASC,MAAMC;IACpC,IAAME,UAAUC,sBAAE,CAACR,KAAK,CAACM,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IACpEI,IAAAA,0BAAgB,EAACF,SAASD;IAC1B,OAAOC;AACT;AAEA,SAASL,UAAUC,OAAe,EAAEC,IAAkC,EAAEC,OAA0B;QAGhFK;IAFhB,IAAMJ,SAASP,IAAAA,cAAK,EAACI,SAASC,MAAMC;IACpC,IAAMK,SAASC,IAAAA,oBAAe,EAACL,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IAC1EK,OAAOE,KAAK,IAAIF,OAAAA,OAAOE,KAAK,IAAIC,IAAAA,0BAAgB,EAACH,OAAOI,MAAM,EAAYR,qBAA1DI,kBAAAA,OAAsEK;IACtF,OAAOL;AACT;IAGA,WAAeV;AAKR,IAAMH,UAAU;IACrBY,kBAAAA,0BAAgB;IAChBO,cAAAA,sBAAY;IACZH,kBAAAA,0BAAgB;IAChBI,eAAAA,uBAAa;AACf"}
@@ -106,14 +106,15 @@ var isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
106
106
  var _process_versions_node_split_map = _sliced_to_array(process.versions.node.split('.').map(Number), 2), major = _process_versions_node_split_map[0], minor = _process_versions_node_split_map[1];
107
107
  var supportsShellOption = major >= 6 || major === 5 && minor >= 7 || major === 4 && minor >= 8;
108
108
  function detectShebang(parsed) {
109
- parsed.file = (0, _resolvets.resolveCommand)(parsed);
110
- var shebang = parsed.file && (0, _shebangts.readShebang)(parsed.file);
111
- if (shebang) {
112
- parsed.args.unshift(parsed.file);
109
+ var file = (0, _resolvets.resolveCommand)(parsed);
110
+ parsed.file = file;
111
+ var shebang = file && (0, _shebangts.readShebang)(file);
112
+ if (file && shebang) {
113
+ parsed.args.unshift(file);
113
114
  parsed.command = shebang;
114
115
  return (0, _resolvets.resolveCommand)(parsed);
115
116
  }
116
- return parsed.file;
117
+ return file;
117
118
  }
118
119
  function parseNonShell(parsed) {
119
120
  if (!_constantsts.isWindows) return parsed;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/parse.ts"],"sourcesContent":["/**\n * Command parsing for cross-platform spawn\n * Simplified from cross-spawn v6.0.5\n */\n\nimport path from 'path';\nimport { isWindows } from '../constants.ts';\nimport { escapeArgument, escapeCommand } from './escape.ts';\nimport { resolveCommand } from './resolve.ts';\nimport { readShebang } from './shebang.ts';\nimport type { Parsed, ShimSpawnOptions } from './types.ts';\n\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\n// Node ^4.8.0 || ^5.7.0 || >= 6.0.0 supports shell option natively\n// See: https://github.com/nodejs/node/pull/4598\nconst [major, minor] = process.versions.node.split('.').map(Number);\nconst supportsShellOption = major >= 6 || (major === 5 && minor >= 7) || (major === 4 && minor >= 8);\n\nfunction detectShebang(parsed: Parsed): string | null {\n parsed.file = resolveCommand(parsed);\n\n const shebang = parsed.file && readShebang(parsed.file);\n if (shebang) {\n parsed.args.unshift(parsed.file!);\n parsed.command = shebang;\n return resolveCommand(parsed);\n }\n\n return parsed.file;\n}\n\nfunction parseNonShell(parsed: Parsed): Parsed {\n if (!isWindows) return parsed;\n\n // Detect & add support for shebangs\n const commandFile = detectShebang(parsed);\n\n // We don't need a shell if the command filename is an executable\n const needsShell = !isExecutableRegExp.test(commandFile || '');\n\n if (parsed.options.forceShell || needsShell) {\n // Need to double escape meta chars if the command is a cmd-shim\n const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile || '');\n\n // Normalize posix paths into OS compatible paths\n parsed.command = path.normalize(parsed.command);\n\n // Escape command & arguments\n parsed.command = escapeCommand(parsed.command);\n parsed.args = parsed.args.map((arg) => escapeArgument(arg, needsDoubleEscapeMetaChars));\n\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.command = process.env.comspec || 'cmd.exe';\n parsed.options.windowsVerbatimArguments = true;\n }\n\n return parsed;\n}\n\nfunction parseShell(parsed: Parsed): Parsed {\n // If node supports the shell option, there's no need to mimic its behavior\n if (supportsShellOption) {\n return parsed;\n }\n\n // Mimic node shell option for older Node versions\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n if (isWindows) {\n parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.options.windowsVerbatimArguments = true;\n } else {\n if (typeof parsed.options.shell === 'string') {\n parsed.command = parsed.options.shell;\n } else if (process.platform === 'android') {\n parsed.command = '/system/bin/sh';\n } else {\n parsed.command = '/bin/sh';\n }\n parsed.args = ['-c', shellCommand];\n }\n\n return parsed;\n}\n\n// Handle NODE/npm_node_execpath env vars for node commands\nconst NODES = ['node', 'node.exe', 'node.cmd'];\n\nexport function parse(command: string, args?: string[] | ShimSpawnOptions | null, options?: ShimSpawnOptions): Parsed {\n options = typeof args && !Array.isArray(args) ? {} : ({ ...(options || {}) } as ShimSpawnOptions);\n args = typeof args && !Array.isArray(args) ? [] : (((args as string[]).slice(0) || []) as string[]);\n\n // Build parsed object with original command/args BEFORE any substitution\n const parsed: Parsed = {\n command: command,\n args,\n options,\n file: undefined,\n original: {\n command: command,\n args,\n },\n };\n\n // Substitute node command with NODE env var if set\n if (NODES.indexOf(path.basename(parsed.command).toLowerCase()) >= 0) {\n const env = options.env || process.env;\n parsed.command = env.NODE || env.npm_node_execpath || parsed.command;\n }\n\n return options.shell ? parseShell(parsed) : parseNonShell(parsed);\n}\n"],"names":["parse","isExecutableRegExp","isCmdShimRegExp","process","versions","node","split","map","Number","major","minor","supportsShellOption","detectShebang","parsed","file","resolveCommand","shebang","readShebang","args","unshift","command","parseNonShell","isWindows","commandFile","needsShell","test","options","forceShell","needsDoubleEscapeMetaChars","path","normalize","escapeCommand","arg","escapeArgument","shellCommand","concat","join","env","comspec","windowsVerbatimArguments","parseShell","shell","platform","NODES","Array","isArray","slice","undefined","original","indexOf","basename","toLowerCase","NODE","npm_node_execpath"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/parse.ts"],"sourcesContent":["/**\n * Command parsing for cross-platform spawn\n * Simplified from cross-spawn v6.0.5\n */\n\nimport path from 'path';\nimport { isWindows } from '../constants.ts';\nimport { escapeArgument, escapeCommand } from './escape.ts';\nimport { resolveCommand } from './resolve.ts';\nimport { readShebang } from './shebang.ts';\nimport type { Parsed, ShimSpawnOptions } from './types.ts';\n\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\n// Node ^4.8.0 || ^5.7.0 || >= 6.0.0 supports shell option natively\n// See: https://github.com/nodejs/node/pull/4598\nconst [major, minor] = process.versions.node.split('.').map(Number);\nconst supportsShellOption = major >= 6 || (major === 5 && minor >= 7) || (major === 4 && minor >= 8);\n\nfunction detectShebang(parsed: Parsed): string | null {\n const file = resolveCommand(parsed);\n parsed.file = file;\n\n const shebang = file && readShebang(file);\n if (file && shebang) {\n parsed.args.unshift(file);\n parsed.command = shebang;\n return resolveCommand(parsed);\n }\n\n return file;\n}\n\nfunction parseNonShell(parsed: Parsed): Parsed {\n if (!isWindows) return parsed;\n\n // Detect & add support for shebangs\n const commandFile = detectShebang(parsed);\n\n // We don't need a shell if the command filename is an executable\n const needsShell = !isExecutableRegExp.test(commandFile || '');\n\n if (parsed.options.forceShell || needsShell) {\n // Need to double escape meta chars if the command is a cmd-shim\n const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile || '');\n\n // Normalize posix paths into OS compatible paths\n parsed.command = path.normalize(parsed.command);\n\n // Escape command & arguments\n parsed.command = escapeCommand(parsed.command);\n parsed.args = parsed.args.map((arg) => escapeArgument(arg, needsDoubleEscapeMetaChars));\n\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.command = process.env.comspec || 'cmd.exe';\n parsed.options.windowsVerbatimArguments = true;\n }\n\n return parsed;\n}\n\nfunction parseShell(parsed: Parsed): Parsed {\n // If node supports the shell option, there's no need to mimic its behavior\n if (supportsShellOption) {\n return parsed;\n }\n\n // Mimic node shell option for older Node versions\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n if (isWindows) {\n parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.options.windowsVerbatimArguments = true;\n } else {\n if (typeof parsed.options.shell === 'string') {\n parsed.command = parsed.options.shell;\n } else if (process.platform === 'android') {\n parsed.command = '/system/bin/sh';\n } else {\n parsed.command = '/bin/sh';\n }\n parsed.args = ['-c', shellCommand];\n }\n\n return parsed;\n}\n\n// Handle NODE/npm_node_execpath env vars for node commands\nconst NODES = ['node', 'node.exe', 'node.cmd'];\n\nexport function parse(command: string, args?: string[] | ShimSpawnOptions | null, options?: ShimSpawnOptions): Parsed {\n options = typeof args && !Array.isArray(args) ? {} : ({ ...(options || {}) } as ShimSpawnOptions);\n args = typeof args && !Array.isArray(args) ? [] : (((args as string[]).slice(0) || []) as string[]);\n\n // Build parsed object with original command/args BEFORE any substitution\n const parsed: Parsed = {\n command: command,\n args,\n options,\n file: undefined,\n original: {\n command: command,\n args,\n },\n };\n\n // Substitute node command with NODE env var if set\n if (NODES.indexOf(path.basename(parsed.command).toLowerCase()) >= 0) {\n const env = options.env || process.env;\n parsed.command = env.NODE || env.npm_node_execpath || parsed.command;\n }\n\n return options.shell ? parseShell(parsed) : parseNonShell(parsed);\n}\n"],"names":["parse","isExecutableRegExp","isCmdShimRegExp","process","versions","node","split","map","Number","major","minor","supportsShellOption","detectShebang","parsed","file","resolveCommand","shebang","readShebang","args","unshift","command","parseNonShell","isWindows","commandFile","needsShell","test","options","forceShell","needsDoubleEscapeMetaChars","path","normalize","escapeCommand","arg","escapeArgument","shellCommand","concat","join","env","comspec","windowsVerbatimArguments","parseShell","shell","platform","NODES","Array","isArray","slice","undefined","original","indexOf","basename","toLowerCase","NODE","npm_node_execpath"],"mappings":"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"}
@@ -16,9 +16,10 @@ function spawn(command, args, options) {
16
16
  return spawned;
17
17
  }
18
18
  function spawnSync(command, args, options) {
19
+ var _ref;
19
20
  const parsed = parse(command, args, options);
20
21
  const result = spawnSyncCompat(parsed.command, parsed.args, parsed.options);
21
- result.error = result.error || verifyENOENTSync(result.status, parsed);
22
+ result.error = (_ref = result.error || verifyENOENTSync(result.status, parsed)) !== null && _ref !== void 0 ? _ref : undefined;
22
23
  return result;
23
24
  }
24
25
  // Main export
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/index.ts"],"sourcesContent":["/**\n * Minimal cross-spawn shim for Windows compatibility on legacy Node.js\n *\n * This replaces the bundled cross-spawn v6.0.5 (~1,950 lines) with a minimal\n * implementation (~200 lines) that uses external dependencies:\n * - which@^1.0.0 (command resolution)\n * - env-path-key@^1.0.0 (cross-platform PATH key detection)\n */\n\nimport type { ChildProcess, SpawnSyncReturns } from 'child_process';\nimport cp from 'child_process';\nimport { hookChildProcess, notFoundError, verifyENOENT, verifyENOENTSync } from './enoent.ts';\nimport { parse } from './parse.ts';\nimport spawnSyncCompat from './spawnSync.ts';\nimport type { Parsed, ShimSpawnOptions } from './types.ts';\n\nfunction spawn(command: string, args?: string[] | ShimSpawnOptions, options?: ShimSpawnOptions): ChildProcess {\n const parsed = parse(command, args, options);\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n hookChildProcess(spawned, parsed);\n return spawned;\n}\n\nfunction spawnSync(command: string, args?: string[] | ShimSpawnOptions, options?: ShimSpawnOptions): SpawnSyncReturns<Buffer> {\n const parsed = parse(command, args, options);\n const result = spawnSyncCompat(parsed.command, parsed.args, parsed.options) as SpawnSyncReturns<Buffer> & { error?: Error };\n result.error = (result.error || verifyENOENTSync(result.status as number, parsed)) as Error | undefined;\n return result;\n}\n\n// Main export\nexport default spawn;\n\n// Named exports matching cross-spawn's API\n// Internal APIs used by crossSpawn.ts\nexport { parse as _parse, spawn, spawnSync as sync };\nexport const _enoent = {\n hookChildProcess,\n verifyENOENT,\n verifyENOENTSync,\n notFoundError,\n};\n\n// Re-export types\nexport type { Parsed, ShimSpawnOptions };\n"],"names":["cp","hookChildProcess","notFoundError","verifyENOENT","verifyENOENTSync","parse","spawnSyncCompat","spawn","command","args","options","parsed","spawned","spawnSync","result","error","status","_parse","sync","_enoent"],"mappings":"AAAA;;;;;;;CAOC,GAGD,OAAOA,QAAQ,gBAAgB;AAC/B,SAASC,gBAAgB,EAAEC,aAAa,EAAEC,YAAY,EAAEC,gBAAgB,QAAQ,cAAc;AAC9F,SAASC,KAAK,QAAQ,aAAa;AACnC,OAAOC,qBAAqB,iBAAiB;AAG7C,SAASC,MAAMC,OAAe,EAAEC,IAAkC,EAAEC,OAA0B;IAC5F,MAAMC,SAASN,MAAMG,SAASC,MAAMC;IACpC,MAAME,UAAUZ,GAAGO,KAAK,CAACI,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IACpET,iBAAiBW,SAASD;IAC1B,OAAOC;AACT;AAEA,SAASC,UAAUL,OAAe,EAAEC,IAAkC,EAAEC,OAA0B;IAChG,MAAMC,SAASN,MAAMG,SAASC,MAAMC;IACpC,MAAMI,SAASR,gBAAgBK,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IAC1EI,OAAOC,KAAK,GAAID,OAAOC,KAAK,IAAIX,iBAAiBU,OAAOE,MAAM,EAAYL;IAC1E,OAAOG;AACT;AAEA,cAAc;AACd,eAAeP,MAAM;AAErB,2CAA2C;AAC3C,sCAAsC;AACtC,SAASF,SAASY,MAAM,EAAEV,KAAK,EAAEM,aAAaK,IAAI,GAAG;AACrD,OAAO,MAAMC,UAAU;IACrBlB;IACAE;IACAC;IACAF;AACF,EAAE"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/index.ts"],"sourcesContent":["/**\n * Minimal cross-spawn shim for Windows compatibility on legacy Node.js\n *\n * This replaces the bundled cross-spawn v6.0.5 (~1,950 lines) with a minimal\n * implementation (~200 lines) that uses external dependencies:\n * - which@^1.0.0 (command resolution)\n * - env-path-key@^1.0.0 (cross-platform PATH key detection)\n */\n\nimport type { ChildProcess, SpawnSyncReturns } from 'child_process';\nimport cp from 'child_process';\nimport { hookChildProcess, notFoundError, verifyENOENT, verifyENOENTSync } from './enoent.ts';\nimport { parse } from './parse.ts';\nimport spawnSyncCompat from './spawnSync.ts';\nimport type { Parsed, ShimSpawnOptions } from './types.ts';\n\nfunction spawn(command: string, args?: string[] | ShimSpawnOptions, options?: ShimSpawnOptions): ChildProcess {\n const parsed = parse(command, args, options);\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n hookChildProcess(spawned, parsed);\n return spawned;\n}\n\nfunction spawnSync(command: string, args?: string[] | ShimSpawnOptions, options?: ShimSpawnOptions): SpawnSyncReturns<Buffer> {\n const parsed = parse(command, args, options);\n const result = spawnSyncCompat(parsed.command, parsed.args, parsed.options) as SpawnSyncReturns<Buffer>;\n result.error = (result.error || verifyENOENTSync(result.status as number, parsed)) ?? undefined;\n return result;\n}\n\n// Main export\nexport default spawn;\n\n// Named exports matching cross-spawn's API\n// Internal APIs used by crossSpawn.ts\nexport { parse as _parse, spawn, spawnSync as sync };\nexport const _enoent = {\n hookChildProcess,\n verifyENOENT,\n verifyENOENTSync,\n notFoundError,\n};\n\n// Re-export types\nexport type { Parsed, ShimSpawnOptions };\n"],"names":["cp","hookChildProcess","notFoundError","verifyENOENT","verifyENOENTSync","parse","spawnSyncCompat","spawn","command","args","options","parsed","spawned","spawnSync","result","error","status","undefined","_parse","sync","_enoent"],"mappings":"AAAA;;;;;;;CAOC,GAGD,OAAOA,QAAQ,gBAAgB;AAC/B,SAASC,gBAAgB,EAAEC,aAAa,EAAEC,YAAY,EAAEC,gBAAgB,QAAQ,cAAc;AAC9F,SAASC,KAAK,QAAQ,aAAa;AACnC,OAAOC,qBAAqB,iBAAiB;AAG7C,SAASC,MAAMC,OAAe,EAAEC,IAAkC,EAAEC,OAA0B;IAC5F,MAAMC,SAASN,MAAMG,SAASC,MAAMC;IACpC,MAAME,UAAUZ,GAAGO,KAAK,CAACI,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IACpET,iBAAiBW,SAASD;IAC1B,OAAOC;AACT;AAEA,SAASC,UAAUL,OAAe,EAAEC,IAAkC,EAAEC,OAA0B;QAGhFI;IAFhB,MAAMH,SAASN,MAAMG,SAASC,MAAMC;IACpC,MAAMI,SAASR,gBAAgBK,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IAC1EI,OAAOC,KAAK,IAAID,OAAAA,OAAOC,KAAK,IAAIX,iBAAiBU,OAAOE,MAAM,EAAYL,qBAA1DG,kBAAAA,OAAsEG;IACtF,OAAOH;AACT;AAEA,cAAc;AACd,eAAeP,MAAM;AAErB,2CAA2C;AAC3C,sCAAsC;AACtC,SAASF,SAASa,MAAM,EAAEX,KAAK,EAAEM,aAAaM,IAAI,GAAG;AACrD,OAAO,MAAMC,UAAU;IACrBnB;IACAE;IACAC;IACAF;AACF,EAAE"}
@@ -13,14 +13,15 @@ const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
13
13
  const [major, minor] = process.versions.node.split('.').map(Number);
14
14
  const supportsShellOption = major >= 6 || major === 5 && minor >= 7 || major === 4 && minor >= 8;
15
15
  function detectShebang(parsed) {
16
- parsed.file = resolveCommand(parsed);
17
- const shebang = parsed.file && readShebang(parsed.file);
18
- if (shebang) {
19
- parsed.args.unshift(parsed.file);
16
+ const file = resolveCommand(parsed);
17
+ parsed.file = file;
18
+ const shebang = file && readShebang(file);
19
+ if (file && shebang) {
20
+ parsed.args.unshift(file);
20
21
  parsed.command = shebang;
21
22
  return resolveCommand(parsed);
22
23
  }
23
- return parsed.file;
24
+ return file;
24
25
  }
25
26
  function parseNonShell(parsed) {
26
27
  if (!isWindows) return parsed;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/parse.ts"],"sourcesContent":["/**\n * Command parsing for cross-platform spawn\n * Simplified from cross-spawn v6.0.5\n */\n\nimport path from 'path';\nimport { isWindows } from '../constants.ts';\nimport { escapeArgument, escapeCommand } from './escape.ts';\nimport { resolveCommand } from './resolve.ts';\nimport { readShebang } from './shebang.ts';\nimport type { Parsed, ShimSpawnOptions } from './types.ts';\n\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\n// Node ^4.8.0 || ^5.7.0 || >= 6.0.0 supports shell option natively\n// See: https://github.com/nodejs/node/pull/4598\nconst [major, minor] = process.versions.node.split('.').map(Number);\nconst supportsShellOption = major >= 6 || (major === 5 && minor >= 7) || (major === 4 && minor >= 8);\n\nfunction detectShebang(parsed: Parsed): string | null {\n parsed.file = resolveCommand(parsed);\n\n const shebang = parsed.file && readShebang(parsed.file);\n if (shebang) {\n parsed.args.unshift(parsed.file!);\n parsed.command = shebang;\n return resolveCommand(parsed);\n }\n\n return parsed.file;\n}\n\nfunction parseNonShell(parsed: Parsed): Parsed {\n if (!isWindows) return parsed;\n\n // Detect & add support for shebangs\n const commandFile = detectShebang(parsed);\n\n // We don't need a shell if the command filename is an executable\n const needsShell = !isExecutableRegExp.test(commandFile || '');\n\n if (parsed.options.forceShell || needsShell) {\n // Need to double escape meta chars if the command is a cmd-shim\n const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile || '');\n\n // Normalize posix paths into OS compatible paths\n parsed.command = path.normalize(parsed.command);\n\n // Escape command & arguments\n parsed.command = escapeCommand(parsed.command);\n parsed.args = parsed.args.map((arg) => escapeArgument(arg, needsDoubleEscapeMetaChars));\n\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.command = process.env.comspec || 'cmd.exe';\n parsed.options.windowsVerbatimArguments = true;\n }\n\n return parsed;\n}\n\nfunction parseShell(parsed: Parsed): Parsed {\n // If node supports the shell option, there's no need to mimic its behavior\n if (supportsShellOption) {\n return parsed;\n }\n\n // Mimic node shell option for older Node versions\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n if (isWindows) {\n parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.options.windowsVerbatimArguments = true;\n } else {\n if (typeof parsed.options.shell === 'string') {\n parsed.command = parsed.options.shell;\n } else if (process.platform === 'android') {\n parsed.command = '/system/bin/sh';\n } else {\n parsed.command = '/bin/sh';\n }\n parsed.args = ['-c', shellCommand];\n }\n\n return parsed;\n}\n\n// Handle NODE/npm_node_execpath env vars for node commands\nconst NODES = ['node', 'node.exe', 'node.cmd'];\n\nexport function parse(command: string, args?: string[] | ShimSpawnOptions | null, options?: ShimSpawnOptions): Parsed {\n options = typeof args && !Array.isArray(args) ? {} : ({ ...(options || {}) } as ShimSpawnOptions);\n args = typeof args && !Array.isArray(args) ? [] : (((args as string[]).slice(0) || []) as string[]);\n\n // Build parsed object with original command/args BEFORE any substitution\n const parsed: Parsed = {\n command: command,\n args,\n options,\n file: undefined,\n original: {\n command: command,\n args,\n },\n };\n\n // Substitute node command with NODE env var if set\n if (NODES.indexOf(path.basename(parsed.command).toLowerCase()) >= 0) {\n const env = options.env || process.env;\n parsed.command = env.NODE || env.npm_node_execpath || parsed.command;\n }\n\n return options.shell ? parseShell(parsed) : parseNonShell(parsed);\n}\n"],"names":["path","isWindows","escapeArgument","escapeCommand","resolveCommand","readShebang","isExecutableRegExp","isCmdShimRegExp","major","minor","process","versions","node","split","map","Number","supportsShellOption","detectShebang","parsed","file","shebang","args","unshift","command","parseNonShell","commandFile","needsShell","test","options","forceShell","needsDoubleEscapeMetaChars","normalize","arg","shellCommand","concat","join","env","comspec","windowsVerbatimArguments","parseShell","shell","platform","NODES","parse","Array","isArray","slice","undefined","original","indexOf","basename","toLowerCase","NODE","npm_node_execpath"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/parse.ts"],"sourcesContent":["/**\n * Command parsing for cross-platform spawn\n * Simplified from cross-spawn v6.0.5\n */\n\nimport path from 'path';\nimport { isWindows } from '../constants.ts';\nimport { escapeArgument, escapeCommand } from './escape.ts';\nimport { resolveCommand } from './resolve.ts';\nimport { readShebang } from './shebang.ts';\nimport type { Parsed, ShimSpawnOptions } from './types.ts';\n\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\n// Node ^4.8.0 || ^5.7.0 || >= 6.0.0 supports shell option natively\n// See: https://github.com/nodejs/node/pull/4598\nconst [major, minor] = process.versions.node.split('.').map(Number);\nconst supportsShellOption = major >= 6 || (major === 5 && minor >= 7) || (major === 4 && minor >= 8);\n\nfunction detectShebang(parsed: Parsed): string | null {\n const file = resolveCommand(parsed);\n parsed.file = file;\n\n const shebang = file && readShebang(file);\n if (file && shebang) {\n parsed.args.unshift(file);\n parsed.command = shebang;\n return resolveCommand(parsed);\n }\n\n return file;\n}\n\nfunction parseNonShell(parsed: Parsed): Parsed {\n if (!isWindows) return parsed;\n\n // Detect & add support for shebangs\n const commandFile = detectShebang(parsed);\n\n // We don't need a shell if the command filename is an executable\n const needsShell = !isExecutableRegExp.test(commandFile || '');\n\n if (parsed.options.forceShell || needsShell) {\n // Need to double escape meta chars if the command is a cmd-shim\n const needsDoubleEscapeMetaChars = isCmdShimRegExp.test(commandFile || '');\n\n // Normalize posix paths into OS compatible paths\n parsed.command = path.normalize(parsed.command);\n\n // Escape command & arguments\n parsed.command = escapeCommand(parsed.command);\n parsed.args = parsed.args.map((arg) => escapeArgument(arg, needsDoubleEscapeMetaChars));\n\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.command = process.env.comspec || 'cmd.exe';\n parsed.options.windowsVerbatimArguments = true;\n }\n\n return parsed;\n}\n\nfunction parseShell(parsed: Parsed): Parsed {\n // If node supports the shell option, there's no need to mimic its behavior\n if (supportsShellOption) {\n return parsed;\n }\n\n // Mimic node shell option for older Node versions\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n if (isWindows) {\n parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';\n parsed.args = ['/d', '/s', '/c', `\"${shellCommand}\"`];\n parsed.options.windowsVerbatimArguments = true;\n } else {\n if (typeof parsed.options.shell === 'string') {\n parsed.command = parsed.options.shell;\n } else if (process.platform === 'android') {\n parsed.command = '/system/bin/sh';\n } else {\n parsed.command = '/bin/sh';\n }\n parsed.args = ['-c', shellCommand];\n }\n\n return parsed;\n}\n\n// Handle NODE/npm_node_execpath env vars for node commands\nconst NODES = ['node', 'node.exe', 'node.cmd'];\n\nexport function parse(command: string, args?: string[] | ShimSpawnOptions | null, options?: ShimSpawnOptions): Parsed {\n options = typeof args && !Array.isArray(args) ? {} : ({ ...(options || {}) } as ShimSpawnOptions);\n args = typeof args && !Array.isArray(args) ? [] : (((args as string[]).slice(0) || []) as string[]);\n\n // Build parsed object with original command/args BEFORE any substitution\n const parsed: Parsed = {\n command: command,\n args,\n options,\n file: undefined,\n original: {\n command: command,\n args,\n },\n };\n\n // Substitute node command with NODE env var if set\n if (NODES.indexOf(path.basename(parsed.command).toLowerCase()) >= 0) {\n const env = options.env || process.env;\n parsed.command = env.NODE || env.npm_node_execpath || parsed.command;\n }\n\n return options.shell ? parseShell(parsed) : parseNonShell(parsed);\n}\n"],"names":["path","isWindows","escapeArgument","escapeCommand","resolveCommand","readShebang","isExecutableRegExp","isCmdShimRegExp","major","minor","process","versions","node","split","map","Number","supportsShellOption","detectShebang","parsed","file","shebang","args","unshift","command","parseNonShell","commandFile","needsShell","test","options","forceShell","needsDoubleEscapeMetaChars","normalize","arg","shellCommand","concat","join","env","comspec","windowsVerbatimArguments","parseShell","shell","platform","NODES","parse","Array","isArray","slice","undefined","original","indexOf","basename","toLowerCase","NODE","npm_node_execpath"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cross-spawn-cb",
3
- "version": "3.2.2",
3
+ "version": "3.2.3",
4
4
  "description": "Cross spawn with a completion callback",
5
5
  "keywords": [
6
6
  "cross-spawn",