cross-spawn-cb 2.5.0 → 2.5.1

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.
@@ -1 +1,2 @@
1
1
  export declare const spawnKeys: string[];
2
+ export declare const isWindows: boolean;
@@ -1 +1,2 @@
1
1
  export declare const spawnKeys: string[];
2
+ export declare const isWindows: boolean;
@@ -2,9 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "spawnKeys", {
6
- enumerable: true,
7
- get: function() {
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get isWindows () {
13
+ return isWindows;
14
+ },
15
+ get spawnKeys () {
8
16
  return spawnKeys;
9
17
  }
10
18
  });
@@ -16,4 +24,5 @@ var spawnKeys = [
16
24
  'stderr',
17
25
  'output'
18
26
  ];
27
+ var isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);
19
28
  /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/constants.ts"],"sourcesContent":["export const spawnKeys = ['pid', 'status', 'signal', 'stdout', 'stderr', 'output'];\n"],"names":["spawnKeys"],"mappings":";;;;+BAAaA;;;eAAAA;;;AAAN,IAAMA,YAAY;IAAC;IAAO;IAAU;IAAU;IAAU;IAAU;CAAS"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/constants.ts"],"sourcesContent":["export const spawnKeys = ['pid', 'status', 'signal', 'stdout', 'stderr', 'output'];\n\nexport const isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\n"],"names":["isWindows","spawnKeys","process","platform","test","env","OSTYPE"],"mappings":";;;;;;;;;;;QAEaA;eAAAA;;QAFAC;eAAAA;;;AAAN,IAAMA,YAAY;IAAC;IAAO;IAAU;IAAU;IAAU;IAAU;CAAS;AAE3E,IAAMD,YAAYE,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM"}
@@ -25,6 +25,7 @@ _export(exports, {
25
25
  return verifyENOENTSync;
26
26
  }
27
27
  });
28
+ var _constantsts = require("../constants.js");
28
29
  function _array_like_to_array(arr, len) {
29
30
  if (len == null || len > arr.length) len = arr.length;
30
31
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
@@ -50,7 +51,6 @@ function _unsupported_iterable_to_array(o, minLen) {
50
51
  if (n === "Map" || n === "Set") return Array.from(n);
51
52
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
52
53
  }
53
- var isWin = process.platform === 'win32';
54
54
  function notFoundError(original, syscall) {
55
55
  var err = new Error("".concat(syscall, " ").concat(original.command, " ENOENT"));
56
56
  err.code = 'ENOENT';
@@ -61,7 +61,7 @@ function notFoundError(original, syscall) {
61
61
  return err;
62
62
  }
63
63
  function hookChildProcess(cp, parsed) {
64
- if (!isWin) return;
64
+ if (!_constantsts.isWindows) return;
65
65
  var originalEmit = cp.emit.bind(cp);
66
66
  cp.emit = function(name) {
67
67
  for(var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
@@ -79,13 +79,13 @@ function hookChildProcess(cp, parsed) {
79
79
  };
80
80
  }
81
81
  function verifyENOENT(status, parsed) {
82
- if (isWin && status === 1 && !parsed.file) {
82
+ if (_constantsts.isWindows && status === 1 && !parsed.file) {
83
83
  return notFoundError(parsed.original, 'spawn');
84
84
  }
85
85
  return null;
86
86
  }
87
87
  function verifyENOENTSync(status, parsed) {
88
- if (isWin && status === 1 && !parsed.file) {
88
+ if (_constantsts.isWindows && status === 1 && !parsed.file) {
89
89
  return notFoundError(parsed.original, 'spawnSync');
90
90
  }
91
91
  return null;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/enoent.ts"],"sourcesContent":["/**\n * ENOENT error handling for Windows\n * Extracted from cross-spawn v6.0.5\n */\n\nimport type { ChildProcess } from 'child_process';\nimport type { ENOENTError, Parsed } from './types.ts';\n\nconst isWin = process.platform === 'win32';\n\nexport function notFoundError(original: Parsed['original'], syscall: string): ENOENTError {\n const err = new Error(`${syscall} ${original.command} ENOENT`) as ENOENTError;\n err.code = 'ENOENT';\n err.errno = 'ENOENT';\n err.syscall = `${syscall} ${original.command}`;\n err.path = original.command;\n err.spawnargs = original.args;\n return err;\n}\n\nexport function hookChildProcess(cp: ChildProcess, parsed: Parsed): void {\n if (!isWin) return;\n\n const originalEmit = cp.emit.bind(cp);\n cp.emit = (name: string | symbol, ...args: unknown[]): boolean => {\n if (name === 'exit') {\n const err = verifyENOENT(args[0] as number, parsed);\n if (err) {\n return originalEmit('error', err);\n }\n }\n return originalEmit(name, ...args);\n };\n}\n\nexport function verifyENOENT(status: number, parsed: Parsed): ENOENTError | null {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawn');\n }\n return null;\n}\n\nexport function verifyENOENTSync(status: number, parsed: Parsed): ENOENTError | null {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawnSync');\n }\n return null;\n}\n"],"names":["hookChildProcess","notFoundError","verifyENOENT","verifyENOENTSync","isWin","process","platform","original","syscall","err","Error","command","code","errno","path","spawnargs","args","cp","parsed","originalEmit","emit","bind","name","status","file"],"mappings":"AAAA;;;CAGC;;;;;;;;;;;QAiBeA;eAAAA;;QAVAC;eAAAA;;QAyBAC;eAAAA;;QAOAC;eAAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAlChB,IAAMC,QAAQC,QAAQC,QAAQ,KAAK;AAE5B,SAASL,cAAcM,QAA4B,EAAEC,OAAe;IACzE,IAAMC,MAAM,IAAIC,MAAM,AAAC,GAAaH,OAAXC,SAAQ,KAAoB,OAAjBD,SAASI,OAAO,EAAC;IACrDF,IAAIG,IAAI,GAAG;IACXH,IAAII,KAAK,GAAG;IACZJ,IAAID,OAAO,GAAG,AAAC,GAAaD,OAAXC,SAAQ,KAAoB,OAAjBD,SAASI,OAAO;IAC5CF,IAAIK,IAAI,GAAGP,SAASI,OAAO;IAC3BF,IAAIM,SAAS,GAAGR,SAASS,IAAI;IAC7B,OAAOP;AACT;AAEO,SAAST,iBAAiBiB,EAAgB,EAAEC,MAAc;IAC/D,IAAI,CAACd,OAAO;IAEZ,IAAMe,eAAeF,GAAGG,IAAI,CAACC,IAAI,CAACJ;IAClCA,GAAGG,IAAI,GAAG,SAACE;yCAA0BN;YAAAA;;QACnC,IAAIM,SAAS,QAAQ;YACnB,IAAMb,MAAMP,aAAac,IAAI,CAAC,EAAE,EAAYE;YAC5C,IAAIT,KAAK;gBACP,OAAOU,aAAa,SAASV;YAC/B;QACF;QACA,OAAOU,mBAAAA,KAAAA,GAAAA;YAAaG;SAAc,CAA3BH,OAAmB,qBAAGH;IAC/B;AACF;AAEO,SAASd,aAAaqB,MAAc,EAAEL,MAAc;IACzD,IAAId,SAASmB,WAAW,KAAK,CAACL,OAAOM,IAAI,EAAE;QACzC,OAAOvB,cAAciB,OAAOX,QAAQ,EAAE;IACxC;IACA,OAAO;AACT;AAEO,SAASJ,iBAAiBoB,MAAc,EAAEL,MAAc;IAC7D,IAAId,SAASmB,WAAW,KAAK,CAACL,OAAOM,IAAI,EAAE;QACzC,OAAOvB,cAAciB,OAAOX,QAAQ,EAAE;IACxC;IACA,OAAO;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/enoent.ts"],"sourcesContent":["/**\n * ENOENT error handling for Windows\n * Extracted from cross-spawn v6.0.5\n */\n\nimport type { ChildProcess } from 'child_process';\nimport { isWindows } from '../constants.ts';\nimport type { ENOENTError, Parsed } from './types.ts';\n\nexport function notFoundError(original: Parsed['original'], syscall: string): ENOENTError {\n const err = new Error(`${syscall} ${original.command} ENOENT`) as ENOENTError;\n err.code = 'ENOENT';\n err.errno = 'ENOENT';\n err.syscall = `${syscall} ${original.command}`;\n err.path = original.command;\n err.spawnargs = original.args;\n return err;\n}\n\nexport function hookChildProcess(cp: ChildProcess, parsed: Parsed): void {\n if (!isWindows) return;\n\n const originalEmit = cp.emit.bind(cp);\n cp.emit = (name: string | symbol, ...args: unknown[]): boolean => {\n if (name === 'exit') {\n const err = verifyENOENT(args[0] as number, parsed);\n if (err) {\n return originalEmit('error', err);\n }\n }\n return originalEmit(name, ...args);\n };\n}\n\nexport function verifyENOENT(status: number, parsed: Parsed): ENOENTError | null {\n if (isWindows && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawn');\n }\n return null;\n}\n\nexport function verifyENOENTSync(status: number, parsed: Parsed): ENOENTError | null {\n if (isWindows && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawnSync');\n }\n return null;\n}\n"],"names":["hookChildProcess","notFoundError","verifyENOENT","verifyENOENTSync","original","syscall","err","Error","command","code","errno","path","spawnargs","args","cp","parsed","isWindows","originalEmit","emit","bind","name","status","file"],"mappings":"AAAA;;;CAGC;;;;;;;;;;;QAgBeA;eAAAA;;QAVAC;eAAAA;;QAyBAC;eAAAA;;QAOAC;eAAAA;;;2BAnCU;;;;;;;;;;;;;;;;;;;;;;;;;;AAGnB,SAASF,cAAcG,QAA4B,EAAEC,OAAe;IACzE,IAAMC,MAAM,IAAIC,MAAM,AAAC,GAAaH,OAAXC,SAAQ,KAAoB,OAAjBD,SAASI,OAAO,EAAC;IACrDF,IAAIG,IAAI,GAAG;IACXH,IAAII,KAAK,GAAG;IACZJ,IAAID,OAAO,GAAG,AAAC,GAAaD,OAAXC,SAAQ,KAAoB,OAAjBD,SAASI,OAAO;IAC5CF,IAAIK,IAAI,GAAGP,SAASI,OAAO;IAC3BF,IAAIM,SAAS,GAAGR,SAASS,IAAI;IAC7B,OAAOP;AACT;AAEO,SAASN,iBAAiBc,EAAgB,EAAEC,MAAc;IAC/D,IAAI,CAACC,sBAAS,EAAE;IAEhB,IAAMC,eAAeH,GAAGI,IAAI,CAACC,IAAI,CAACL;IAClCA,GAAGI,IAAI,GAAG,SAACE;yCAA0BP;YAAAA;;QACnC,IAAIO,SAAS,QAAQ;YACnB,IAAMd,MAAMJ,aAAaW,IAAI,CAAC,EAAE,EAAYE;YAC5C,IAAIT,KAAK;gBACP,OAAOW,aAAa,SAASX;YAC/B;QACF;QACA,OAAOW,mBAAAA,KAAAA,GAAAA;YAAaG;SAAc,CAA3BH,OAAmB,qBAAGJ;IAC/B;AACF;AAEO,SAASX,aAAamB,MAAc,EAAEN,MAAc;IACzD,IAAIC,sBAAS,IAAIK,WAAW,KAAK,CAACN,OAAOO,IAAI,EAAE;QAC7C,OAAOrB,cAAcc,OAAOX,QAAQ,EAAE;IACxC;IACA,OAAO;AACT;AAEO,SAASD,iBAAiBkB,MAAc,EAAEN,MAAc;IAC7D,IAAIC,sBAAS,IAAIK,WAAW,KAAK,CAACN,OAAOO,IAAI,EAAE;QAC7C,OAAOrB,cAAcc,OAAOX,QAAQ,EAAE;IACxC;IACA,OAAO;AACT"}
@@ -13,6 +13,7 @@ Object.defineProperty(exports, "parse", {
13
13
  });
14
14
  var _path = /*#__PURE__*/ _interop_require_default(require("path"));
15
15
  var _compatts = require("../compat.js");
16
+ var _constantsts = require("../constants.js");
16
17
  var _escapets = require("./escape.js");
17
18
  var _resolvets = require("./resolve.js");
18
19
  var _shebangts = require("./shebang.js");
@@ -21,7 +22,6 @@ function _interop_require_default(obj) {
21
22
  default: obj
22
23
  };
23
24
  }
24
- var isWin = process.platform === 'win32';
25
25
  var isExecutableRegExp = /\.(?:com|exe)$/i;
26
26
  var isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
27
27
  function detectShebang(parsed) {
@@ -35,7 +35,7 @@ function detectShebang(parsed) {
35
35
  return parsed.file;
36
36
  }
37
37
  function parseNonShell(parsed) {
38
- if (!isWin) return parsed;
38
+ if (!_constantsts.isWindows) return parsed;
39
39
  // Detect & add support for shebangs
40
40
  var commandFile = detectShebang(parsed);
41
41
  // We don't need a shell if the command filename is an executable
@@ -69,7 +69,7 @@ function parseShell(parsed) {
69
69
  var shellCommand = [
70
70
  parsed.command
71
71
  ].concat(parsed.args).join(' ');
72
- if (isWin) {
72
+ if (_constantsts.isWindows) {
73
73
  parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';
74
74
  parsed.args = [
75
75
  '/d',
@@ -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 { objectAssign } from '../compat.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 isWin = process.platform === 'win32';\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\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 (!isWin) 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 // Mimic node shell option for older Node versions\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n if (isWin) {\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\nexport function parse(command: string, args?: string[] | ShimSpawnOptions | null, options?: ShimSpawnOptions): Parsed {\n // Normalize arguments\n let argsArray: string[];\n let opts: ShimSpawnOptions;\n\n if (args && !Array.isArray(args)) {\n // args is actually options\n argsArray = [];\n opts = objectAssign({}, args);\n } else {\n argsArray = args ? (args as string[]).slice(0) : [];\n opts = objectAssign({}, options || {});\n }\n\n const parsed: Parsed = {\n command: command,\n args: argsArray,\n options: opts,\n file: undefined,\n original: {\n command: command,\n args: argsArray,\n },\n };\n\n return opts.shell ? parseShell(parsed) : parseNonShell(parsed);\n}\n"],"names":["parse","isWin","process","platform","isExecutableRegExp","isCmdShimRegExp","detectShebang","parsed","file","resolveCommand","shebang","readShebang","args","unshift","command","parseNonShell","commandFile","needsShell","test","options","forceShell","needsDoubleEscapeMetaChars","path","normalize","escapeCommand","map","arg","escapeArgument","shellCommand","concat","join","env","comspec","windowsVerbatimArguments","parseShell","shell","argsArray","opts","Array","isArray","objectAssign","slice","undefined","original"],"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 { objectAssign } from '../compat.ts';\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\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 // 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\nexport function parse(command: string, args?: string[] | ShimSpawnOptions | null, options?: ShimSpawnOptions): Parsed {\n // Normalize arguments\n let argsArray: string[];\n let opts: ShimSpawnOptions;\n\n if (args && !Array.isArray(args)) {\n // args is actually options\n argsArray = [];\n opts = objectAssign({}, args);\n } else {\n argsArray = args ? (args as string[]).slice(0) : [];\n opts = objectAssign({}, options || {});\n }\n\n const parsed: Parsed = {\n command: command,\n args: argsArray,\n options: opts,\n file: undefined,\n original: {\n command: command,\n args: argsArray,\n },\n };\n\n return opts.shell ? parseShell(parsed) : parseNonShell(parsed);\n}\n"],"names":["parse","isExecutableRegExp","isCmdShimRegExp","detectShebang","parsed","file","resolveCommand","shebang","readShebang","args","unshift","command","parseNonShell","isWindows","commandFile","needsShell","test","options","forceShell","needsDoubleEscapeMetaChars","path","normalize","escapeCommand","map","arg","escapeArgument","shellCommand","concat","join","process","env","comspec","windowsVerbatimArguments","parseShell","shell","platform","argsArray","opts","Array","isArray","objectAssign","slice","undefined","original"],"mappings":"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"}
@@ -14,17 +14,33 @@ Object.defineProperty(exports, "resolveCommand", {
14
14
  var _envpathkey = /*#__PURE__*/ _interop_require_default(require("env-path-key"));
15
15
  var _path = /*#__PURE__*/ _interop_require_default(require("path"));
16
16
  var _which = /*#__PURE__*/ _interop_require_default(require("which"));
17
+ var _constantsts = require("../constants.js");
17
18
  function _interop_require_default(obj) {
18
19
  return obj && obj.__esModule ? obj : {
19
20
  default: obj
20
21
  };
21
22
  }
22
- var isWin = process.platform === 'win32';
23
- function resolveCommand(parsed) {
23
+ var pathDelimiter = _constantsts.isWindows ? ';' : ':';
24
+ var NODES = [
25
+ 'node',
26
+ 'node.exe',
27
+ 'node.cmd'
28
+ ];
29
+ function resolveCommandAttempt(parsed, withoutPathExt) {
24
30
  var command = parsed.command;
25
31
  var options = parsed.options;
32
+ var env = options.env || process.env;
26
33
  var cwd = process.cwd();
27
34
  var hasCustomCwd = options.cwd != null;
35
+ // Handle NODE/npm_node_execpath env vars for node commands
36
+ // This is needed because shebang detection may change the command to 'node'
37
+ // after the initial NODE env check in crossSpawn.ts has already passed
38
+ if (NODES.indexOf(_path.default.basename(command).toLowerCase()) >= 0) {
39
+ var nodeFromEnv = env.NODE || env.npm_node_execpath;
40
+ if (nodeFromEnv) {
41
+ return nodeFromEnv;
42
+ }
43
+ }
28
44
  // If a custom cwd was specified, we need to change the process cwd
29
45
  // because which will do stat calls but does not support a custom cwd
30
46
  if (hasCustomCwd) {
@@ -40,7 +56,9 @@ function resolveCommand(parsed) {
40
56
  try {
41
57
  resolved = _which.default.sync(command, {
42
58
  path: (options.env || process.env)[pathKey],
43
- pathExt: isWin ? undefined : _path.default.delimiter
59
+ // On Windows: undefined uses PATHEXT, pathDelimiter bypasses it
60
+ // withoutPathExt fallback is needed to find files without extensions
61
+ pathExt: withoutPathExt ? pathDelimiter : undefined
44
62
  });
45
63
  } catch (_e) {
46
64
  /* not found */ } finally{
@@ -54,4 +72,7 @@ function resolveCommand(parsed) {
54
72
  }
55
73
  return resolved;
56
74
  }
75
+ function resolveCommand(parsed) {
76
+ return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);
77
+ }
57
78
  /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/resolve.ts"],"sourcesContent":["/**\n * Command resolution using which\n * Simplified from cross-spawn v6.0.5\n */\n\nimport envPathKey from 'env-path-key';\nimport path from 'path';\nimport which from 'which';\nimport type { Parsed } from './types.ts';\n\nconst isWin = process.platform === 'win32';\n\nexport function resolveCommand(parsed: Parsed): string | null {\n const command = parsed.command;\n const options = parsed.options;\n const cwd = process.cwd();\n const hasCustomCwd = options.cwd != null;\n\n // If a custom cwd was specified, we need to change the process cwd\n // because which will do stat calls but does not support a custom cwd\n if (hasCustomCwd) {\n try {\n process.chdir(options.cwd as string);\n } catch (_err) {\n /* ignore */\n }\n }\n\n let resolved: string | null = null;\n const pathKey = envPathKey({ env: options.env || process.env }) || 'PATH';\n\n try {\n resolved = which.sync(command, {\n path: (options.env || process.env)[pathKey],\n pathExt: isWin ? undefined : path.delimiter, // On non-Windows, don't use PATHEXT\n });\n } catch (_e) {\n /* not found */\n } finally {\n if (hasCustomCwd) {\n process.chdir(cwd);\n }\n }\n\n // Ensure absolute path\n if (resolved) {\n resolved = path.resolve(hasCustomCwd ? (options.cwd as string) : '', resolved);\n }\n\n return resolved;\n}\n"],"names":["resolveCommand","isWin","process","platform","parsed","command","options","cwd","hasCustomCwd","chdir","_err","resolved","pathKey","envPathKey","env","which","sync","path","pathExt","undefined","delimiter","_e","resolve"],"mappings":"AAAA;;;CAGC;;;;+BASeA;;;eAAAA;;;iEAPO;2DACN;4DACC;;;;;;AAGlB,IAAMC,QAAQC,QAAQC,QAAQ,KAAK;AAE5B,SAASH,eAAeI,MAAc;IAC3C,IAAMC,UAAUD,OAAOC,OAAO;IAC9B,IAAMC,UAAUF,OAAOE,OAAO;IAC9B,IAAMC,MAAML,QAAQK,GAAG;IACvB,IAAMC,eAAeF,QAAQC,GAAG,IAAI;IAEpC,mEAAmE;IACnE,qEAAqE;IACrE,IAAIC,cAAc;QAChB,IAAI;YACFN,QAAQO,KAAK,CAACH,QAAQC,GAAG;QAC3B,EAAE,OAAOG,MAAM;QACb,UAAU,GACZ;IACF;IAEA,IAAIC,WAA0B;IAC9B,IAAMC,UAAUC,IAAAA,mBAAU,EAAC;QAAEC,KAAKR,QAAQQ,GAAG,IAAIZ,QAAQY,GAAG;IAAC,MAAM;IAEnE,IAAI;QACFH,WAAWI,cAAK,CAACC,IAAI,CAACX,SAAS;YAC7BY,MAAM,AAACX,CAAAA,QAAQQ,GAAG,IAAIZ,QAAQY,GAAG,AAAD,CAAE,CAACF,QAAQ;YAC3CM,SAASjB,QAAQkB,YAAYF,aAAI,CAACG,SAAS;QAC7C;IACF,EAAE,OAAOC,IAAI;IACX,aAAa,GACf,SAAU;QACR,IAAIb,cAAc;YAChBN,QAAQO,KAAK,CAACF;QAChB;IACF;IAEA,uBAAuB;IACvB,IAAII,UAAU;QACZA,WAAWM,aAAI,CAACK,OAAO,CAACd,eAAgBF,QAAQC,GAAG,GAAc,IAAII;IACvE;IAEA,OAAOA;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/resolve.ts"],"sourcesContent":["/**\n * Command resolution using which\n * Simplified from cross-spawn v6.0.5\n */\n\nimport envPathKey from 'env-path-key';\nimport path from 'path';\nimport which from 'which';\nimport { isWindows } from '../constants.ts';\nimport type { Parsed } from './types.ts';\n\nconst pathDelimiter = isWindows ? ';' : ':';\nconst NODES = ['node', 'node.exe', 'node.cmd'];\n\nfunction resolveCommandAttempt(parsed: Parsed, withoutPathExt?: boolean): string | null {\n const command = parsed.command;\n const options = parsed.options;\n const env = options.env || process.env;\n const cwd = process.cwd();\n const hasCustomCwd = options.cwd != null;\n\n // Handle NODE/npm_node_execpath env vars for node commands\n // This is needed because shebang detection may change the command to 'node'\n // after the initial NODE env check in crossSpawn.ts has already passed\n if (NODES.indexOf(path.basename(command).toLowerCase()) >= 0) {\n const nodeFromEnv = env.NODE || env.npm_node_execpath;\n if (nodeFromEnv) {\n return nodeFromEnv;\n }\n }\n\n // If a custom cwd was specified, we need to change the process cwd\n // because which will do stat calls but does not support a custom cwd\n if (hasCustomCwd) {\n try {\n process.chdir(options.cwd as string);\n } catch (_err) {\n /* ignore */\n }\n }\n\n let resolved: string | null = null;\n const pathKey = envPathKey({ env: options.env || process.env }) || 'PATH';\n\n try {\n resolved = which.sync(command, {\n path: (options.env || process.env)[pathKey],\n // On Windows: undefined uses PATHEXT, pathDelimiter bypasses it\n // withoutPathExt fallback is needed to find files without extensions\n pathExt: withoutPathExt ? pathDelimiter : undefined,\n });\n } catch (_e) {\n /* not found */\n } finally {\n if (hasCustomCwd) {\n process.chdir(cwd);\n }\n }\n\n // Ensure absolute path\n if (resolved) {\n resolved = path.resolve(hasCustomCwd ? (options.cwd as string) : '', resolved);\n }\n\n return resolved;\n}\n\n// Try twice: first with PATHEXT (finds .cmd/.bat/.exe), then without (finds extensionless files)\nexport function resolveCommand(parsed: Parsed): string | null {\n return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);\n}\n"],"names":["resolveCommand","pathDelimiter","isWindows","NODES","resolveCommandAttempt","parsed","withoutPathExt","command","options","env","process","cwd","hasCustomCwd","indexOf","path","basename","toLowerCase","nodeFromEnv","NODE","npm_node_execpath","chdir","_err","resolved","pathKey","envPathKey","which","sync","pathExt","undefined","_e","resolve"],"mappings":"AAAA;;;CAGC;;;;+BAiEeA;;;eAAAA;;;iEA/DO;2DACN;4DACC;2BACQ;;;;;;AAG1B,IAAMC,gBAAgBC,sBAAS,GAAG,MAAM;AACxC,IAAMC,QAAQ;IAAC;IAAQ;IAAY;CAAW;AAE9C,SAASC,sBAAsBC,MAAc,EAAEC,cAAwB;IACrE,IAAMC,UAAUF,OAAOE,OAAO;IAC9B,IAAMC,UAAUH,OAAOG,OAAO;IAC9B,IAAMC,MAAMD,QAAQC,GAAG,IAAIC,QAAQD,GAAG;IACtC,IAAME,MAAMD,QAAQC,GAAG;IACvB,IAAMC,eAAeJ,QAAQG,GAAG,IAAI;IAEpC,2DAA2D;IAC3D,4EAA4E;IAC5E,uEAAuE;IACvE,IAAIR,MAAMU,OAAO,CAACC,aAAI,CAACC,QAAQ,CAACR,SAASS,WAAW,OAAO,GAAG;QAC5D,IAAMC,cAAcR,IAAIS,IAAI,IAAIT,IAAIU,iBAAiB;QACrD,IAAIF,aAAa;YACf,OAAOA;QACT;IACF;IAEA,mEAAmE;IACnE,qEAAqE;IACrE,IAAIL,cAAc;QAChB,IAAI;YACFF,QAAQU,KAAK,CAACZ,QAAQG,GAAG;QAC3B,EAAE,OAAOU,MAAM;QACb,UAAU,GACZ;IACF;IAEA,IAAIC,WAA0B;IAC9B,IAAMC,UAAUC,IAAAA,mBAAU,EAAC;QAAEf,KAAKD,QAAQC,GAAG,IAAIC,QAAQD,GAAG;IAAC,MAAM;IAEnE,IAAI;QACFa,WAAWG,cAAK,CAACC,IAAI,CAACnB,SAAS;YAC7BO,MAAM,AAACN,CAAAA,QAAQC,GAAG,IAAIC,QAAQD,GAAG,AAAD,CAAE,CAACc,QAAQ;YAC3C,gEAAgE;YAChE,qEAAqE;YACrEI,SAASrB,iBAAiBL,gBAAgB2B;QAC5C;IACF,EAAE,OAAOC,IAAI;IACX,aAAa,GACf,SAAU;QACR,IAAIjB,cAAc;YAChBF,QAAQU,KAAK,CAACT;QAChB;IACF;IAEA,uBAAuB;IACvB,IAAIW,UAAU;QACZA,WAAWR,aAAI,CAACgB,OAAO,CAAClB,eAAgBJ,QAAQG,GAAG,GAAc,IAAIW;IACvE;IAEA,OAAOA;AACT;AAGO,SAAStB,eAAeK,MAAc;IAC3C,OAAOD,sBAAsBC,WAAWD,sBAAsBC,QAAQ;AACxE"}
@@ -1 +1,2 @@
1
1
  export declare const spawnKeys: string[];
2
+ export declare const isWindows: boolean;
@@ -6,3 +6,4 @@ export const spawnKeys = [
6
6
  'stderr',
7
7
  'output'
8
8
  ];
9
+ export const isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/constants.ts"],"sourcesContent":["export const spawnKeys = ['pid', 'status', 'signal', 'stdout', 'stderr', 'output'];\n"],"names":["spawnKeys"],"mappings":"AAAA,OAAO,MAAMA,YAAY;IAAC;IAAO;IAAU;IAAU;IAAU;IAAU;CAAS,CAAC"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/constants.ts"],"sourcesContent":["export const spawnKeys = ['pid', 'status', 'signal', 'stdout', 'stderr', 'output'];\n\nexport const isWindows = process.platform === 'win32' || /^(msys|cygwin)$/.test(process.env.OSTYPE);\n"],"names":["spawnKeys","isWindows","process","platform","test","env","OSTYPE"],"mappings":"AAAA,OAAO,MAAMA,YAAY;IAAC;IAAO;IAAU;IAAU;IAAU;IAAU;CAAS,CAAC;AAEnF,OAAO,MAAMC,YAAYC,QAAQC,QAAQ,KAAK,WAAW,kBAAkBC,IAAI,CAACF,QAAQG,GAAG,CAACC,MAAM,EAAE"}
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * ENOENT error handling for Windows
3
3
  * Extracted from cross-spawn v6.0.5
4
- */ const isWin = process.platform === 'win32';
4
+ */ import { isWindows } from '../constants.js';
5
5
  export function notFoundError(original, syscall) {
6
6
  const err = new Error(`${syscall} ${original.command} ENOENT`);
7
7
  err.code = 'ENOENT';
@@ -12,7 +12,7 @@ export function notFoundError(original, syscall) {
12
12
  return err;
13
13
  }
14
14
  export function hookChildProcess(cp, parsed) {
15
- if (!isWin) return;
15
+ if (!isWindows) return;
16
16
  const originalEmit = cp.emit.bind(cp);
17
17
  cp.emit = (name, ...args)=>{
18
18
  if (name === 'exit') {
@@ -25,13 +25,13 @@ export function hookChildProcess(cp, parsed) {
25
25
  };
26
26
  }
27
27
  export function verifyENOENT(status, parsed) {
28
- if (isWin && status === 1 && !parsed.file) {
28
+ if (isWindows && status === 1 && !parsed.file) {
29
29
  return notFoundError(parsed.original, 'spawn');
30
30
  }
31
31
  return null;
32
32
  }
33
33
  export function verifyENOENTSync(status, parsed) {
34
- if (isWin && status === 1 && !parsed.file) {
34
+ if (isWindows && status === 1 && !parsed.file) {
35
35
  return notFoundError(parsed.original, 'spawnSync');
36
36
  }
37
37
  return null;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/enoent.ts"],"sourcesContent":["/**\n * ENOENT error handling for Windows\n * Extracted from cross-spawn v6.0.5\n */\n\nimport type { ChildProcess } from 'child_process';\nimport type { ENOENTError, Parsed } from './types.ts';\n\nconst isWin = process.platform === 'win32';\n\nexport function notFoundError(original: Parsed['original'], syscall: string): ENOENTError {\n const err = new Error(`${syscall} ${original.command} ENOENT`) as ENOENTError;\n err.code = 'ENOENT';\n err.errno = 'ENOENT';\n err.syscall = `${syscall} ${original.command}`;\n err.path = original.command;\n err.spawnargs = original.args;\n return err;\n}\n\nexport function hookChildProcess(cp: ChildProcess, parsed: Parsed): void {\n if (!isWin) return;\n\n const originalEmit = cp.emit.bind(cp);\n cp.emit = (name: string | symbol, ...args: unknown[]): boolean => {\n if (name === 'exit') {\n const err = verifyENOENT(args[0] as number, parsed);\n if (err) {\n return originalEmit('error', err);\n }\n }\n return originalEmit(name, ...args);\n };\n}\n\nexport function verifyENOENT(status: number, parsed: Parsed): ENOENTError | null {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawn');\n }\n return null;\n}\n\nexport function verifyENOENTSync(status: number, parsed: Parsed): ENOENTError | null {\n if (isWin && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawnSync');\n }\n return null;\n}\n"],"names":["isWin","process","platform","notFoundError","original","syscall","err","Error","command","code","errno","path","spawnargs","args","hookChildProcess","cp","parsed","originalEmit","emit","bind","name","verifyENOENT","status","file","verifyENOENTSync"],"mappings":"AAAA;;;CAGC,GAKD,MAAMA,QAAQC,QAAQC,QAAQ,KAAK;AAEnC,OAAO,SAASC,cAAcC,QAA4B,EAAEC,OAAe;IACzE,MAAMC,MAAM,IAAIC,MAAM,GAAGF,QAAQ,CAAC,EAAED,SAASI,OAAO,CAAC,OAAO,CAAC;IAC7DF,IAAIG,IAAI,GAAG;IACXH,IAAII,KAAK,GAAG;IACZJ,IAAID,OAAO,GAAG,GAAGA,QAAQ,CAAC,EAAED,SAASI,OAAO,EAAE;IAC9CF,IAAIK,IAAI,GAAGP,SAASI,OAAO;IAC3BF,IAAIM,SAAS,GAAGR,SAASS,IAAI;IAC7B,OAAOP;AACT;AAEA,OAAO,SAASQ,iBAAiBC,EAAgB,EAAEC,MAAc;IAC/D,IAAI,CAAChB,OAAO;IAEZ,MAAMiB,eAAeF,GAAGG,IAAI,CAACC,IAAI,CAACJ;IAClCA,GAAGG,IAAI,GAAG,CAACE,MAAuB,GAAGP;QACnC,IAAIO,SAAS,QAAQ;YACnB,MAAMd,MAAMe,aAAaR,IAAI,CAAC,EAAE,EAAYG;YAC5C,IAAIV,KAAK;gBACP,OAAOW,aAAa,SAASX;YAC/B;QACF;QACA,OAAOW,aAAaG,SAASP;IAC/B;AACF;AAEA,OAAO,SAASQ,aAAaC,MAAc,EAAEN,MAAc;IACzD,IAAIhB,SAASsB,WAAW,KAAK,CAACN,OAAOO,IAAI,EAAE;QACzC,OAAOpB,cAAca,OAAOZ,QAAQ,EAAE;IACxC;IACA,OAAO;AACT;AAEA,OAAO,SAASoB,iBAAiBF,MAAc,EAAEN,MAAc;IAC7D,IAAIhB,SAASsB,WAAW,KAAK,CAACN,OAAOO,IAAI,EAAE;QACzC,OAAOpB,cAAca,OAAOZ,QAAQ,EAAE;IACxC;IACA,OAAO;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/enoent.ts"],"sourcesContent":["/**\n * ENOENT error handling for Windows\n * Extracted from cross-spawn v6.0.5\n */\n\nimport type { ChildProcess } from 'child_process';\nimport { isWindows } from '../constants.ts';\nimport type { ENOENTError, Parsed } from './types.ts';\n\nexport function notFoundError(original: Parsed['original'], syscall: string): ENOENTError {\n const err = new Error(`${syscall} ${original.command} ENOENT`) as ENOENTError;\n err.code = 'ENOENT';\n err.errno = 'ENOENT';\n err.syscall = `${syscall} ${original.command}`;\n err.path = original.command;\n err.spawnargs = original.args;\n return err;\n}\n\nexport function hookChildProcess(cp: ChildProcess, parsed: Parsed): void {\n if (!isWindows) return;\n\n const originalEmit = cp.emit.bind(cp);\n cp.emit = (name: string | symbol, ...args: unknown[]): boolean => {\n if (name === 'exit') {\n const err = verifyENOENT(args[0] as number, parsed);\n if (err) {\n return originalEmit('error', err);\n }\n }\n return originalEmit(name, ...args);\n };\n}\n\nexport function verifyENOENT(status: number, parsed: Parsed): ENOENTError | null {\n if (isWindows && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawn');\n }\n return null;\n}\n\nexport function verifyENOENTSync(status: number, parsed: Parsed): ENOENTError | null {\n if (isWindows && status === 1 && !parsed.file) {\n return notFoundError(parsed.original, 'spawnSync');\n }\n return null;\n}\n"],"names":["isWindows","notFoundError","original","syscall","err","Error","command","code","errno","path","spawnargs","args","hookChildProcess","cp","parsed","originalEmit","emit","bind","name","verifyENOENT","status","file","verifyENOENTSync"],"mappings":"AAAA;;;CAGC,GAGD,SAASA,SAAS,QAAQ,kBAAkB;AAG5C,OAAO,SAASC,cAAcC,QAA4B,EAAEC,OAAe;IACzE,MAAMC,MAAM,IAAIC,MAAM,GAAGF,QAAQ,CAAC,EAAED,SAASI,OAAO,CAAC,OAAO,CAAC;IAC7DF,IAAIG,IAAI,GAAG;IACXH,IAAII,KAAK,GAAG;IACZJ,IAAID,OAAO,GAAG,GAAGA,QAAQ,CAAC,EAAED,SAASI,OAAO,EAAE;IAC9CF,IAAIK,IAAI,GAAGP,SAASI,OAAO;IAC3BF,IAAIM,SAAS,GAAGR,SAASS,IAAI;IAC7B,OAAOP;AACT;AAEA,OAAO,SAASQ,iBAAiBC,EAAgB,EAAEC,MAAc;IAC/D,IAAI,CAACd,WAAW;IAEhB,MAAMe,eAAeF,GAAGG,IAAI,CAACC,IAAI,CAACJ;IAClCA,GAAGG,IAAI,GAAG,CAACE,MAAuB,GAAGP;QACnC,IAAIO,SAAS,QAAQ;YACnB,MAAMd,MAAMe,aAAaR,IAAI,CAAC,EAAE,EAAYG;YAC5C,IAAIV,KAAK;gBACP,OAAOW,aAAa,SAASX;YAC/B;QACF;QACA,OAAOW,aAAaG,SAASP;IAC/B;AACF;AAEA,OAAO,SAASQ,aAAaC,MAAc,EAAEN,MAAc;IACzD,IAAId,aAAaoB,WAAW,KAAK,CAACN,OAAOO,IAAI,EAAE;QAC7C,OAAOpB,cAAca,OAAOZ,QAAQ,EAAE;IACxC;IACA,OAAO;AACT;AAEA,OAAO,SAASoB,iBAAiBF,MAAc,EAAEN,MAAc;IAC7D,IAAId,aAAaoB,WAAW,KAAK,CAACN,OAAOO,IAAI,EAAE;QAC7C,OAAOpB,cAAca,OAAOZ,QAAQ,EAAE;IACxC;IACA,OAAO;AACT"}
@@ -3,10 +3,10 @@
3
3
  * Simplified from cross-spawn v6.0.5
4
4
  */ import path from 'path';
5
5
  import { objectAssign } from '../compat.js';
6
+ import { isWindows } from '../constants.js';
6
7
  import { escapeArgument, escapeCommand } from './escape.js';
7
8
  import { resolveCommand } from './resolve.js';
8
9
  import { readShebang } from './shebang.js';
9
- const isWin = process.platform === 'win32';
10
10
  const isExecutableRegExp = /\.(?:com|exe)$/i;
11
11
  const isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
12
12
  function detectShebang(parsed) {
@@ -20,7 +20,7 @@ function detectShebang(parsed) {
20
20
  return parsed.file;
21
21
  }
22
22
  function parseNonShell(parsed) {
23
- if (!isWin) return parsed;
23
+ if (!isWindows) return parsed;
24
24
  // Detect & add support for shebangs
25
25
  const commandFile = detectShebang(parsed);
26
26
  // We don't need a shell if the command filename is an executable
@@ -52,7 +52,7 @@ function parseShell(parsed) {
52
52
  const shellCommand = [
53
53
  parsed.command
54
54
  ].concat(parsed.args).join(' ');
55
- if (isWin) {
55
+ if (isWindows) {
56
56
  parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';
57
57
  parsed.args = [
58
58
  '/d',
@@ -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 { objectAssign } from '../compat.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 isWin = process.platform === 'win32';\nconst isExecutableRegExp = /\\.(?:com|exe)$/i;\nconst isCmdShimRegExp = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\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 (!isWin) 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 // Mimic node shell option for older Node versions\n const shellCommand = [parsed.command].concat(parsed.args).join(' ');\n\n if (isWin) {\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\nexport function parse(command: string, args?: string[] | ShimSpawnOptions | null, options?: ShimSpawnOptions): Parsed {\n // Normalize arguments\n let argsArray: string[];\n let opts: ShimSpawnOptions;\n\n if (args && !Array.isArray(args)) {\n // args is actually options\n argsArray = [];\n opts = objectAssign({}, args);\n } else {\n argsArray = args ? (args as string[]).slice(0) : [];\n opts = objectAssign({}, options || {});\n }\n\n const parsed: Parsed = {\n command: command,\n args: argsArray,\n options: opts,\n file: undefined,\n original: {\n command: command,\n args: argsArray,\n },\n };\n\n return opts.shell ? parseShell(parsed) : parseNonShell(parsed);\n}\n"],"names":["path","objectAssign","escapeArgument","escapeCommand","resolveCommand","readShebang","isWin","process","platform","isExecutableRegExp","isCmdShimRegExp","detectShebang","parsed","file","shebang","args","unshift","command","parseNonShell","commandFile","needsShell","test","options","forceShell","needsDoubleEscapeMetaChars","normalize","map","arg","shellCommand","concat","join","env","comspec","windowsVerbatimArguments","parseShell","shell","parse","argsArray","opts","Array","isArray","slice","undefined","original"],"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 { objectAssign } from '../compat.ts';\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\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 // 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\nexport function parse(command: string, args?: string[] | ShimSpawnOptions | null, options?: ShimSpawnOptions): Parsed {\n // Normalize arguments\n let argsArray: string[];\n let opts: ShimSpawnOptions;\n\n if (args && !Array.isArray(args)) {\n // args is actually options\n argsArray = [];\n opts = objectAssign({}, args);\n } else {\n argsArray = args ? (args as string[]).slice(0) : [];\n opts = objectAssign({}, options || {});\n }\n\n const parsed: Parsed = {\n command: command,\n args: argsArray,\n options: opts,\n file: undefined,\n original: {\n command: command,\n args: argsArray,\n },\n };\n\n return opts.shell ? parseShell(parsed) : parseNonShell(parsed);\n}\n"],"names":["path","objectAssign","isWindows","escapeArgument","escapeCommand","resolveCommand","readShebang","isExecutableRegExp","isCmdShimRegExp","detectShebang","parsed","file","shebang","args","unshift","command","parseNonShell","commandFile","needsShell","test","options","forceShell","needsDoubleEscapeMetaChars","normalize","map","arg","shellCommand","concat","join","process","env","comspec","windowsVerbatimArguments","parseShell","shell","platform","parse","argsArray","opts","Array","isArray","slice","undefined","original"],"mappings":"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"}
@@ -4,12 +4,28 @@
4
4
  */ import envPathKey from 'env-path-key';
5
5
  import path from 'path';
6
6
  import which from 'which';
7
- const isWin = process.platform === 'win32';
8
- export function resolveCommand(parsed) {
7
+ import { isWindows } from '../constants.js';
8
+ const pathDelimiter = isWindows ? ';' : ':';
9
+ const NODES = [
10
+ 'node',
11
+ 'node.exe',
12
+ 'node.cmd'
13
+ ];
14
+ function resolveCommandAttempt(parsed, withoutPathExt) {
9
15
  const command = parsed.command;
10
16
  const options = parsed.options;
17
+ const env = options.env || process.env;
11
18
  const cwd = process.cwd();
12
19
  const hasCustomCwd = options.cwd != null;
20
+ // Handle NODE/npm_node_execpath env vars for node commands
21
+ // This is needed because shebang detection may change the command to 'node'
22
+ // after the initial NODE env check in crossSpawn.ts has already passed
23
+ if (NODES.indexOf(path.basename(command).toLowerCase()) >= 0) {
24
+ const nodeFromEnv = env.NODE || env.npm_node_execpath;
25
+ if (nodeFromEnv) {
26
+ return nodeFromEnv;
27
+ }
28
+ }
13
29
  // If a custom cwd was specified, we need to change the process cwd
14
30
  // because which will do stat calls but does not support a custom cwd
15
31
  if (hasCustomCwd) {
@@ -25,7 +41,9 @@ export function resolveCommand(parsed) {
25
41
  try {
26
42
  resolved = which.sync(command, {
27
43
  path: (options.env || process.env)[pathKey],
28
- pathExt: isWin ? undefined : path.delimiter
44
+ // On Windows: undefined uses PATHEXT, pathDelimiter bypasses it
45
+ // withoutPathExt fallback is needed to find files without extensions
46
+ pathExt: withoutPathExt ? pathDelimiter : undefined
29
47
  });
30
48
  } catch (_e) {
31
49
  /* not found */ } finally{
@@ -39,3 +57,7 @@ export function resolveCommand(parsed) {
39
57
  }
40
58
  return resolved;
41
59
  }
60
+ // Try twice: first with PATHEXT (finds .cmd/.bat/.exe), then without (finds extensionless files)
61
+ export function resolveCommand(parsed) {
62
+ return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);
63
+ }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/resolve.ts"],"sourcesContent":["/**\n * Command resolution using which\n * Simplified from cross-spawn v6.0.5\n */\n\nimport envPathKey from 'env-path-key';\nimport path from 'path';\nimport which from 'which';\nimport type { Parsed } from './types.ts';\n\nconst isWin = process.platform === 'win32';\n\nexport function resolveCommand(parsed: Parsed): string | null {\n const command = parsed.command;\n const options = parsed.options;\n const cwd = process.cwd();\n const hasCustomCwd = options.cwd != null;\n\n // If a custom cwd was specified, we need to change the process cwd\n // because which will do stat calls but does not support a custom cwd\n if (hasCustomCwd) {\n try {\n process.chdir(options.cwd as string);\n } catch (_err) {\n /* ignore */\n }\n }\n\n let resolved: string | null = null;\n const pathKey = envPathKey({ env: options.env || process.env }) || 'PATH';\n\n try {\n resolved = which.sync(command, {\n path: (options.env || process.env)[pathKey],\n pathExt: isWin ? undefined : path.delimiter, // On non-Windows, don't use PATHEXT\n });\n } catch (_e) {\n /* not found */\n } finally {\n if (hasCustomCwd) {\n process.chdir(cwd);\n }\n }\n\n // Ensure absolute path\n if (resolved) {\n resolved = path.resolve(hasCustomCwd ? (options.cwd as string) : '', resolved);\n }\n\n return resolved;\n}\n"],"names":["envPathKey","path","which","isWin","process","platform","resolveCommand","parsed","command","options","cwd","hasCustomCwd","chdir","_err","resolved","pathKey","env","sync","pathExt","undefined","delimiter","_e","resolve"],"mappings":"AAAA;;;CAGC,GAED,OAAOA,gBAAgB,eAAe;AACtC,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,QAAQ;AAG1B,MAAMC,QAAQC,QAAQC,QAAQ,KAAK;AAEnC,OAAO,SAASC,eAAeC,MAAc;IAC3C,MAAMC,UAAUD,OAAOC,OAAO;IAC9B,MAAMC,UAAUF,OAAOE,OAAO;IAC9B,MAAMC,MAAMN,QAAQM,GAAG;IACvB,MAAMC,eAAeF,QAAQC,GAAG,IAAI;IAEpC,mEAAmE;IACnE,qEAAqE;IACrE,IAAIC,cAAc;QAChB,IAAI;YACFP,QAAQQ,KAAK,CAACH,QAAQC,GAAG;QAC3B,EAAE,OAAOG,MAAM;QACb,UAAU,GACZ;IACF;IAEA,IAAIC,WAA0B;IAC9B,MAAMC,UAAUf,WAAW;QAAEgB,KAAKP,QAAQO,GAAG,IAAIZ,QAAQY,GAAG;IAAC,MAAM;IAEnE,IAAI;QACFF,WAAWZ,MAAMe,IAAI,CAACT,SAAS;YAC7BP,MAAM,AAACQ,CAAAA,QAAQO,GAAG,IAAIZ,QAAQY,GAAG,AAAD,CAAE,CAACD,QAAQ;YAC3CG,SAASf,QAAQgB,YAAYlB,KAAKmB,SAAS;QAC7C;IACF,EAAE,OAAOC,IAAI;IACX,aAAa,GACf,SAAU;QACR,IAAIV,cAAc;YAChBP,QAAQQ,KAAK,CAACF;QAChB;IACF;IAEA,uBAAuB;IACvB,IAAII,UAAU;QACZA,WAAWb,KAAKqB,OAAO,CAACX,eAAgBF,QAAQC,GAAG,GAAc,IAAII;IACvE;IAEA,OAAOA;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/shim/resolve.ts"],"sourcesContent":["/**\n * Command resolution using which\n * Simplified from cross-spawn v6.0.5\n */\n\nimport envPathKey from 'env-path-key';\nimport path from 'path';\nimport which from 'which';\nimport { isWindows } from '../constants.ts';\nimport type { Parsed } from './types.ts';\n\nconst pathDelimiter = isWindows ? ';' : ':';\nconst NODES = ['node', 'node.exe', 'node.cmd'];\n\nfunction resolveCommandAttempt(parsed: Parsed, withoutPathExt?: boolean): string | null {\n const command = parsed.command;\n const options = parsed.options;\n const env = options.env || process.env;\n const cwd = process.cwd();\n const hasCustomCwd = options.cwd != null;\n\n // Handle NODE/npm_node_execpath env vars for node commands\n // This is needed because shebang detection may change the command to 'node'\n // after the initial NODE env check in crossSpawn.ts has already passed\n if (NODES.indexOf(path.basename(command).toLowerCase()) >= 0) {\n const nodeFromEnv = env.NODE || env.npm_node_execpath;\n if (nodeFromEnv) {\n return nodeFromEnv;\n }\n }\n\n // If a custom cwd was specified, we need to change the process cwd\n // because which will do stat calls but does not support a custom cwd\n if (hasCustomCwd) {\n try {\n process.chdir(options.cwd as string);\n } catch (_err) {\n /* ignore */\n }\n }\n\n let resolved: string | null = null;\n const pathKey = envPathKey({ env: options.env || process.env }) || 'PATH';\n\n try {\n resolved = which.sync(command, {\n path: (options.env || process.env)[pathKey],\n // On Windows: undefined uses PATHEXT, pathDelimiter bypasses it\n // withoutPathExt fallback is needed to find files without extensions\n pathExt: withoutPathExt ? pathDelimiter : undefined,\n });\n } catch (_e) {\n /* not found */\n } finally {\n if (hasCustomCwd) {\n process.chdir(cwd);\n }\n }\n\n // Ensure absolute path\n if (resolved) {\n resolved = path.resolve(hasCustomCwd ? (options.cwd as string) : '', resolved);\n }\n\n return resolved;\n}\n\n// Try twice: first with PATHEXT (finds .cmd/.bat/.exe), then without (finds extensionless files)\nexport function resolveCommand(parsed: Parsed): string | null {\n return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);\n}\n"],"names":["envPathKey","path","which","isWindows","pathDelimiter","NODES","resolveCommandAttempt","parsed","withoutPathExt","command","options","env","process","cwd","hasCustomCwd","indexOf","basename","toLowerCase","nodeFromEnv","NODE","npm_node_execpath","chdir","_err","resolved","pathKey","sync","pathExt","undefined","_e","resolve","resolveCommand"],"mappings":"AAAA;;;CAGC,GAED,OAAOA,gBAAgB,eAAe;AACtC,OAAOC,UAAU,OAAO;AACxB,OAAOC,WAAW,QAAQ;AAC1B,SAASC,SAAS,QAAQ,kBAAkB;AAG5C,MAAMC,gBAAgBD,YAAY,MAAM;AACxC,MAAME,QAAQ;IAAC;IAAQ;IAAY;CAAW;AAE9C,SAASC,sBAAsBC,MAAc,EAAEC,cAAwB;IACrE,MAAMC,UAAUF,OAAOE,OAAO;IAC9B,MAAMC,UAAUH,OAAOG,OAAO;IAC9B,MAAMC,MAAMD,QAAQC,GAAG,IAAIC,QAAQD,GAAG;IACtC,MAAME,MAAMD,QAAQC,GAAG;IACvB,MAAMC,eAAeJ,QAAQG,GAAG,IAAI;IAEpC,2DAA2D;IAC3D,4EAA4E;IAC5E,uEAAuE;IACvE,IAAIR,MAAMU,OAAO,CAACd,KAAKe,QAAQ,CAACP,SAASQ,WAAW,OAAO,GAAG;QAC5D,MAAMC,cAAcP,IAAIQ,IAAI,IAAIR,IAAIS,iBAAiB;QACrD,IAAIF,aAAa;YACf,OAAOA;QACT;IACF;IAEA,mEAAmE;IACnE,qEAAqE;IACrE,IAAIJ,cAAc;QAChB,IAAI;YACFF,QAAQS,KAAK,CAACX,QAAQG,GAAG;QAC3B,EAAE,OAAOS,MAAM;QACb,UAAU,GACZ;IACF;IAEA,IAAIC,WAA0B;IAC9B,MAAMC,UAAUxB,WAAW;QAAEW,KAAKD,QAAQC,GAAG,IAAIC,QAAQD,GAAG;IAAC,MAAM;IAEnE,IAAI;QACFY,WAAWrB,MAAMuB,IAAI,CAAChB,SAAS;YAC7BR,MAAM,AAACS,CAAAA,QAAQC,GAAG,IAAIC,QAAQD,GAAG,AAAD,CAAE,CAACa,QAAQ;YAC3C,gEAAgE;YAChE,qEAAqE;YACrEE,SAASlB,iBAAiBJ,gBAAgBuB;QAC5C;IACF,EAAE,OAAOC,IAAI;IACX,aAAa,GACf,SAAU;QACR,IAAId,cAAc;YAChBF,QAAQS,KAAK,CAACR;QAChB;IACF;IAEA,uBAAuB;IACvB,IAAIU,UAAU;QACZA,WAAWtB,KAAK4B,OAAO,CAACf,eAAgBJ,QAAQG,GAAG,GAAc,IAAIU;IACvE;IAEA,OAAOA;AACT;AAEA,iGAAiG;AACjG,OAAO,SAASO,eAAevB,MAAc;IAC3C,OAAOD,sBAAsBC,WAAWD,sBAAsBC,QAAQ;AACxE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cross-spawn-cb",
3
- "version": "2.5.0",
3
+ "version": "2.5.1",
4
4
  "description": "Cross spawn with a completion callback",
5
5
  "keywords": [
6
6
  "cross-spawn",
@@ -38,7 +38,7 @@
38
38
  "cross-spawn": "^7.0.6",
39
39
  "env-path-key": "^1.0.0",
40
40
  "function-exec-sync": "^1.0.0",
41
- "on-one": "^1.0.10",
41
+ "on-one": "^1.0.0",
42
42
  "which": "^1.0.0"
43
43
  },
44
44
  "devDependencies": {