Global

Methods

buildSpawnArgs(command, argsopt) → {Object}

Description:
  • 將command與args轉為可安全交給child_process.spawn之參數, 主要處理Windows下npm全域命令為.cmd批次檔而spawn無法直接執行之問題 策略優先順序:

    1. .exe → 直接spawn
    2. .cmd → 解析JS入口, 用node直接執行(繞過cmd.exe, 支援多行參數)
    3. .cmd但無法解析JS入口 → 透過cmd.exe /d /s /c執行(fallback, 不支援多行參數) 非Windows平台原樣回傳 回傳物件三個分支一律帶opt鍵(無額外設定時為{}), 呼叫端可直接展開至spawn之選項物件
Source:
Parameters:
Name Type Attributes Default Description
command String

輸入執行檔名稱字串

args Array <optional>
[]

輸入參數陣列, 預設[]

Returns:

回傳spawn參數物件, 內含file(執行檔), args(參數陣列), opt(spawn額外選項物件)

Type
Object

buildSpawnEnv(envExtraopt) → {Object}

Description:
  • 建立子進程之環境變數物件: 以process.env為底, 加入PYTHONIOENCODING=utf-8, 再併入envExtra(同名以envExtra為準) 每次呼叫重新求值且不動本進程process.env, 故並行調用可各自帶不同值 Windows下環境變數大小寫不敏感但JS物件鍵敏感, 故併入前先移除大小寫不同之同名既有鍵, 否則呼叫端傳Path而process.env為PATH時兩鍵並存且Windows取原值, 注入靜默失效 此刪除僅限win32: POSIX環境變數大小寫敏感, Path與PATH為兩個獨立變數, 誤刪即退化

Source:
Parameters:
Name Type Attributes Description
envExtra Object <optional>

輸入額外注入之環境變數物件, 值為undefined代表移除該變數, 預設undefined代表不覆寫任何變數

Returns:

回傳可交給spawn之env物件

Type
Object

buildValidator(rule) → {function|null}

Description:
  • 建立驗證函式 支援'nonempty', 'json', 'min:100'或自訂函式, 多規則可用逗號串接

Source:
Parameters:
Name Type Description
rule String | function

輸入驗證規則字串或自訂函式

Returns:

回傳驗證函式, 無有效規則回傳null

Type
function | null

escapeWinArg(arg) → {String}

Description:
  • 轉義cmd.exe的單一參數(cross-spawn escapeArgument邏輯) 參考: https://qntm.org/cmd

Source:
Parameters:
Name Type Description
arg String

輸入參數字串

Returns:

回傳轉義後參數字串

Type
String

escapeWinCmd(cmd) → {String}

Description:
  • 轉義cmd.exe的命令部分

Source:
Parameters:
Name Type Description
cmd String

輸入命令字串

Returns:

回傳轉義後命令字串

Type
String

execCliOnce(command, argsopt, optopt) → {Promise}

Description:
  • 單次非同步呼叫(內部使用, 不含重試邏輯)

Source:
Parameters:
Name Type Attributes Default Description
command String

輸入執行檔名稱字串

args Array <optional>
[]

輸入參數陣列

opt Object <optional>
{}

輸入設定物件

Returns:

回傳Promise, resolve回傳結果物件

Type
Promise

genBasic() → {Object}

Description:
  • 建立原生eventemitter3實例

Source:
Returns:

回傳eventemitter3實例

Type
Object

genSafe(funGetListenerErroropt) → {Object}

Description:
  • 建立事件物件, 並攔截應用端監聽器之錯誤

    適用於emit以setTimeout延後派發之情境(如cache等內部以timer脫勾派發者): 監聽器同步拋錯即為計時器回呼內之uncaughtException, async監聽器reject即為unhandledRejection, 兩者於nodejs皆使整個行程崩潰(伺服器端即整個服務死亡), 且emit端無法以try catch攔截; 又若事件之參數含該請求之pm(如execute/upload/download), 監聽器出錯而未settle會使請求永久懸置。 故於註冊時包裝監聽器, 同步拋錯與async reject皆交由funGetListenerError處置(由呼叫端決定是否reject pm、發error事件)

    以on/once/addListener註冊者皆包裝; 包裝函數以(原函數, 事件名)為鍵快取, 同一組合重用同一包裝, 使off/removeListener能以原函數反查移除(eventemitter3以函數識別嚴格比對), 同一函數掛於多個事件亦各自正確; once由eventemitter3內部以包裝函數自行移除, 傳入者已為包裝函數則直通不再包一層 listeners()對外回傳原函數(非包裝函數); 包裝函數於該事件已無註冊時(off/once自動移除/removeAllListeners)自快取清除, 避免長壽原函數配動態事件名無界累積 funGetListenerError本身同步拋錯或回傳rejection(async handler)皆被吞掉, 避免防護函數反成崩潰來源; 監聽器移除後其尚未settle之async reject仍會回報(依當下是否有error監聽者決定emit或console.error)

    未提供funGetListenerError時採預設政策: 事件參數args[0].pm若為promise-like且可reject(具then與reject, 即genPm之形狀; 業務物件恰有reject方法不算)先reject之(reject自身出錯不影響後續通報), 使模組流程不因監聽器出錯而懸置; 再於同一實例emit('error', { fun: 'listener', name, msg: err, args })供呼叫端得知; 若出錯者本身即為error事件之監聽器(否則無限遞迴)、或實例上無任何error監聽者(eventemitter3對無人監聽之error不throw亦不印, 錯誤會無聲消失), 則改以console.error留痕

Source:
Parameters:
Name Type Attributes Description
funGetListenerError function <optional>

監聽器出錯時之回呼, 傳入(name, err, args), name為事件名稱, err為錯誤, args為該次派發之參數陣列, 未提供則採預設政策

Returns:

回傳eventemitter3實例

Type
Object

parseJsEntryFromCmd(cmdPath) → {String|null}

Description:
  • 從.cmd shim中解析出實際入口檔案路徑(可能為JS, 亦可能為原生.exe) npm全域安裝的.cmd格式固定, 末行為: ... "%_prog%" "%dp0%\node_modules...\entry" %* 入口可能為.js / .cjs / .mjs / 無副檔名 / .exe(如opencode的bin/opencode.exe), 故一律抓引號內node_modules後的相對路徑, 再以fsIsFile驗證實體檔存在 (只匹配.js會讓無副檔名入口落入cmd.exe fallback, 破壞多行prompt) 回傳後由buildSpawnArgs依副檔名決定: .exe直接spawn, 其餘交給node

Source:
Parameters:
Name Type Description
cmdPath String

輸入.cmd檔案路徑字串

Returns:

回傳入口檔案路徑字串, 無法解析回傳null

Type
String | null

parseVersion(v) → {Array|null}

Description:
  • 自字串解析版本號(取第一個「數字.數字.數字」)

Source:
Parameters:
Name Type Description
v String

輸入字串

Returns:

回傳三段整數陣列, 無法解析回傳null

Type
Array | null

resolveCommand(cmd) → {String}

Description:
  • 用where指令找到命令的實際路徑(.cmd / .exe)

Source:
Parameters:
Name Type Description
cmd String

輸入命令字串

Returns:

回傳解析後之命令路徑字串

Type
String