@yarn-tool/detect-package-manager 1.0.5 → 1.0.6
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.
- package/CHANGELOG.md +15 -0
- package/index.d.ts +5 -5
- package/index.js +2 -0
- package/index.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,21 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [1.0.6](https://github.com/bluelovers/ws-yarn-workspaces/compare/@yarn-tool/detect-package-manager@1.0.5...@yarn-tool/detect-package-manager@1.0.6) (2026-03-10)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### BREAKING CHANGES
|
|
10
|
+
|
|
11
|
+
* **detect-package-manager:** 過濾 npmClients 陣列中的 null、undefined 和空值
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### 🐛 Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **detect-package-manager:** 過濾 npmClients 陣列中的 null、undefined 和空值 ([c19b988](https://github.com/bluelovers/ws-yarn-workspaces/commit/c19b988b4a1c06fd5e319d4655d9f64b77fd73df))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
6
21
|
## [1.0.5](https://github.com/bluelovers/ws-yarn-workspaces/compare/@yarn-tool/detect-package-manager@1.0.4...@yarn-tool/detect-package-manager@1.0.5) (2026-03-09)
|
|
7
22
|
|
|
8
23
|
|
package/index.d.ts
CHANGED
|
@@ -66,19 +66,19 @@ export declare function _handleOptionsWhichPackageManagerCore(returnDefaultOrOpt
|
|
|
66
66
|
* @param returnDefaultOrOptions - 選項輸入 / Options input
|
|
67
67
|
* @returns 包含選項與檢查列表的物件 / Object containing options and check list
|
|
68
68
|
*/
|
|
69
|
-
export declare function handleOptionsWhichPackageManager(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): {
|
|
69
|
+
export declare function handleOptionsWhichPackageManager<T extends string = IPackageManager>(npmClients?: ITSArrayListMaybeReadonly<IPackageManager | T> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): {
|
|
70
70
|
options: IOptionsWhichPackageManager;
|
|
71
71
|
/**
|
|
72
72
|
* 合併使用者指定的優先順序與預設順序
|
|
73
73
|
* Merge user-specified priority with default order
|
|
74
74
|
*/
|
|
75
|
-
clientsToCheck: readonly IPackageManager[];
|
|
75
|
+
clientsToCheck: readonly (T | IPackageManager)[];
|
|
76
76
|
};
|
|
77
77
|
/**
|
|
78
78
|
* 合併使用者指定的優先順序與預設順序
|
|
79
79
|
* Merge user-specified priority with default order
|
|
80
80
|
*/
|
|
81
|
-
export declare function _handleClientsToCheck(npmClients?: ITSArrayListMaybeReadonly<
|
|
81
|
+
export declare function _handleClientsToCheck<T extends string = IPackageManager>(npmClients?: ITSArrayListMaybeReadonly<T> | undefined, options?: IOptionsWhichPackageManager): readonly (IPackageManager | T)[];
|
|
82
82
|
/**
|
|
83
83
|
* 使用 which 依序檢查套件管理器列表,返回第一個可用的
|
|
84
84
|
* Sequentially check package managers using which, return the first available one
|
|
@@ -94,7 +94,7 @@ export declare function _handleClientsToCheck(npmClients?: ITSArrayListMaybeRead
|
|
|
94
94
|
* @param returnDefaultOrOptions - 選項輸入 (布林值或 IOptionsWhichPackageManager) / Options input (boolean or IOptionsWhichPackageManager)
|
|
95
95
|
* @yield - 可用的套件管理器元組 [名稱, 路徑] / Available package manager tuple [name, path]
|
|
96
96
|
*/
|
|
97
|
-
export declare function _whichPackageManagerAsyncGenerator(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): ITSAsyncGenerator<IResultDetectPackageManagerRaw
|
|
97
|
+
export declare function _whichPackageManagerAsyncGenerator<T extends string = IPackageManager>(npmClients?: ITSArrayListMaybeReadonly<IPackageManager | T> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): ITSAsyncGenerator<IResultDetectPackageManagerRaw<IPackageManager | T>>;
|
|
98
98
|
/**
|
|
99
99
|
* 非同步生成器核心實作 - 依序檢查每個套件管理器是否可用
|
|
100
100
|
* Async generator core implementation - sequentially check each package manager for availability
|
|
@@ -136,7 +136,7 @@ export declare function whichPackageManagerAsyncAll(npmClients?: ITSArrayListMay
|
|
|
136
136
|
* @param returnDefaultOrOptions - 選項輸入 (布林值或 IOptionsWhichPackageManager) / Options input (boolean or IOptionsWhichPackageManager)
|
|
137
137
|
* @yield - 可用的套件管理器元組 [名稱, 路徑] / Available package manager tuple [name, path]
|
|
138
138
|
*/
|
|
139
|
-
export declare function _whichPackageManagerSyncGenerator(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): ITSGenerator<IResultDetectPackageManagerRaw
|
|
139
|
+
export declare function _whichPackageManagerSyncGenerator<T extends string = IPackageManager>(npmClients?: ITSArrayListMaybeReadonly<IPackageManager | T> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): ITSGenerator<IResultDetectPackageManagerRaw<IPackageManager | T>>;
|
|
140
140
|
/**
|
|
141
141
|
* 同步生成器核心實作 - 依序檢查每個套件管理器是否可用
|
|
142
142
|
* Sync generator core implementation - sequentially check each package manager for availability
|
package/index.js
CHANGED
|
@@ -81,6 +81,8 @@ function _handleClientsToCheck(npmClients, options) {
|
|
|
81
81
|
* Merge user-specified priority with default order
|
|
82
82
|
*/
|
|
83
83
|
if (npmClients === null || npmClients === void 0 ? void 0 : npmClients.length) {
|
|
84
|
+
// 過濾不合法的名稱
|
|
85
|
+
npmClients = npmClients.filter(v => v === null || v === void 0 ? void 0 : v.length);
|
|
84
86
|
return (options === null || options === void 0 ? void 0 : options.noUseDefaultClients)
|
|
85
87
|
? [...new Set([...npmClients])]
|
|
86
88
|
: [...new Set([...npmClients, ...defaultClients])];
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport { ITSAsyncGenerator, ITSGenerator, ITSTypeAndStringLiteral, ITSArrayListMaybeReadonly } from 'ts-type';\nimport which, { sync as whichSync } from 'which';\n\n/**\n * 支援的套件管理器類型\n * Supported package manager types\n */\nexport const enum EnumPackageManager\n{\n\t'yarn' = 'yarn',\n\t'npm' = 'npm',\n\t'pnpm' = 'pnpm',\n};\n\n/**\n * 支援的套件管理器類型\n * Supported package manager types\n */\nexport type IPackageManager = ITSTypeAndStringLiteral<EnumPackageManager>;\n\n/**\n * 預設的套件管理器優先順序\n * Default package manager priority order\n */\nconst defaultClients: readonly IPackageManager[] = [EnumPackageManager.pnpm, EnumPackageManager.yarn, EnumPackageManager.npm];\n\n/**\n * 偵測結果類型 - 包含套件管理器名稱和命令路徑\n * Detection result type - contains package manager name and command path\n *\n * @typeParam T - 套件管理器類型 / Package manager type\n */\nexport type IResultDetectPackageManagerRaw<T extends IPackageManager = IPackageManager> = IResultDetectRawCore<T>;\n\n/**\n * 偵測結果核心類型 - 元組 [名稱, 路徑?]\n * Detection result core type - tuple [name, path?]\n *\n * @typeParam T - 字串類型 / String type\n */\nexport type IResultDetectRawCore<T extends string = IPackageManager> = readonly [T, string?];\n\n/**\n * which 命令選項配置\n * which command options configuration\n */\nconst _whichOptions: which.Options = {\n\tnothrow: true,\n}\n\n/**\n * 選項配置介面\n * Options configuration interface\n */\nexport interface IOptionsWhichPackageManager\n{\n\t/**\n\t * 當找不到時是否返回預設值\n\t * Whether to return default when not found\n\t */\n\treturnDefault?: boolean;\n\t/**\n\t * 只使用使用者指定的套件管理器\n\t * 不合併使用者指定的優先順序與預設順序\n\t * Only use user-specified package managers\n\t * Do not merge user-specified priority with default order\n\t */\n\tnoUseDefaultClients?: boolean;\n}\n\n/**\n * 選項輸入類型 - 可接受布林值或選項物件\n * Options input type - accepts boolean or options object\n */\nexport type IRuntimeOptionInput = boolean | IOptionsWhichPackageManager;\n\n/**\n * 核心選項處理函數 - 將輸入轉換為標準選項物件\n * Core options handler function - converts input to standard options object\n *\n * @param returnDefaultOrOptions - 布林值或選項物件 / Boolean or options object\n * @returns 標準選項物件 / Standard options object\n */\nexport function _handleOptionsWhichPackageManagerCore(returnDefaultOrOptions?: IRuntimeOptionInput): IOptionsWhichPackageManager\n{\n\tif (typeof returnDefaultOrOptions === 'boolean')\n\t{\n\t\treturnDefaultOrOptions = {\n\t\t\treturnDefault: returnDefaultOrOptions,\n\t\t}\n\t}\n\n\treturn returnDefaultOrOptions ?? {};\n}\n\n/**\n * 處理套件管理器選項與客戶端列表\n * Handle package manager options and client list\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @param returnDefaultOrOptions - 選項輸入 / Options input\n * @returns 包含選項與檢查列表的物件 / Object containing options and check list\n */\nexport function handleOptionsWhichPackageManager(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput)\n{\n\treturnDefaultOrOptions = _handleOptionsWhichPackageManagerCore(returnDefaultOrOptions);\n\n\treturn {\n\t\toptions: returnDefaultOrOptions,\n\t\t/**\n\t\t * 合併使用者指定的優先順序與預設順序\n\t\t * Merge user-specified priority with default order\n\t\t */\n\t\tclientsToCheck: _handleClientsToCheck(npmClients, returnDefaultOrOptions),\n\t};\n}\n\n/**\n * 合併使用者指定的優先順序與預設順序\n * Merge user-specified priority with default order\n */\nexport function _handleClientsToCheck(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, options?: IOptionsWhichPackageManager): readonly IPackageManager[]\n{\n\t/**\n\t * 合併使用者指定的優先順序與預設順序\n\t * Merge user-specified priority with default order\n\t */\n\tif (npmClients?.length)\n\t{\n\t\treturn options?.noUseDefaultClients\n\t\t\t? [...new Set([...npmClients])]\n\t\t\t: [...new Set([...npmClients, ...defaultClients])];\n\t}\n\n\treturn [...defaultClients];\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,返回第一個可用的\n * Sequentially check package managers using which, return the first available one\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 可用的套件管理器名稱 / Available package manager name\n */\n/**\n * 非同步生成器 - 使用 which 依序檢查套件管理器列表\n * Async generator - sequentially check package managers using which\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @param returnDefaultOrOptions - 選項輸入 (布林值或 IOptionsWhichPackageManager) / Options input (boolean or IOptionsWhichPackageManager)\n * @yield - 可用的套件管理器元組 [名稱, 路徑] / Available package manager tuple [name, path]\n */\n// @ts-ignore\nexport async function* _whichPackageManagerAsyncGenerator(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): ITSAsyncGenerator<IResultDetectPackageManagerRaw>\n{\n\n\tconst { clientsToCheck, options } = handleOptionsWhichPackageManager(npmClients, returnDefaultOrOptions);\n\n\tyield* _whichAsyncGeneratorCore(clientsToCheck, options) as any;\n}\n\n/**\n * 非同步生成器核心實作 - 依序檢查每個套件管理器是否可用\n * Async generator core implementation - sequentially check each package manager for availability\n *\n * @typeParam T - 套件管理器類型 / Package manager type\n * @param clientsToCheck - 要檢查的套件管理器列表 / List of package managers to check\n * @param options - 選項 / Options\n * @yield - 可用的套件管理器元組 [名稱, 路徑] / Available package manager tuple [name, path]\n */\nexport async function* _whichAsyncGeneratorCore<T extends string = IPackageManager>(clientsToCheck: ITSArrayListMaybeReadonly<T>, options: IOptionsWhichPackageManager): ITSAsyncGenerator<IResultDetectRawCore<T>>\n{\n\tlet notFound = true;\n\n\t/**\n\t * 依序檢查每個套件管理器是否可用\n\t * Check each package manager sequentially for availability\n\t */\n\tfor (const client of clientsToCheck)\n\t{\n\t\tconst commandPath = await which(client, _whichOptions).catch(() => null);\n\t\tif (commandPath)\n\t\t{\n\t\t\tyield [client, commandPath as string] as IResultDetectRawCore<T>;\n\t\t\tnotFound = false;\n\t\t}\n\t}\n\n\tif (options.returnDefault && notFound) return [clientsToCheck[0]] as IResultDetectRawCore<T>;\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,返回第一個可用的\n * Sequentially check package managers using which, return the first available one\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 可用的套件管理器名稱 / Available package manager name\n */\nexport async function whichPackageManagerAsync(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): Promise<IPackageManager>\n{\n\treturn _whichPackageManagerAsyncGenerator(npmClients, returnDefaultOrOptions).next().then(next => next.value?.[0]);\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,返回所有可用的套件管理器陣列\n * Sequentially check package managers using which, return all available package managers as array\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 所有可用的套件管理器陣列 / Array of all available package managers\n */\nexport async function whichPackageManagerAsyncAll(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): Promise<IPackageManager[]>\n{\n\tconst result: IPackageManager[] = [];\n\n\tfor await (const client of _whichPackageManagerAsyncGenerator(npmClients, returnDefaultOrOptions))\n\t{\n\t\tresult.push(client[0]);\n\t}\n\n\treturn result;\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,以同步生成器方式 yield 所有可用的套件管理器\n * Sequentially check package managers using which, yield all available package managers via sync generator\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 可用的套件管理器(透過 yield)/ Available package manager (via yield)\n */\n/**\n * 同步生成器 - 使用 which 依序檢查套件管理器列表\n * Sync generator - sequentially check package managers using which\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @param returnDefaultOrOptions - 選項輸入 (布林值或 IOptionsWhichPackageManager) / Options input (boolean or IOptionsWhichPackageManager)\n * @yield - 可用的套件管理器元組 [名稱, 路徑] / Available package manager tuple [name, path]\n */\n// @ts-ignore\nexport function* _whichPackageManagerSyncGenerator(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): ITSGenerator<IResultDetectPackageManagerRaw>\n{\n\tconst { clientsToCheck, options } = handleOptionsWhichPackageManager(npmClients, returnDefaultOrOptions);\n\n\tyield* _whichSyncGeneratorCore(clientsToCheck, options) as any;\n}\n\n/**\n * 同步生成器核心實作 - 依序檢查每個套件管理器是否可用\n * Sync generator core implementation - sequentially check each package manager for availability\n *\n * @typeParam T - 套件管理器類型 / Package manager type\n * @param clientsToCheck - 要檢查的套件管理器列表 / List of package managers to check\n * @param options - 選項 / Options\n * @yield - 可用的套件管理器元組 [名稱, 路徑] / Available package manager tuple [name, path]\n */\nexport function* _whichSyncGeneratorCore<T extends string = IPackageManager>(clientsToCheck: ITSArrayListMaybeReadonly<T>, options: IOptionsWhichPackageManager): ITSGenerator<IResultDetectRawCore<T>>\n{\n\tlet notFound = true;\n\n\t/**\n\t * 依序檢查每個套件管理器是否可用\n\t * Check each package manager sequentially for availability\n\t */\n\tfor (const client of clientsToCheck)\n\t{\n\t\tconst commandPath = whichSync(client, _whichOptions);\n\t\tif (commandPath)\n\t\t{\n\t\t\tyield [client, commandPath as string] as IResultDetectRawCore<T>;\n\t\t\tnotFound = false;\n\t\t}\n\t}\n\n\tif (options.returnDefault && notFound) return [clientsToCheck[0]] as IResultDetectRawCore<T>;\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,返回所有可用的套件管理器陣列(同步版本)\n * Sequentially check package managers using which, return all available package managers as array (sync version)\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 所有可用的套件管理器陣列 / Array of all available package managers\n */\nexport function whichPackageManagerSyncAll(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): IPackageManager[]\n{\n\tconst result: IPackageManager[] = [];\n\n\tfor (const client of _whichPackageManagerSyncGenerator(npmClients, returnDefaultOrOptions))\n\t{\n\t\tresult.push(client[0]);\n\t}\n\n\treturn result;\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,返回第一個可用的\n * Sequentially check package managers using which, return the first available one\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 可用的套件管理器名稱 / Available package manager name\n */\nexport function whichPackageManagerSync(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput)\n{\n\treturn _whichPackageManagerSyncGenerator(npmClients, returnDefaultOrOptions).next().value?.[0]\n}\n\nexport default whichPackageManagerSync\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAoFA,sFAUC;AAUD,4EAYC;AAMD,sDAiBC;AAkBD,gFAMC;AAWD,4DAmBC;AASD,4DAGC;AASD,kEAUC;AAkBD,8EAKC;AAWD,0DAmBC;AASD,gEAUC;AASD,0DAGC;;AAlTD,uDAAiD;AAEjD;;;GAGG;AACH,IAAkB,kBAKjB;AALD,WAAkB,kBAAkB;IAEnC,mCAAe,CAAA;IACf,iCAAa,CAAA;IACb,mCAAe,CAAA;AAChB,CAAC,EALiB,kBAAkB,kCAAlB,kBAAkB,QAKnC;AAAA,CAAC;AAQF;;;GAGG;AACH,MAAM,cAAc,GAA+B,gHAA0E,CAAC;AAkB9H;;;GAGG;AACH,MAAM,aAAa,GAAkB;IACpC,OAAO,EAAE,IAAI;CACb,CAAA;AA4BD;;;;;;GAMG;AACH,SAAgB,qCAAqC,CAAC,sBAA4C;IAEjG,IAAI,OAAO,sBAAsB,KAAK,SAAS,EAC/C,CAAC;QACA,sBAAsB,GAAG;YACxB,aAAa,EAAE,sBAAsB;SACrC,CAAA;IACF,CAAC;IAED,OAAO,sBAAsB,aAAtB,sBAAsB,cAAtB,sBAAsB,GAAI,EAAE,CAAC;AACrC,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,gCAAgC,CAAqC,UAAuE,EAAE,sBAA4C;IAEzM,sBAAsB,GAAG,qCAAqC,CAAC,sBAAsB,CAAC,CAAC;IAEvF,OAAO;QACN,OAAO,EAAE,sBAAsB;QAC/B;;;WAGG;QACH,cAAc,EAAE,qBAAqB,CAAC,UAAU,EAAE,sBAAsB,CAAC;KACzE,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,qBAAqB,CAAqC,UAAqD,EAAE,OAAqC;IAErK;;;OAGG;IACH,IAAI,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,MAAM,EACtB,CAAC;QACA,WAAW;QACX,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,CAAC,CAAC;QAE/C,OAAO,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,mBAAmB;YAClC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,GAAG,cAAc,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH;;;;;;;GAOG;AACH,aAAa;AACN,KAAK,SAAS,CAAC,CAAC,kCAAkC,CAAqC,UAAuE,EAAE,sBAA4C;IAGlN,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,gCAAgC,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAEzG,KAAK,CAAC,CAAC,wBAAwB,CAAC,cAAc,EAAE,OAAO,CAAQ,CAAC;AACjE,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,SAAS,CAAC,CAAC,wBAAwB,CAAqC,cAA4C,EAAE,OAAoC;IAErK,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB;;;OAGG;IACH,KAAK,MAAM,MAAM,IAAI,cAAc,EACnC,CAAC;QACA,MAAM,WAAW,GAAG,MAAM,IAAA,eAAK,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACzE,IAAI,WAAW,EACf,CAAC;YACA,MAAM,CAAC,MAAM,EAAE,WAAqB,CAA4B,CAAC;YACjE,QAAQ,GAAG,KAAK,CAAC;QAClB,CAAC;IACF,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,IAAI,QAAQ;QAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAA4B,CAAC;AAC9F,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,wBAAwB,CAAC,UAAmE,EAAE,sBAA4C;IAE/J,OAAO,kCAAkC,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,WAAC,OAAA,MAAA,IAAI,CAAC,KAAK,0CAAG,CAAC,CAAC,CAAA,EAAA,CAAC,CAAC;AACpH,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,2BAA2B,CAAC,UAAmE,EAAE,sBAA4C;IAElK,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,IAAI,KAAK,EAAE,MAAM,MAAM,IAAI,kCAAkC,CAAC,UAAU,EAAE,sBAAsB,CAAC,EACjG,CAAC;QACA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH;;;;;;;GAOG;AACH,aAAa;AACb,QAAe,CAAC,CAAC,iCAAiC,CAAqC,UAAuE,EAAE,sBAA4C;IAE3M,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,GAAG,gCAAgC,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAEzG,KAAK,CAAC,CAAC,uBAAuB,CAAC,cAAc,EAAE,OAAO,CAAQ,CAAC;AAChE,CAAC;AAED;;;;;;;;GAQG;AACH,QAAe,CAAC,CAAC,uBAAuB,CAAqC,cAA4C,EAAE,OAAoC;IAE9J,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB;;;OAGG;IACH,KAAK,MAAM,MAAM,IAAI,cAAc,EACnC,CAAC;QACA,MAAM,WAAW,GAAG,IAAA,YAAS,EAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACrD,IAAI,WAAW,EACf,CAAC;YACA,MAAM,CAAC,MAAM,EAAE,WAAqB,CAA4B,CAAC;YACjE,QAAQ,GAAG,KAAK,CAAC;QAClB,CAAC;IACF,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,IAAI,QAAQ;QAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAA4B,CAAC;AAC9F,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,0BAA0B,CAAC,UAAmE,EAAE,sBAA4C;IAE3J,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,MAAM,IAAI,iCAAiC,CAAC,UAAU,EAAE,sBAAsB,CAAC,EAC1F,CAAC;QACA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,uBAAuB,CAAC,UAAmE,EAAE,sBAA4C;;IAExJ,OAAO,MAAA,iCAAiC,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,0CAAG,CAAC,CAAC,CAAA;AAC/F,CAAC;AAED,kBAAe,uBAAuB,CAAA","sourcesContent":["import _ from 'lodash';\nimport { ITSAsyncGenerator, ITSGenerator, ITSTypeAndStringLiteral, ITSArrayListMaybeReadonly } from 'ts-type';\nimport which, { sync as whichSync } from 'which';\n\n/**\n * 支援的套件管理器類型\n * Supported package manager types\n */\nexport const enum EnumPackageManager\n{\n\t'yarn' = 'yarn',\n\t'npm' = 'npm',\n\t'pnpm' = 'pnpm',\n};\n\n/**\n * 支援的套件管理器類型\n * Supported package manager types\n */\nexport type IPackageManager = ITSTypeAndStringLiteral<EnumPackageManager>;\n\n/**\n * 預設的套件管理器優先順序\n * Default package manager priority order\n */\nconst defaultClients: readonly IPackageManager[] = [EnumPackageManager.pnpm, EnumPackageManager.yarn, EnumPackageManager.npm];\n\n/**\n * 偵測結果類型 - 包含套件管理器名稱和命令路徑\n * Detection result type - contains package manager name and command path\n *\n * @typeParam T - 套件管理器類型 / Package manager type\n */\nexport type IResultDetectPackageManagerRaw<T extends IPackageManager = IPackageManager> = IResultDetectRawCore<T>;\n\n/**\n * 偵測結果核心類型 - 元組 [名稱, 路徑?]\n * Detection result core type - tuple [name, path?]\n *\n * @typeParam T - 字串類型 / String type\n */\nexport type IResultDetectRawCore<T extends string = IPackageManager> = readonly [T, string?];\n\n/**\n * which 命令選項配置\n * which command options configuration\n */\nconst _whichOptions: which.Options = {\n\tnothrow: true,\n}\n\n/**\n * 選項配置介面\n * Options configuration interface\n */\nexport interface IOptionsWhichPackageManager\n{\n\t/**\n\t * 當找不到時是否返回預設值\n\t * Whether to return default when not found\n\t */\n\treturnDefault?: boolean;\n\t/**\n\t * 只使用使用者指定的套件管理器\n\t * 不合併使用者指定的優先順序與預設順序\n\t * Only use user-specified package managers\n\t * Do not merge user-specified priority with default order\n\t */\n\tnoUseDefaultClients?: boolean;\n}\n\n/**\n * 選項輸入類型 - 可接受布林值或選項物件\n * Options input type - accepts boolean or options object\n */\nexport type IRuntimeOptionInput = boolean | IOptionsWhichPackageManager;\n\n/**\n * 核心選項處理函數 - 將輸入轉換為標準選項物件\n * Core options handler function - converts input to standard options object\n *\n * @param returnDefaultOrOptions - 布林值或選項物件 / Boolean or options object\n * @returns 標準選項物件 / Standard options object\n */\nexport function _handleOptionsWhichPackageManagerCore(returnDefaultOrOptions?: IRuntimeOptionInput): IOptionsWhichPackageManager\n{\n\tif (typeof returnDefaultOrOptions === 'boolean')\n\t{\n\t\treturnDefaultOrOptions = {\n\t\t\treturnDefault: returnDefaultOrOptions,\n\t\t}\n\t}\n\n\treturn returnDefaultOrOptions ?? {};\n}\n\n/**\n * 處理套件管理器選項與客戶端列表\n * Handle package manager options and client list\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @param returnDefaultOrOptions - 選項輸入 / Options input\n * @returns 包含選項與檢查列表的物件 / Object containing options and check list\n */\nexport function handleOptionsWhichPackageManager<T extends string = IPackageManager>(npmClients?: ITSArrayListMaybeReadonly<IPackageManager | T> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput)\n{\n\treturnDefaultOrOptions = _handleOptionsWhichPackageManagerCore(returnDefaultOrOptions);\n\n\treturn {\n\t\toptions: returnDefaultOrOptions,\n\t\t/**\n\t\t * 合併使用者指定的優先順序與預設順序\n\t\t * Merge user-specified priority with default order\n\t\t */\n\t\tclientsToCheck: _handleClientsToCheck(npmClients, returnDefaultOrOptions),\n\t};\n}\n\n/**\n * 合併使用者指定的優先順序與預設順序\n * Merge user-specified priority with default order\n */\nexport function _handleClientsToCheck<T extends string = IPackageManager>(npmClients?: ITSArrayListMaybeReadonly<T> | undefined, options?: IOptionsWhichPackageManager): readonly (IPackageManager | T)[]\n{\n\t/**\n\t * 合併使用者指定的優先順序與預設順序\n\t * Merge user-specified priority with default order\n\t */\n\tif (npmClients?.length)\n\t{\n\t\t// 過濾不合法的名稱\n\t\tnpmClients = npmClients.filter(v => v?.length);\n\n\t\treturn options?.noUseDefaultClients\n\t\t\t? [...new Set([...npmClients])]\n\t\t\t: [...new Set([...npmClients, ...defaultClients])];\n\t}\n\n\treturn [...defaultClients];\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,返回第一個可用的\n * Sequentially check package managers using which, return the first available one\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 可用的套件管理器名稱 / Available package manager name\n */\n/**\n * 非同步生成器 - 使用 which 依序檢查套件管理器列表\n * Async generator - sequentially check package managers using which\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @param returnDefaultOrOptions - 選項輸入 (布林值或 IOptionsWhichPackageManager) / Options input (boolean or IOptionsWhichPackageManager)\n * @yield - 可用的套件管理器元組 [名稱, 路徑] / Available package manager tuple [name, path]\n */\n// @ts-ignore\nexport async function* _whichPackageManagerAsyncGenerator<T extends string = IPackageManager>(npmClients?: ITSArrayListMaybeReadonly<IPackageManager | T> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): ITSAsyncGenerator<IResultDetectPackageManagerRaw<IPackageManager | T>>\n{\n\n\tconst { clientsToCheck, options } = handleOptionsWhichPackageManager(npmClients, returnDefaultOrOptions);\n\n\tyield* _whichAsyncGeneratorCore(clientsToCheck, options) as any;\n}\n\n/**\n * 非同步生成器核心實作 - 依序檢查每個套件管理器是否可用\n * Async generator core implementation - sequentially check each package manager for availability\n *\n * @typeParam T - 套件管理器類型 / Package manager type\n * @param clientsToCheck - 要檢查的套件管理器列表 / List of package managers to check\n * @param options - 選項 / Options\n * @yield - 可用的套件管理器元組 [名稱, 路徑] / Available package manager tuple [name, path]\n */\nexport async function* _whichAsyncGeneratorCore<T extends string = IPackageManager>(clientsToCheck: ITSArrayListMaybeReadonly<T>, options: IOptionsWhichPackageManager): ITSAsyncGenerator<IResultDetectRawCore<T>>\n{\n\tlet notFound = true;\n\n\t/**\n\t * 依序檢查每個套件管理器是否可用\n\t * Check each package manager sequentially for availability\n\t */\n\tfor (const client of clientsToCheck)\n\t{\n\t\tconst commandPath = await which(client, _whichOptions).catch(() => null);\n\t\tif (commandPath)\n\t\t{\n\t\t\tyield [client, commandPath as string] as IResultDetectRawCore<T>;\n\t\t\tnotFound = false;\n\t\t}\n\t}\n\n\tif (options.returnDefault && notFound) return [clientsToCheck[0]] as IResultDetectRawCore<T>;\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,返回第一個可用的\n * Sequentially check package managers using which, return the first available one\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 可用的套件管理器名稱 / Available package manager name\n */\nexport async function whichPackageManagerAsync(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): Promise<IPackageManager>\n{\n\treturn _whichPackageManagerAsyncGenerator(npmClients, returnDefaultOrOptions).next().then(next => next.value?.[0]);\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,返回所有可用的套件管理器陣列\n * Sequentially check package managers using which, return all available package managers as array\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 所有可用的套件管理器陣列 / Array of all available package managers\n */\nexport async function whichPackageManagerAsyncAll(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): Promise<IPackageManager[]>\n{\n\tconst result: IPackageManager[] = [];\n\n\tfor await (const client of _whichPackageManagerAsyncGenerator(npmClients, returnDefaultOrOptions))\n\t{\n\t\tresult.push(client[0]);\n\t}\n\n\treturn result;\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,以同步生成器方式 yield 所有可用的套件管理器\n * Sequentially check package managers using which, yield all available package managers via sync generator\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 可用的套件管理器(透過 yield)/ Available package manager (via yield)\n */\n/**\n * 同步生成器 - 使用 which 依序檢查套件管理器列表\n * Sync generator - sequentially check package managers using which\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @param returnDefaultOrOptions - 選項輸入 (布林值或 IOptionsWhichPackageManager) / Options input (boolean or IOptionsWhichPackageManager)\n * @yield - 可用的套件管理器元組 [名稱, 路徑] / Available package manager tuple [name, path]\n */\n// @ts-ignore\nexport function* _whichPackageManagerSyncGenerator<T extends string = IPackageManager>(npmClients?: ITSArrayListMaybeReadonly<IPackageManager | T> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): ITSGenerator<IResultDetectPackageManagerRaw<IPackageManager | T>>\n{\n\tconst { clientsToCheck, options } = handleOptionsWhichPackageManager(npmClients, returnDefaultOrOptions);\n\n\tyield* _whichSyncGeneratorCore(clientsToCheck, options) as any;\n}\n\n/**\n * 同步生成器核心實作 - 依序檢查每個套件管理器是否可用\n * Sync generator core implementation - sequentially check each package manager for availability\n *\n * @typeParam T - 套件管理器類型 / Package manager type\n * @param clientsToCheck - 要檢查的套件管理器列表 / List of package managers to check\n * @param options - 選項 / Options\n * @yield - 可用的套件管理器元組 [名稱, 路徑] / Available package manager tuple [name, path]\n */\nexport function* _whichSyncGeneratorCore<T extends string = IPackageManager>(clientsToCheck: ITSArrayListMaybeReadonly<T>, options: IOptionsWhichPackageManager): ITSGenerator<IResultDetectRawCore<T>>\n{\n\tlet notFound = true;\n\n\t/**\n\t * 依序檢查每個套件管理器是否可用\n\t * Check each package manager sequentially for availability\n\t */\n\tfor (const client of clientsToCheck)\n\t{\n\t\tconst commandPath = whichSync(client, _whichOptions);\n\t\tif (commandPath)\n\t\t{\n\t\t\tyield [client, commandPath as string] as IResultDetectRawCore<T>;\n\t\t\tnotFound = false;\n\t\t}\n\t}\n\n\tif (options.returnDefault && notFound) return [clientsToCheck[0]] as IResultDetectRawCore<T>;\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,返回所有可用的套件管理器陣列(同步版本)\n * Sequentially check package managers using which, return all available package managers as array (sync version)\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 所有可用的套件管理器陣列 / Array of all available package managers\n */\nexport function whichPackageManagerSyncAll(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput): IPackageManager[]\n{\n\tconst result: IPackageManager[] = [];\n\n\tfor (const client of _whichPackageManagerSyncGenerator(npmClients, returnDefaultOrOptions))\n\t{\n\t\tresult.push(client[0]);\n\t}\n\n\treturn result;\n}\n\n/**\n * 使用 which 依序檢查套件管理器列表,返回第一個可用的\n * Sequentially check package managers using which, return the first available one\n *\n * @param npmClients - 套件管理器列表 / Package manager list\n * @returns 可用的套件管理器名稱 / Available package manager name\n */\nexport function whichPackageManagerSync(npmClients?: ITSArrayListMaybeReadonly<IPackageManager> | undefined, returnDefaultOrOptions?: IRuntimeOptionInput)\n{\n\treturn _whichPackageManagerSyncGenerator(npmClients, returnDefaultOrOptions).next().value?.[0]\n}\n\nexport default whichPackageManagerSync\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yarn-tool/detect-package-manager",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"description": "Detect available package manager (yarn, npm, pnpm) using which command",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"detect",
|
|
@@ -83,5 +83,5 @@
|
|
|
83
83
|
"publishConfig": {
|
|
84
84
|
"access": "public"
|
|
85
85
|
},
|
|
86
|
-
"gitHead": "
|
|
86
|
+
"gitHead": "b61a22288b5bbc24ba9ce0acf86b998c9785f6b6"
|
|
87
87
|
}
|