cross-spawn-cb 2.5.0 → 2.5.2

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"}
@@ -2,16 +2,14 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- Object.defineProperty(exports, "default", {
5
+ Object.defineProperty(exports, // Fully delegate to the loaded implementation (shim or cross-spawn)
6
+ "default", {
6
7
  enumerable: true,
7
8
  get: function() {
8
9
  return spawn;
9
10
  }
10
11
  });
11
- var _child_process = /*#__PURE__*/ _interop_require_default(require("child_process"));
12
12
  var _module = /*#__PURE__*/ _interop_require_default(require("module"));
13
- var _path = /*#__PURE__*/ _interop_require_default(require("path"));
14
- var _spawnSyncts = /*#__PURE__*/ _interop_require_default(require("./polyfills/spawnSync.js"));
15
13
  function _interop_require_default(obj) {
16
14
  return obj && obj.__esModule ? obj : {
17
15
  default: obj
@@ -22,31 +20,9 @@ var _require = typeof require === 'undefined' ? _module.default.createRequire(re
22
20
  // Use lightweight shim for legacy Node (<= 7), modern cross-spawn for Node >= 8
23
21
  var crossSpawn = _require(major <= 7 ? './shim/index.js' : 'cross-spawn');
24
22
  function spawn(command, args, options) {
25
- var parsed = spawn._parse(command, args, options);
26
- var spawned = _child_process.default.spawn(parsed.command, parsed.args, parsed.options);
27
- spawn._enoent.hookChildProcess(spawned, parsed);
28
- return spawned;
23
+ return crossSpawn(command, args, options);
29
24
  }
30
- var cpSpawnSync = _child_process.default.spawnSync || _spawnSyncts.default;
31
- spawn.sync = function sync(command, args, options) {
32
- var parsed = spawn._parse(command, args, options);
33
- var res = cpSpawnSync(parsed.command, parsed.args, parsed.options);
34
- res.error = res.error || spawn._enoent.verifyENOENTSync(res.status, parsed);
35
- return res;
36
- };
37
- // patch earlier versions of cross-spawn with inconsistent handling of node
38
- var NODES = [
39
- 'node',
40
- 'node.exe',
41
- 'node.cmd'
42
- ];
43
- function _parse(command, args, options) {
44
- if (NODES.indexOf(_path.default.basename(command).toLowerCase()) >= 0) {
45
- var env = options ? options.env || process.env : process.env;
46
- command = env.NODE || env.npm_node_execpath || command;
47
- }
48
- return crossSpawn._parse(command, args, options);
49
- }
50
- spawn._parse = major <= 7 ? _parse : crossSpawn._parse;
25
+ spawn.sync = crossSpawn.sync;
26
+ spawn._parse = crossSpawn._parse;
51
27
  spawn._enoent = crossSpawn._enoent;
52
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/crossSpawn.ts"],"sourcesContent":["import type { ChildProcess } from 'child_process';\nimport cp from 'child_process';\nimport Module from 'module';\nimport path from 'path';\nimport spawnSyncPolyfill from './polyfills/spawnSync.ts';\nimport type { Enoent, Parsed, SpawnOptions, SpawnResult, SpawnSyncOptions } from './types.ts';\n\nconst major = +process.versions.node.split('.')[0];\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n// Use lightweight shim for legacy Node (<= 7), modern cross-spawn for Node >= 8\nconst crossSpawn = _require(major <= 7 ? './shim/index.js' : 'cross-spawn');\n\nexport default function spawn(command: string, args: string[], options?: SpawnOptions): ChildProcess {\n const parsed = spawn._parse(command, args, options);\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n spawn._enoent.hookChildProcess(spawned, parsed);\n return spawned;\n}\n\nconst cpSpawnSync = cp.spawnSync || spawnSyncPolyfill;\nspawn.sync = function sync(command: string, args: string[], options?: SpawnSyncOptions): SpawnResult {\n const parsed = spawn._parse(command, args, options) as Parsed;\n const res = cpSpawnSync(parsed.command, parsed.args, parsed.options);\n res.error = res.error || spawn._enoent.verifyENOENTSync(res.status, parsed);\n return res;\n};\n\n// patch earlier versions of cross-spawn with inconsistent handling of node\nconst NODES = ['node', 'node.exe', 'node.cmd'];\nfunction _parse(command: string, args: string[], options?: SpawnOptions | SpawnSyncOptions): Parsed {\n if (NODES.indexOf(path.basename(command).toLowerCase()) >= 0) {\n const env = options ? options.env || process.env : process.env;\n command = env.NODE || env.npm_node_execpath || command;\n }\n return crossSpawn._parse(command, args, options);\n}\nspawn._parse = (major <= 7 ? _parse : crossSpawn._parse) as typeof _parse;\nspawn._enoent = crossSpawn._enoent as Enoent;\n"],"names":["spawn","major","process","versions","node","split","_require","require","Module","createRequire","crossSpawn","command","args","options","parsed","_parse","spawned","cp","_enoent","hookChildProcess","cpSpawnSync","spawnSync","spawnSyncPolyfill","sync","res","error","verifyENOENTSync","status","NODES","indexOf","path","basename","toLowerCase","env","NODE","npm_node_execpath"],"mappings":";;;;+BAYA;;;eAAwBA;;;oEAXT;6DACI;2DACF;kEACa;;;;;;AAG9B,IAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;AAClD,IAAMC,WAAW,OAAOC,YAAY,cAAcC,eAAM,CAACC,aAAa,CAAC,uDAAmBF;AAC1F,gFAAgF;AAChF,IAAMG,aAAaJ,SAASL,SAAS,IAAI,oBAAoB;AAE9C,SAASD,MAAMW,OAAe,EAAEC,IAAc,EAAEC,OAAsB;IACnF,IAAMC,SAASd,MAAMe,MAAM,CAACJ,SAASC,MAAMC;IAC3C,IAAMG,UAAUC,sBAAE,CAACjB,KAAK,CAACc,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IACpEb,MAAMkB,OAAO,CAACC,gBAAgB,CAACH,SAASF;IACxC,OAAOE;AACT;AAEA,IAAMI,cAAcH,sBAAE,CAACI,SAAS,IAAIC,oBAAiB;AACrDtB,MAAMuB,IAAI,GAAG,SAASA,KAAKZ,OAAe,EAAEC,IAAc,EAAEC,OAA0B;IACpF,IAAMC,SAASd,MAAMe,MAAM,CAACJ,SAASC,MAAMC;IAC3C,IAAMW,MAAMJ,YAAYN,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IACnEW,IAAIC,KAAK,GAAGD,IAAIC,KAAK,IAAIzB,MAAMkB,OAAO,CAACQ,gBAAgB,CAACF,IAAIG,MAAM,EAAEb;IACpE,OAAOU;AACT;AAEA,2EAA2E;AAC3E,IAAMI,QAAQ;IAAC;IAAQ;IAAY;CAAW;AAC9C,SAASb,OAAOJ,OAAe,EAAEC,IAAc,EAAEC,OAAyC;IACxF,IAAIe,MAAMC,OAAO,CAACC,aAAI,CAACC,QAAQ,CAACpB,SAASqB,WAAW,OAAO,GAAG;QAC5D,IAAMC,MAAMpB,UAAUA,QAAQoB,GAAG,IAAI/B,QAAQ+B,GAAG,GAAG/B,QAAQ+B,GAAG;QAC9DtB,UAAUsB,IAAIC,IAAI,IAAID,IAAIE,iBAAiB,IAAIxB;IACjD;IACA,OAAOD,WAAWK,MAAM,CAACJ,SAASC,MAAMC;AAC1C;AACAb,MAAMe,MAAM,GAAId,SAAS,IAAIc,SAASL,WAAWK,MAAM;AACvDf,MAAMkB,OAAO,GAAGR,WAAWQ,OAAO"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/crossSpawn.ts"],"sourcesContent":["import type { ChildProcess } from 'child_process';\nimport Module from 'module';\nimport type { Enoent, Parsed, SpawnOptions, SpawnResult, SpawnSyncOptions } from './types.ts';\n\nconst major = +process.versions.node.split('.')[0];\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n// Use lightweight shim for legacy Node (<= 7), modern cross-spawn for Node >= 8\nconst crossSpawn = _require(major <= 7 ? './shim/index.js' : 'cross-spawn');\n\n// Fully delegate to the loaded implementation (shim or cross-spawn)\nexport default function spawn(command: string, args: string[], options?: SpawnOptions): ChildProcess {\n return crossSpawn(command, args, options);\n}\n\nspawn.sync = crossSpawn.sync as (command: string, args: string[], options?: SpawnSyncOptions) => SpawnResult;\nspawn._parse = crossSpawn._parse as (command: string, args: string[], options?: SpawnOptions | SpawnSyncOptions) => Parsed;\nspawn._enoent = crossSpawn._enoent as Enoent;\n"],"names":["spawn","major","process","versions","node","split","_require","require","Module","createRequire","crossSpawn","command","args","options","sync","_parse","_enoent"],"mappings":";;;;+BASA,oEAAoE;AACpE;;;eAAwBA;;;6DATL;;;;;;AAGnB,IAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;AAClD,IAAMC,WAAW,OAAOC,YAAY,cAAcC,eAAM,CAACC,aAAa,CAAC,uDAAmBF;AAC1F,gFAAgF;AAChF,IAAMG,aAAaJ,SAASL,SAAS,IAAI,oBAAoB;AAG9C,SAASD,MAAMW,OAAe,EAAEC,IAAc,EAAEC,OAAsB;IACnF,OAAOH,WAAWC,SAASC,MAAMC;AACnC;AAEAb,MAAMc,IAAI,GAAGJ,WAAWI,IAAI;AAC5Bd,MAAMe,MAAM,GAAGL,WAAWK,MAAM;AAChCf,MAAMgB,OAAO,GAAGN,WAAWM,OAAO"}
@@ -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,17 +13,67 @@ 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");
20
+ function _array_like_to_array(arr, len) {
21
+ if (len == null || len > arr.length) len = arr.length;
22
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
23
+ return arr2;
24
+ }
25
+ function _array_with_holes(arr) {
26
+ if (Array.isArray(arr)) return arr;
27
+ }
19
28
  function _interop_require_default(obj) {
20
29
  return obj && obj.__esModule ? obj : {
21
30
  default: obj
22
31
  };
23
32
  }
24
- var isWin = process.platform === 'win32';
33
+ function _iterable_to_array_limit(arr, i) {
34
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
35
+ if (_i == null) return;
36
+ var _arr = [];
37
+ var _n = true;
38
+ var _d = false;
39
+ var _s, _e;
40
+ try {
41
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
42
+ _arr.push(_s.value);
43
+ if (i && _arr.length === i) break;
44
+ }
45
+ } catch (err) {
46
+ _d = true;
47
+ _e = err;
48
+ } finally{
49
+ try {
50
+ if (!_n && _i["return"] != null) _i["return"]();
51
+ } finally{
52
+ if (_d) throw _e;
53
+ }
54
+ }
55
+ return _arr;
56
+ }
57
+ function _non_iterable_rest() {
58
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
59
+ }
60
+ function _sliced_to_array(arr, i) {
61
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
62
+ }
63
+ function _unsupported_iterable_to_array(o, minLen) {
64
+ if (!o) return;
65
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
66
+ var n = Object.prototype.toString.call(o).slice(8, -1);
67
+ if (n === "Object" && o.constructor) n = o.constructor.name;
68
+ if (n === "Map" || n === "Set") return Array.from(n);
69
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
70
+ }
25
71
  var isExecutableRegExp = /\.(?:com|exe)$/i;
26
72
  var isCmdShimRegExp = /node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;
73
+ // Node ^4.8.0 || ^5.7.0 || >= 6.0.0 supports shell option natively
74
+ // See: https://github.com/nodejs/node/pull/4598
75
+ 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];
76
+ var supportsShellOption = major >= 6 || major === 5 && minor >= 7 || major === 4 && minor >= 8;
27
77
  function detectShebang(parsed) {
28
78
  parsed.file = (0, _resolvets.resolveCommand)(parsed);
29
79
  var shebang = parsed.file && (0, _shebangts.readShebang)(parsed.file);
@@ -35,7 +85,7 @@ function detectShebang(parsed) {
35
85
  return parsed.file;
36
86
  }
37
87
  function parseNonShell(parsed) {
38
- if (!isWin) return parsed;
88
+ if (!_constantsts.isWindows) return parsed;
39
89
  // Detect & add support for shebangs
40
90
  var commandFile = detectShebang(parsed);
41
91
  // We don't need a shell if the command filename is an executable
@@ -65,11 +115,15 @@ function parseNonShell(parsed) {
65
115
  return parsed;
66
116
  }
67
117
  function parseShell(parsed) {
118
+ // If node supports the shell option, there's no need to mimic its behavior
119
+ if (supportsShellOption) {
120
+ return parsed;
121
+ }
68
122
  // Mimic node shell option for older Node versions
69
123
  var shellCommand = [
70
124
  parsed.command
71
125
  ].concat(parsed.args).join(' ');
72
- if (isWin) {
126
+ if (_constantsts.isWindows) {
73
127
  parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';
74
128
  parsed.args = [
75
129
  '/d',
@@ -93,6 +147,12 @@ function parseShell(parsed) {
93
147
  }
94
148
  return parsed;
95
149
  }
150
+ // Handle NODE/npm_node_execpath env vars for node commands
151
+ var NODES = [
152
+ 'node',
153
+ 'node.exe',
154
+ 'node.cmd'
155
+ ];
96
156
  function parse(command, args, options) {
97
157
  // Normalize arguments
98
158
  var argsArray;
@@ -105,6 +165,7 @@ function parse(command, args, options) {
105
165
  argsArray = args ? args.slice(0) : [];
106
166
  opts = (0, _compatts.objectAssign)({}, options || {});
107
167
  }
168
+ // Build parsed object with original command/args BEFORE any substitution
108
169
  var parsed = {
109
170
  command: command,
110
171
  args: argsArray,
@@ -115,6 +176,11 @@ function parse(command, args, options) {
115
176
  args: argsArray
116
177
  }
117
178
  };
179
+ // Substitute node command with NODE env var if set
180
+ if (NODES.indexOf(_path.default.basename(parsed.command).toLowerCase()) >= 0) {
181
+ var env = opts.env || process.env;
182
+ parsed.command = env.NODE || env.npm_node_execpath || parsed.command;
183
+ }
118
184
  return opts.shell ? parseShell(parsed) : parseNonShell(parsed);
119
185
  }
120
186
  /* 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/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":"AAAA;;;CAGC;;;;+BA8EeA;;;eAAAA;;;2DA5EC;wBACY;wBACiB;yBACf;yBACH;;;;;;AAG5B,IAAMC,QAAQC,QAAQC,QAAQ,KAAK;AACnC,IAAMC,qBAAqB;AAC3B,IAAMC,kBAAkB;AAExB,SAASC,cAAcC,MAAc;IACnCA,OAAOC,IAAI,GAAGC,IAAAA,yBAAc,EAACF;IAE7B,IAAMG,UAAUH,OAAOC,IAAI,IAAIG,IAAAA,sBAAW,EAACJ,OAAOC,IAAI;IACtD,IAAIE,SAAS;QACXH,OAAOK,IAAI,CAACC,OAAO,CAACN,OAAOC,IAAI;QAC/BD,OAAOO,OAAO,GAAGJ;QACjB,OAAOD,IAAAA,yBAAc,EAACF;IACxB;IAEA,OAAOA,OAAOC,IAAI;AACpB;AAEA,SAASO,cAAcR,MAAc;IACnC,IAAI,CAACN,OAAO,OAAOM;IAEnB,oCAAoC;IACpC,IAAMS,cAAcV,cAAcC;IAElC,iEAAiE;IACjE,IAAMU,aAAa,CAACb,mBAAmBc,IAAI,CAACF,eAAe;IAE3D,IAAIT,OAAOY,OAAO,CAACC,UAAU,IAAIH,YAAY;QAC3C,gEAAgE;QAChE,IAAMI,6BAA6BhB,gBAAgBa,IAAI,CAACF,eAAe;QAEvE,iDAAiD;QACjDT,OAAOO,OAAO,GAAGQ,aAAI,CAACC,SAAS,CAAChB,OAAOO,OAAO;QAE9C,6BAA6B;QAC7BP,OAAOO,OAAO,GAAGU,IAAAA,uBAAa,EAACjB,OAAOO,OAAO;QAC7CP,OAAOK,IAAI,GAAGL,OAAOK,IAAI,CAACa,GAAG,CAAC,SAACC;mBAAQC,IAAAA,wBAAc,EAACD,KAAKL;;QAE3D,IAAMO,eAAe;YAACrB,OAAOO,OAAO;SAAC,CAACe,MAAM,CAACtB,OAAOK,IAAI,EAAEkB,IAAI,CAAC;QAE/DvB,OAAOK,IAAI,GAAG;YAAC;YAAM;YAAM;YAAO,IAAgB,OAAbgB,cAAa;SAAG;QACrDrB,OAAOO,OAAO,GAAGZ,QAAQ6B,GAAG,CAACC,OAAO,IAAI;QACxCzB,OAAOY,OAAO,CAACc,wBAAwB,GAAG;IAC5C;IAEA,OAAO1B;AACT;AAEA,SAAS2B,WAAW3B,MAAc;IAChC,kDAAkD;IAClD,IAAMqB,eAAe;QAACrB,OAAOO,OAAO;KAAC,CAACe,MAAM,CAACtB,OAAOK,IAAI,EAAEkB,IAAI,CAAC;IAE/D,IAAI7B,OAAO;QACTM,OAAOO,OAAO,GAAG,OAAOP,OAAOY,OAAO,CAACgB,KAAK,KAAK,WAAW5B,OAAOY,OAAO,CAACgB,KAAK,GAAGjC,QAAQ6B,GAAG,CAACC,OAAO,IAAI;QAC1GzB,OAAOK,IAAI,GAAG;YAAC;YAAM;YAAM;YAAO,IAAgB,OAAbgB,cAAa;SAAG;QACrDrB,OAAOY,OAAO,CAACc,wBAAwB,GAAG;IAC5C,OAAO;QACL,IAAI,OAAO1B,OAAOY,OAAO,CAACgB,KAAK,KAAK,UAAU;YAC5C5B,OAAOO,OAAO,GAAGP,OAAOY,OAAO,CAACgB,KAAK;QACvC,OAAO,IAAIjC,QAAQC,QAAQ,KAAK,WAAW;YACzCI,OAAOO,OAAO,GAAG;QACnB,OAAO;YACLP,OAAOO,OAAO,GAAG;QACnB;QACAP,OAAOK,IAAI,GAAG;YAAC;YAAMgB;SAAa;IACpC;IAEA,OAAOrB;AACT;AAEO,SAASP,MAAMc,OAAe,EAAEF,IAAyC,EAAEO,OAA0B;IAC1G,sBAAsB;IACtB,IAAIiB;IACJ,IAAIC;IAEJ,IAAIzB,QAAQ,CAAC0B,MAAMC,OAAO,CAAC3B,OAAO;QAChC,2BAA2B;QAC3BwB,YAAY,EAAE;QACdC,OAAOG,IAAAA,sBAAY,EAAC,CAAC,GAAG5B;IAC1B,OAAO;QACLwB,YAAYxB,OAAO,AAACA,KAAkB6B,KAAK,CAAC,KAAK,EAAE;QACnDJ,OAAOG,IAAAA,sBAAY,EAAC,CAAC,GAAGrB,WAAW,CAAC;IACtC;IAEA,IAAMZ,SAAiB;QACrBO,SAASA;QACTF,MAAMwB;QACNjB,SAASkB;QACT7B,MAAMkC;QACNC,UAAU;YACR7B,SAASA;YACTF,MAAMwB;QACR;IACF;IAEA,OAAOC,KAAKF,KAAK,GAAGD,WAAW3B,UAAUQ,cAAcR;AACzD"}
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\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 // 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 // Build parsed object with original command/args BEFORE any substitution\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 // Substitute node command with NODE env var if set\n if (NODES.indexOf(path.basename(parsed.command).toLowerCase()) >= 0) {\n const env = opts.env || process.env;\n parsed.command = env.NODE || env.npm_node_execpath || parsed.command;\n }\n\n return opts.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","argsArray","opts","Array","isArray","objectAssign","slice","undefined","original","indexOf","basename","toLowerCase","NODE","npm_node_execpath"],"mappings":"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"}
@@ -14,13 +14,14 @@ 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
+ function resolveCommandAttempt(parsed, withoutPathExt) {
24
25
  var command = parsed.command;
25
26
  var options = parsed.options;
26
27
  var cwd = process.cwd();
@@ -36,11 +37,13 @@ function resolveCommand(parsed) {
36
37
  var resolved = null;
37
38
  var pathKey = (0, _envpathkey.default)({
38
39
  env: options.env || process.env
39
- }) || 'PATH';
40
+ });
40
41
  try {
41
42
  resolved = _which.default.sync(command, {
42
43
  path: (options.env || process.env)[pathKey],
43
- pathExt: isWin ? undefined : _path.default.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
44
47
  });
45
48
  } catch (_e) {
46
49
  /* not found */ } finally{
@@ -54,4 +57,7 @@ function resolveCommand(parsed) {
54
57
  }
55
58
  return resolved;
56
59
  }
60
+ function resolveCommand(parsed) {
61
+ return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);
62
+ }
57
63
  /* 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 ? ';' : ':';\n\nfunction resolveCommandAttempt(parsed: Parsed, withoutPathExt?: boolean): 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 });\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","resolveCommandAttempt","parsed","withoutPathExt","command","options","cwd","process","hasCustomCwd","chdir","_err","resolved","pathKey","envPathKey","env","which","sync","path","pathExt","undefined","_e","resolve"],"mappings":"AAAA;;;CAGC;;;;+BAqDeA;;;eAAAA;;;iEAnDO;2DACN;4DACC;2BACQ;;;;;;AAG1B,IAAMC,gBAAgBC,sBAAS,GAAG,MAAM;AAExC,SAASC,sBAAsBC,MAAc,EAAEC,cAAwB;IACrE,IAAMC,UAAUF,OAAOE,OAAO;IAC9B,IAAMC,UAAUH,OAAOG,OAAO;IAC9B,IAAMC,MAAMC,QAAQD,GAAG;IACvB,IAAME,eAAeH,QAAQC,GAAG,IAAI;IAEpC,mEAAmE;IACnE,qEAAqE;IACrE,IAAIE,cAAc;QAChB,IAAI;YACFD,QAAQE,KAAK,CAACJ,QAAQC,GAAG;QAC3B,EAAE,OAAOI,MAAM;QACb,UAAU,GACZ;IACF;IAEA,IAAIC,WAA0B;IAC9B,IAAMC,UAAUC,IAAAA,mBAAU,EAAC;QAAEC,KAAKT,QAAQS,GAAG,IAAIP,QAAQO,GAAG;IAAC;IAE7D,IAAI;QACFH,WAAWI,cAAK,CAACC,IAAI,CAACZ,SAAS;YAC7Ba,MAAM,AAACZ,CAAAA,QAAQS,GAAG,IAAIP,QAAQO,GAAG,AAAD,CAAE,CAACF,QAAQ;YAC3C,gEAAgE;YAChE,qEAAqE;YACrEM,SAASf,iBAAiBJ,gBAAgBoB;QAC5C;IACF,EAAE,OAAOC,IAAI;IACX,aAAa,GACf,SAAU;QACR,IAAIZ,cAAc;YAChBD,QAAQE,KAAK,CAACH;QAChB;IACF;IAEA,uBAAuB;IACvB,IAAIK,UAAU;QACZA,WAAWM,aAAI,CAACI,OAAO,CAACb,eAAgBH,QAAQC,GAAG,GAAc,IAAIK;IACvE;IAEA,OAAOA;AACT;AAGO,SAASb,eAAeI,MAAc;IAC3C,OAAOD,sBAAsBC,WAAWD,sBAAsBC,QAAQ;AACxE"}
@@ -15,6 +15,11 @@ export interface Parsed {
15
15
  command: string;
16
16
  args: string[];
17
17
  options: SpawnOptions | SpawnSyncOptions;
18
+ file?: string | null;
19
+ original?: {
20
+ command: string;
21
+ args: string[];
22
+ };
18
23
  }
19
24
  export interface NotFoundError extends Error {
20
25
  code?: string;
@@ -15,6 +15,11 @@ export interface Parsed {
15
15
  command: string;
16
16
  args: string[];
17
17
  options: SpawnOptions | SpawnSyncOptions;
18
+ file?: string | null;
19
+ original?: {
20
+ command: string;
21
+ args: string[];
22
+ };
18
23
  }
19
24
  export interface NotFoundError extends Error {
20
25
  code?: string;
@@ -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,36 +1,12 @@
1
- import cp from 'child_process';
2
1
  import Module from 'module';
3
- import path from 'path';
4
- import spawnSyncPolyfill from './polyfills/spawnSync.js';
5
2
  const major = +process.versions.node.split('.')[0];
6
3
  const _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;
7
4
  // Use lightweight shim for legacy Node (<= 7), modern cross-spawn for Node >= 8
8
5
  const crossSpawn = _require(major <= 7 ? './shim/index.js' : 'cross-spawn');
6
+ // Fully delegate to the loaded implementation (shim or cross-spawn)
9
7
  export default function spawn(command, args, options) {
10
- const parsed = spawn._parse(command, args, options);
11
- const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);
12
- spawn._enoent.hookChildProcess(spawned, parsed);
13
- return spawned;
8
+ return crossSpawn(command, args, options);
14
9
  }
15
- const cpSpawnSync = cp.spawnSync || spawnSyncPolyfill;
16
- spawn.sync = function sync(command, args, options) {
17
- const parsed = spawn._parse(command, args, options);
18
- const res = cpSpawnSync(parsed.command, parsed.args, parsed.options);
19
- res.error = res.error || spawn._enoent.verifyENOENTSync(res.status, parsed);
20
- return res;
21
- };
22
- // patch earlier versions of cross-spawn with inconsistent handling of node
23
- const NODES = [
24
- 'node',
25
- 'node.exe',
26
- 'node.cmd'
27
- ];
28
- function _parse(command, args, options) {
29
- if (NODES.indexOf(path.basename(command).toLowerCase()) >= 0) {
30
- const env = options ? options.env || process.env : process.env;
31
- command = env.NODE || env.npm_node_execpath || command;
32
- }
33
- return crossSpawn._parse(command, args, options);
34
- }
35
- spawn._parse = major <= 7 ? _parse : crossSpawn._parse;
10
+ spawn.sync = crossSpawn.sync;
11
+ spawn._parse = crossSpawn._parse;
36
12
  spawn._enoent = crossSpawn._enoent;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/crossSpawn.ts"],"sourcesContent":["import type { ChildProcess } from 'child_process';\nimport cp from 'child_process';\nimport Module from 'module';\nimport path from 'path';\nimport spawnSyncPolyfill from './polyfills/spawnSync.ts';\nimport type { Enoent, Parsed, SpawnOptions, SpawnResult, SpawnSyncOptions } from './types.ts';\n\nconst major = +process.versions.node.split('.')[0];\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n// Use lightweight shim for legacy Node (<= 7), modern cross-spawn for Node >= 8\nconst crossSpawn = _require(major <= 7 ? './shim/index.js' : 'cross-spawn');\n\nexport default function spawn(command: string, args: string[], options?: SpawnOptions): ChildProcess {\n const parsed = spawn._parse(command, args, options);\n const spawned = cp.spawn(parsed.command, parsed.args, parsed.options);\n spawn._enoent.hookChildProcess(spawned, parsed);\n return spawned;\n}\n\nconst cpSpawnSync = cp.spawnSync || spawnSyncPolyfill;\nspawn.sync = function sync(command: string, args: string[], options?: SpawnSyncOptions): SpawnResult {\n const parsed = spawn._parse(command, args, options) as Parsed;\n const res = cpSpawnSync(parsed.command, parsed.args, parsed.options);\n res.error = res.error || spawn._enoent.verifyENOENTSync(res.status, parsed);\n return res;\n};\n\n// patch earlier versions of cross-spawn with inconsistent handling of node\nconst NODES = ['node', 'node.exe', 'node.cmd'];\nfunction _parse(command: string, args: string[], options?: SpawnOptions | SpawnSyncOptions): Parsed {\n if (NODES.indexOf(path.basename(command).toLowerCase()) >= 0) {\n const env = options ? options.env || process.env : process.env;\n command = env.NODE || env.npm_node_execpath || command;\n }\n return crossSpawn._parse(command, args, options);\n}\nspawn._parse = (major <= 7 ? _parse : crossSpawn._parse) as typeof _parse;\nspawn._enoent = crossSpawn._enoent as Enoent;\n"],"names":["cp","Module","path","spawnSyncPolyfill","major","process","versions","node","split","_require","require","createRequire","url","crossSpawn","spawn","command","args","options","parsed","_parse","spawned","_enoent","hookChildProcess","cpSpawnSync","spawnSync","sync","res","error","verifyENOENTSync","status","NODES","indexOf","basename","toLowerCase","env","NODE","npm_node_execpath"],"mappings":"AACA,OAAOA,QAAQ,gBAAgB;AAC/B,OAAOC,YAAY,SAAS;AAC5B,OAAOC,UAAU,OAAO;AACxB,OAAOC,uBAAuB,2BAA2B;AAGzD,MAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;AAClD,MAAMC,WAAW,OAAOC,YAAY,cAAcT,OAAOU,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAC1F,gFAAgF;AAChF,MAAMG,aAAaJ,SAASL,SAAS,IAAI,oBAAoB;AAE7D,eAAe,SAASU,MAAMC,OAAe,EAAEC,IAAc,EAAEC,OAAsB;IACnF,MAAMC,SAASJ,MAAMK,MAAM,CAACJ,SAASC,MAAMC;IAC3C,MAAMG,UAAUpB,GAAGc,KAAK,CAACI,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IACpEH,MAAMO,OAAO,CAACC,gBAAgB,CAACF,SAASF;IACxC,OAAOE;AACT;AAEA,MAAMG,cAAcvB,GAAGwB,SAAS,IAAIrB;AACpCW,MAAMW,IAAI,GAAG,SAASA,KAAKV,OAAe,EAAEC,IAAc,EAAEC,OAA0B;IACpF,MAAMC,SAASJ,MAAMK,MAAM,CAACJ,SAASC,MAAMC;IAC3C,MAAMS,MAAMH,YAAYL,OAAOH,OAAO,EAAEG,OAAOF,IAAI,EAAEE,OAAOD,OAAO;IACnES,IAAIC,KAAK,GAAGD,IAAIC,KAAK,IAAIb,MAAMO,OAAO,CAACO,gBAAgB,CAACF,IAAIG,MAAM,EAAEX;IACpE,OAAOQ;AACT;AAEA,2EAA2E;AAC3E,MAAMI,QAAQ;IAAC;IAAQ;IAAY;CAAW;AAC9C,SAASX,OAAOJ,OAAe,EAAEC,IAAc,EAAEC,OAAyC;IACxF,IAAIa,MAAMC,OAAO,CAAC7B,KAAK8B,QAAQ,CAACjB,SAASkB,WAAW,OAAO,GAAG;QAC5D,MAAMC,MAAMjB,UAAUA,QAAQiB,GAAG,IAAI7B,QAAQ6B,GAAG,GAAG7B,QAAQ6B,GAAG;QAC9DnB,UAAUmB,IAAIC,IAAI,IAAID,IAAIE,iBAAiB,IAAIrB;IACjD;IACA,OAAOF,WAAWM,MAAM,CAACJ,SAASC,MAAMC;AAC1C;AACAH,MAAMK,MAAM,GAAIf,SAAS,IAAIe,SAASN,WAAWM,MAAM;AACvDL,MAAMO,OAAO,GAAGR,WAAWQ,OAAO"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/crossSpawn.ts"],"sourcesContent":["import type { ChildProcess } from 'child_process';\nimport Module from 'module';\nimport type { Enoent, Parsed, SpawnOptions, SpawnResult, SpawnSyncOptions } from './types.ts';\n\nconst major = +process.versions.node.split('.')[0];\nconst _require = typeof require === 'undefined' ? Module.createRequire(import.meta.url) : require;\n// Use lightweight shim for legacy Node (<= 7), modern cross-spawn for Node >= 8\nconst crossSpawn = _require(major <= 7 ? './shim/index.js' : 'cross-spawn');\n\n// Fully delegate to the loaded implementation (shim or cross-spawn)\nexport default function spawn(command: string, args: string[], options?: SpawnOptions): ChildProcess {\n return crossSpawn(command, args, options);\n}\n\nspawn.sync = crossSpawn.sync as (command: string, args: string[], options?: SpawnSyncOptions) => SpawnResult;\nspawn._parse = crossSpawn._parse as (command: string, args: string[], options?: SpawnOptions | SpawnSyncOptions) => Parsed;\nspawn._enoent = crossSpawn._enoent as Enoent;\n"],"names":["Module","major","process","versions","node","split","_require","require","createRequire","url","crossSpawn","spawn","command","args","options","sync","_parse","_enoent"],"mappings":"AACA,OAAOA,YAAY,SAAS;AAG5B,MAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;AAClD,MAAMC,WAAW,OAAOC,YAAY,cAAcP,OAAOQ,aAAa,CAAC,YAAYC,GAAG,IAAIF;AAC1F,gFAAgF;AAChF,MAAMG,aAAaJ,SAASL,SAAS,IAAI,oBAAoB;AAE7D,oEAAoE;AACpE,eAAe,SAASU,MAAMC,OAAe,EAAEC,IAAc,EAAEC,OAAsB;IACnF,OAAOJ,WAAWE,SAASC,MAAMC;AACnC;AAEAH,MAAMI,IAAI,GAAGL,WAAWK,IAAI;AAC5BJ,MAAMK,MAAM,GAAGN,WAAWM,MAAM;AAChCL,MAAMM,OAAO,GAAGP,WAAWO,OAAO"}
@@ -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,12 +3,16 @@
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
+ // Node ^4.8.0 || ^5.7.0 || >= 6.0.0 supports shell option natively
13
+ // See: https://github.com/nodejs/node/pull/4598
14
+ const [major, minor] = process.versions.node.split('.').map(Number);
15
+ const supportsShellOption = major >= 6 || major === 5 && minor >= 7 || major === 4 && minor >= 8;
12
16
  function detectShebang(parsed) {
13
17
  parsed.file = resolveCommand(parsed);
14
18
  const shebang = parsed.file && readShebang(parsed.file);
@@ -20,7 +24,7 @@ function detectShebang(parsed) {
20
24
  return parsed.file;
21
25
  }
22
26
  function parseNonShell(parsed) {
23
- if (!isWin) return parsed;
27
+ if (!isWindows) return parsed;
24
28
  // Detect & add support for shebangs
25
29
  const commandFile = detectShebang(parsed);
26
30
  // We don't need a shell if the command filename is an executable
@@ -48,11 +52,15 @@ function parseNonShell(parsed) {
48
52
  return parsed;
49
53
  }
50
54
  function parseShell(parsed) {
55
+ // If node supports the shell option, there's no need to mimic its behavior
56
+ if (supportsShellOption) {
57
+ return parsed;
58
+ }
51
59
  // Mimic node shell option for older Node versions
52
60
  const shellCommand = [
53
61
  parsed.command
54
62
  ].concat(parsed.args).join(' ');
55
- if (isWin) {
63
+ if (isWindows) {
56
64
  parsed.command = typeof parsed.options.shell === 'string' ? parsed.options.shell : process.env.comspec || 'cmd.exe';
57
65
  parsed.args = [
58
66
  '/d',
@@ -76,6 +84,12 @@ function parseShell(parsed) {
76
84
  }
77
85
  return parsed;
78
86
  }
87
+ // Handle NODE/npm_node_execpath env vars for node commands
88
+ const NODES = [
89
+ 'node',
90
+ 'node.exe',
91
+ 'node.cmd'
92
+ ];
79
93
  export function parse(command, args, options) {
80
94
  // Normalize arguments
81
95
  let argsArray;
@@ -88,6 +102,7 @@ export function parse(command, args, options) {
88
102
  argsArray = args ? args.slice(0) : [];
89
103
  opts = objectAssign({}, options || {});
90
104
  }
105
+ // Build parsed object with original command/args BEFORE any substitution
91
106
  const parsed = {
92
107
  command: command,
93
108
  args: argsArray,
@@ -98,5 +113,10 @@ export function parse(command, args, options) {
98
113
  args: argsArray
99
114
  }
100
115
  };
116
+ // Substitute node command with NODE env var if set
117
+ if (NODES.indexOf(path.basename(parsed.command).toLowerCase()) >= 0) {
118
+ const env = opts.env || process.env;
119
+ parsed.command = env.NODE || env.npm_node_execpath || parsed.command;
120
+ }
101
121
  return opts.shell ? parseShell(parsed) : parseNonShell(parsed);
102
122
  }
@@ -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\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 // 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 // Build parsed object with original command/args BEFORE any substitution\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 // Substitute node command with NODE env var if set\n if (NODES.indexOf(path.basename(parsed.command).toLowerCase()) >= 0) {\n const env = opts.env || process.env;\n parsed.command = env.NODE || env.npm_node_execpath || parsed.command;\n }\n\n return opts.shell ? parseShell(parsed) : parseNonShell(parsed);\n}\n"],"names":["path","objectAssign","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","argsArray","opts","Array","isArray","slice","undefined","original","indexOf","basename","toLowerCase","NODE","npm_node_execpath"],"mappings":"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"}
@@ -4,8 +4,9 @@
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
+ function resolveCommandAttempt(parsed, withoutPathExt) {
9
10
  const command = parsed.command;
10
11
  const options = parsed.options;
11
12
  const cwd = process.cwd();
@@ -21,11 +22,13 @@ export function resolveCommand(parsed) {
21
22
  let resolved = null;
22
23
  const pathKey = envPathKey({
23
24
  env: options.env || process.env
24
- }) || 'PATH';
25
+ });
25
26
  try {
26
27
  resolved = which.sync(command, {
27
28
  path: (options.env || process.env)[pathKey],
28
- pathExt: isWin ? undefined : path.delimiter
29
+ // On Windows: undefined uses PATHEXT, pathDelimiter bypasses it
30
+ // withoutPathExt fallback is needed to find files without extensions
31
+ pathExt: withoutPathExt ? pathDelimiter : undefined
29
32
  });
30
33
  } catch (_e) {
31
34
  /* not found */ } finally{
@@ -39,3 +42,7 @@ export function resolveCommand(parsed) {
39
42
  }
40
43
  return resolved;
41
44
  }
45
+ // Try twice: first with PATHEXT (finds .cmd/.bat/.exe), then without (finds extensionless files)
46
+ export function resolveCommand(parsed) {
47
+ return resolveCommandAttempt(parsed) || resolveCommandAttempt(parsed, true);
48
+ }
@@ -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 ? ';' : ':';\n\nfunction resolveCommandAttempt(parsed: Parsed, withoutPathExt?: boolean): 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 });\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","resolveCommandAttempt","parsed","withoutPathExt","command","options","cwd","process","hasCustomCwd","chdir","_err","resolved","pathKey","env","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;AAExC,SAASE,sBAAsBC,MAAc,EAAEC,cAAwB;IACrE,MAAMC,UAAUF,OAAOE,OAAO;IAC9B,MAAMC,UAAUH,OAAOG,OAAO;IAC9B,MAAMC,MAAMC,QAAQD,GAAG;IACvB,MAAME,eAAeH,QAAQC,GAAG,IAAI;IAEpC,mEAAmE;IACnE,qEAAqE;IACrE,IAAIE,cAAc;QAChB,IAAI;YACFD,QAAQE,KAAK,CAACJ,QAAQC,GAAG;QAC3B,EAAE,OAAOI,MAAM;QACb,UAAU,GACZ;IACF;IAEA,IAAIC,WAA0B;IAC9B,MAAMC,UAAUhB,WAAW;QAAEiB,KAAKR,QAAQQ,GAAG,IAAIN,QAAQM,GAAG;IAAC;IAE7D,IAAI;QACFF,WAAWb,MAAMgB,IAAI,CAACV,SAAS;YAC7BP,MAAM,AAACQ,CAAAA,QAAQQ,GAAG,IAAIN,QAAQM,GAAG,AAAD,CAAE,CAACD,QAAQ;YAC3C,gEAAgE;YAChE,qEAAqE;YACrEG,SAASZ,iBAAiBH,gBAAgBgB;QAC5C;IACF,EAAE,OAAOC,IAAI;IACX,aAAa,GACf,SAAU;QACR,IAAIT,cAAc;YAChBD,QAAQE,KAAK,CAACH;QAChB;IACF;IAEA,uBAAuB;IACvB,IAAIK,UAAU;QACZA,WAAWd,KAAKqB,OAAO,CAACV,eAAgBH,QAAQC,GAAG,GAAc,IAAIK;IACvE;IAEA,OAAOA;AACT;AAEA,iGAAiG;AACjG,OAAO,SAASQ,eAAejB,MAAc;IAC3C,OAAOD,sBAAsBC,WAAWD,sBAAsBC,QAAQ;AACxE"}
@@ -15,6 +15,11 @@ export interface Parsed {
15
15
  command: string;
16
16
  args: string[];
17
17
  options: SpawnOptions | SpawnSyncOptions;
18
+ file?: string | null;
19
+ original?: {
20
+ command: string;
21
+ args: string[];
22
+ };
18
23
  }
19
24
  export interface NotFoundError extends Error {
20
25
  code?: string;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/types.ts"],"sourcesContent":["import type * as child_process from 'child_process';\n\nexport type ChildProcess = child_process.ChildProcess;\nexport interface SpawnOptions extends child_process.SpawnOptions {\n encoding?: BufferEncoding;\n env?: NodeJS.ProcessEnv;\n input?: string | Buffer;\n}\nexport interface SpawnSyncOptions extends child_process.SpawnSyncOptions {\n encoding?: BufferEncoding;\n env?: NodeJS.ProcessEnv;\n input?: string | Buffer;\n}\nexport type SpawnResult = child_process.SpawnSyncReturns<string | Buffer>;\n\nexport interface Parsed {\n command: string;\n args: string[];\n options: SpawnOptions | SpawnSyncOptions;\n}\n\nexport interface NotFoundError extends Error {\n code?: string;\n errno?: string;\n syscall?: string;\n path?: string;\n spawnargs?: string[];\n}\nexport interface SpawnError extends NotFoundError, SpawnResult {}\n\nexport type SpawnCallback = (err?: SpawnError, res?: SpawnResult) => void;\n\nexport interface Enoent {\n hookChildProcess: (cp: ChildProcess, parsed: Parsed) => undefined;\n verifyENOENT: (status: number, parsed: Parsed) => NotFoundError | null;\n verifyENOENTSync: (status: number, parsed: Parsed) => NotFoundError | null;\n notFoundError: (cp: ChildProcess, parsed: Parsed) => NotFoundError;\n}\n"],"names":[],"mappings":"AAgCA,WAKC"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/compat/cross-spawn-cb/src/types.ts"],"sourcesContent":["import type * as child_process from 'child_process';\n\nexport type ChildProcess = child_process.ChildProcess;\nexport interface SpawnOptions extends child_process.SpawnOptions {\n encoding?: BufferEncoding;\n env?: NodeJS.ProcessEnv;\n input?: string | Buffer;\n}\nexport interface SpawnSyncOptions extends child_process.SpawnSyncOptions {\n encoding?: BufferEncoding;\n env?: NodeJS.ProcessEnv;\n input?: string | Buffer;\n}\nexport type SpawnResult = child_process.SpawnSyncReturns<string | Buffer>;\n\nexport interface Parsed {\n command: string;\n args: string[];\n options: SpawnOptions | SpawnSyncOptions;\n file?: string | null;\n original?: {\n command: string;\n args: string[];\n };\n}\n\nexport interface NotFoundError extends Error {\n code?: string;\n errno?: string;\n syscall?: string;\n path?: string;\n spawnargs?: string[];\n}\nexport interface SpawnError extends NotFoundError, SpawnResult {}\n\nexport type SpawnCallback = (err?: SpawnError, res?: SpawnResult) => void;\n\nexport interface Enoent {\n hookChildProcess: (cp: ChildProcess, parsed: Parsed) => undefined;\n verifyENOENT: (status: number, parsed: Parsed) => NotFoundError | null;\n verifyENOENTSync: (status: number, parsed: Parsed) => NotFoundError | null;\n notFoundError: (cp: ChildProcess, parsed: Parsed) => NotFoundError;\n}\n"],"names":[],"mappings":"AAqCA,WAKC"}
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.2",
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": {