turbollm 1.12.4 → 1.12.5
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/README.md +2 -1
- package/dist/android-preload.cjs +35 -0
- package/dist/chunk-5HBNOSJB.js +46 -0
- package/dist/chunk-6GI5HUKN.js +3743 -0
- package/dist/chunk-D2YPYKUY.js +48 -0
- package/dist/cli.js +13602 -16892
- package/dist/code-routes.js +985 -0
- package/dist/code-run-manager.js +12 -0
- package/dist/package.json +1 -0
- package/dist/resolve-executable-N5Z22V66.js +8 -0
- package/dist/shell-command-7HA6D5PW.js +14 -0
- package/dist/sql-js-database-DRKIVWYL.js +107 -0
- package/dist/webdist/assets/{AgentEditPage-CdHC3qGU.js → AgentEditPage-C4VY0moS.js} +1 -1
- package/dist/webdist/assets/{ChatScreen-CZ1jxorL.js → ChatScreen-DMl17RGg.js} +15 -15
- package/dist/webdist/assets/CodeComposer-NwJXV-sS.js +1 -0
- package/dist/webdist/assets/CodeHomeScreen-DxYMMclP.js +1 -0
- package/dist/webdist/assets/{CodeSessionScreen-jIq1R-Be.js → CodeSessionScreen-D-JVlqpE.js} +3 -3
- package/dist/webdist/assets/CustomizeScreen-BMrb1z3q.js +4 -0
- package/dist/webdist/assets/DeveloperScreen-pWGlvGUQ.js +1 -0
- package/dist/webdist/assets/EnginesScreen-CUF3ct2C.js +8 -0
- package/dist/webdist/assets/HardwareSection-CFYmYeI_.js +1 -0
- package/dist/webdist/assets/ModelDetailDialog-CX9Nwgko.js +1 -0
- package/dist/webdist/assets/ModelLoadMenu-CpTSQyrz.js +1 -0
- package/dist/webdist/assets/ModelsScreen-CNcbFWD5.js +2 -0
- package/dist/webdist/assets/MonitorScreen-CcWi0WA5.js +2 -0
- package/dist/webdist/assets/OnboardingScreen-BJsWdk3r.js +1 -0
- package/dist/webdist/assets/RoutineEditPage-BlNJkZLy.js +1 -0
- package/dist/webdist/assets/RoutinesPanel-dMiytZym.js +1 -0
- package/dist/webdist/assets/SettingsScreen-4-vbStcH.js +2 -0
- package/dist/webdist/assets/SidebarResizeHandle-Zs-1qltv.js +2 -0
- package/dist/webdist/assets/{SkillEditPage-Ce5jCKvK.js → SkillEditPage-ggZet3Hq.js} +1 -1
- package/dist/webdist/assets/TokensScreen-DUgZza1M.js +1 -0
- package/dist/webdist/assets/{ToolApprovalBar-Dos3RNn4.js → ToolApprovalBar-OQucQFQf.js} +3 -3
- package/dist/webdist/assets/WorkspaceScreen-DFgY3aJv.js +1 -0
- package/dist/webdist/assets/{abnfDiagram-N423BO3Z-BIBCjVzE.js → abnfDiagram-N423BO3Z-SHwyKkJQ.js} +1 -1
- package/dist/webdist/assets/{agent-api-DZ1WgRmZ.js → agent-api-CFwqFCzt.js} +1 -1
- package/dist/webdist/assets/alert-dialog-CVqoWRWc.js +1 -0
- package/dist/webdist/assets/{arc-zf5dBjx2.js → arc-DqmuRpYc.js} +1 -1
- package/dist/webdist/assets/{architectureDiagram-T3A2C74G-DnThYv0T.js → architectureDiagram-T3A2C74G-D7FxJSd4.js} +1 -1
- package/dist/webdist/assets/{arrow-left-D_WlfmJO.js → arrow-left-BkV1B6ug.js} +1 -1
- package/dist/webdist/assets/{badge-DIC-2P-e.js → badge-4b8OsMEX.js} +1 -1
- package/dist/webdist/assets/{blockDiagram-VBNYF7ZC-BNrOo7My.js → blockDiagram-VBNYF7ZC-DUxFHegq.js} +1 -1
- package/dist/webdist/assets/{bot-D4oi44Nz.js → bot-BK-6NRqy.js} +1 -1
- package/dist/webdist/assets/{c4Diagram-5PPSVZJV-CGWOFS9g.js → c4Diagram-5PPSVZJV-BNivJaYT.js} +1 -1
- package/dist/webdist/assets/channel-CY9E1Kb4.js +1 -0
- package/dist/webdist/assets/{chat-api-fC2sf7Mj.js → chat-api-DlO-w34y.js} +1 -1
- package/dist/webdist/assets/{chat-queries-qpktuERN.js → chat-queries-LKWLAeuG.js} +1 -1
- package/dist/webdist/assets/{chevron-down-ChtnXh37.js → chevron-down-zbOJaXec.js} +1 -1
- package/dist/webdist/assets/{chevron-left-DXZuhCTN.js → chevron-left-DwWh7ZHr.js} +1 -1
- package/dist/webdist/assets/{chevron-right-BSHofHoG.js → chevron-right-BdDJxnyQ.js} +1 -1
- package/dist/webdist/assets/{chunk-2GRJ4B5K-BToCFJph.js → chunk-2GRJ4B5K-aQaE3vvo.js} +1 -1
- package/dist/webdist/assets/{chunk-2Q5K7J3B-C2E2U_Wt.js → chunk-2Q5K7J3B-Bjz5EQqP.js} +1 -1
- package/dist/webdist/assets/{chunk-5RXB4S5H-Bt8_ImVV.js → chunk-5RXB4S5H-BH5ljOIu.js} +1 -1
- package/dist/webdist/assets/{chunk-5VM5RSS4-BEfsXc2S.js → chunk-5VM5RSS4-CsIYJ0Jp.js} +1 -1
- package/dist/webdist/assets/{chunk-6Q2QTUOP-DHZTU_LD.js → chunk-6Q2QTUOP-DMRqg9RQ.js} +1 -1
- package/dist/webdist/assets/{chunk-GF5L2VYU-DEUAN61L.js → chunk-GF5L2VYU-DkpR5VII.js} +1 -1
- package/dist/webdist/assets/{chunk-JWPE2WC7-Dw2aRPzh.js → chunk-JWPE2WC7-BD1-fEKP.js} +1 -1
- package/dist/webdist/assets/{chunk-KBJHAD2P-Cxgw5S4G.js → chunk-KBJHAD2P-DbesCmhG.js} +1 -1
- package/dist/webdist/assets/{chunk-RYQCIY6F-Bv3rJwBY.js → chunk-RYQCIY6F-BlX7uhQc.js} +1 -1
- package/dist/webdist/assets/{chunk-XXDRQBXY-DOGwIQ-5.js → chunk-XXDRQBXY-B5SFnzz3.js} +1 -1
- package/dist/webdist/assets/{circle-check-PwESlMlu.js → circle-check-BPE-i-tc.js} +1 -1
- package/dist/webdist/assets/{circle-x-Cta68_gk.js → circle-x-xsk30GP6.js} +1 -1
- package/dist/webdist/assets/classDiagram-JCYQIIEL-P_ZoCHhi.js +1 -0
- package/dist/webdist/assets/classDiagram-v2-OCEON4UE-P_ZoCHhi.js +1 -0
- package/dist/webdist/assets/collapsible-CNfR4Moz.js +1 -0
- package/dist/webdist/assets/{common-CJJrr1d6.js → common-DKmzP8Iu.js} +1 -1
- package/dist/webdist/assets/{cose-bilkent-JH36ORCC-DpQxukTC.js → cose-bilkent-JH36ORCC-CQqOUIWj.js} +1 -1
- package/dist/webdist/assets/{cynefin-VYW2F7L2-C4ao01h7.js → cynefin-VYW2F7L2-D9iY9Afn.js} +1 -1
- package/dist/webdist/assets/{cynefinDiagram-MW4NZA55-DkkKzRZl.js → cynefinDiagram-MW4NZA55-BteySMfQ.js} +1 -1
- package/dist/webdist/assets/{dagre-VZM6K2ZE-vSbclD6H.js → dagre-VZM6K2ZE-CgfkgcDR.js} +1 -1
- package/dist/webdist/assets/{diagram-7IWD3JNH-BWofSihb.js → diagram-7IWD3JNH-egXofmHL.js} +1 -1
- package/dist/webdist/assets/{diagram-B4RE2ZJO-BF6NzW6i.js → diagram-B4RE2ZJO-CadYFhIH.js} +1 -1
- package/dist/webdist/assets/{diagram-LBJQPF4R-xr0rYyvY.js → diagram-LBJQPF4R-SLVfTI-S.js} +1 -1
- package/dist/webdist/assets/{diagram-Q27KOJAE-DY2EOYz8.js → diagram-Q27KOJAE-BWp4lrgb.js} +1 -1
- package/dist/webdist/assets/{diagram-UB23O5K3-zrZF27ik.js → diagram-UB23O5K3-DnGLUoSC.js} +1 -1
- package/dist/webdist/assets/{dropdown-menu-C7SX-XbP.js → dropdown-menu-CtEFJwSB.js} +1 -1
- package/dist/webdist/assets/{ebnfDiagram-BXEA7PRR-Cdqx9C3b.js → ebnfDiagram-BXEA7PRR-bM2FJmRT.js} +1 -1
- package/dist/webdist/assets/{erDiagram-JOGREHBK-DNOLDkDZ.js → erDiagram-JOGREHBK-j1DtaL1m.js} +1 -1
- package/dist/webdist/assets/{external-link-MZUdNZic.js → external-link-DF5_PKjr.js} +1 -1
- package/dist/webdist/assets/{file-text-DtzC6GM1.js → file-text-B0wPbdZg.js} +1 -1
- package/dist/webdist/assets/{flowDiagram-UKHOOZJN-ChbrkceS.js → flowDiagram-UKHOOZJN-D5MLDKXv.js} +1 -1
- package/dist/webdist/assets/{folder-input-Czg0RwSd.js → folder-input-BvyBtyaL.js} +1 -1
- package/dist/webdist/assets/{folder-plus-BndMFsaS.js → folder-plus-DIX0-FRl.js} +1 -1
- package/dist/webdist/assets/{ganttDiagram-PKOTCBZU-BMW0DvB1.js → ganttDiagram-PKOTCBZU-BU1NVhpe.js} +1 -1
- package/dist/webdist/assets/{git-branch-CZQe8XJB.js → git-branch-CZ9MmZFb.js} +1 -1
- package/dist/webdist/assets/{gitGraphDiagram-DS77QQ5N-D1Wh4tzk.js → gitGraphDiagram-DS77QQ5N-CcL-ug-a.js} +1 -1
- package/dist/webdist/assets/{index-6s1TR3Mg.js → index-BgulNYpG.js} +10 -10
- package/dist/webdist/assets/index-CCx71xgV.css +1 -0
- package/dist/webdist/assets/{index-B-lM0jtZ.js → index-Cx7COERb.js} +1 -1
- package/dist/webdist/assets/{infoDiagram-6WML65LV-VbzCs17L.js → infoDiagram-6WML65LV-BC-1EBgz.js} +1 -1
- package/dist/webdist/assets/{ishikawaDiagram-WSZJBQD7-NXmrNE4M.js → ishikawaDiagram-WSZJBQD7-GhjTdjOb.js} +1 -1
- package/dist/webdist/assets/{journeyDiagram-NVQOT4AX-CT3eftG5.js → journeyDiagram-NVQOT4AX-B2vSQHW_.js} +1 -1
- package/dist/webdist/assets/{kanban-definition-27J2QSJJ-CMLz2XNX.js → kanban-definition-27J2QSJJ-BnIqm05v.js} +1 -1
- package/dist/webdist/assets/{linear-C8w6e5pr.js → linear-are_XCSp.js} +1 -1
- package/dist/webdist/assets/link-queries-CHljIqX5.js +1 -0
- package/dist/webdist/assets/{lock-CtCTK4fi.js → lock-DOK52bNq.js} +1 -1
- package/dist/webdist/assets/{mermaid.core-Dg3gzQXp.js → mermaid.core-CR7ptkEZ.js} +4 -4
- package/dist/webdist/assets/{mindmap-definition-FAOFIHXS-CFA-t8Pv.js → mindmap-definition-FAOFIHXS-BHxebqeh.js} +1 -1
- package/dist/webdist/assets/{monitor-BnDu1JJe.js → monitor-Dt5Ru2xZ.js} +1 -1
- package/dist/webdist/assets/onboarding-pick-BLFfRRkr.js +1 -0
- package/dist/webdist/assets/{pegDiagram-VL7TDLO6-Cvrk_yjS.js → pegDiagram-VL7TDLO6-BQ5Ca2hG.js} +1 -1
- package/dist/webdist/assets/{pencil-CFuABcQS.js → pencil-CH8Hr8E3.js} +1 -1
- package/dist/webdist/assets/{personas-CdldzkmX.js → personas-D9neeRkw.js} +4 -4
- package/dist/webdist/assets/{pieDiagram-7S7Q4E2Y-DspIfgvH.js → pieDiagram-7S7Q4E2Y-CHfF2sPP.js} +1 -1
- package/dist/webdist/assets/{plus-BPDwshww.js → plus-D_ggg7WE.js} +1 -1
- package/dist/webdist/assets/{quadrantDiagram-CIZ2JOQS-DlU5s8vy.js → quadrantDiagram-CIZ2JOQS-BMcM-HmJ.js} +1 -1
- package/dist/webdist/assets/{radix-DW4bWMkB.js → radix-Dr6k323W.js} +1 -1
- package/dist/webdist/assets/{railroadDiagram-AXF67PYL-CNaDw4Jn.js → railroadDiagram-AXF67PYL-CScIXm39.js} +1 -1
- package/dist/webdist/assets/{refresh-cw-D8RZp8yK.js → refresh-cw-B7Jn8FQQ.js} +1 -1
- package/dist/webdist/assets/{remote-failure-DrcbWSOc.js → remote-failure-D02-Qz17.js} +1 -1
- package/dist/webdist/assets/{requirementDiagram-LRYGKXZP-DR31pxOu.js → requirementDiagram-LRYGKXZP-BOWjiS08.js} +1 -1
- package/dist/webdist/assets/{rocket-CrQF04Ko.js → rocket-bz4PERJI.js} +1 -1
- package/dist/webdist/assets/{rotate-ccw-Ao2f14qP.js → rotate-ccw-BQSKwfxQ.js} +1 -1
- package/dist/webdist/assets/{sankeyDiagram-W5VNT64P-CqFjXMeB.js → sankeyDiagram-W5VNT64P-C1fy2KmI.js} +1 -1
- package/dist/webdist/assets/search-Je8bpSwy.js +1 -0
- package/dist/webdist/assets/{sequenceDiagram-SI44F4Z6-Bxu2Mhjb.js → sequenceDiagram-SI44F4Z6-CUce2Nmx.js} +1 -1
- package/dist/webdist/assets/{sizeCapture-X5ZJPWSS-Clu9P7P2.js → sizeCapture-X5ZJPWSS-Do8gYr4s.js} +1 -1
- package/dist/webdist/assets/skeleton-B8GrdksY.js +1 -0
- package/dist/webdist/assets/{sliders-horizontal-BMPLOqS8.js → sliders-horizontal-B65_miAJ.js} +1 -1
- package/dist/webdist/assets/{sparkles-DUmKhFVc.js → sparkles-D5BySk1L.js} +1 -1
- package/dist/webdist/assets/{star-CHanzKtJ.js → star-gDhncBNW.js} +1 -1
- package/dist/webdist/assets/{stateDiagram-OKZ733FA-CleTNrVM.js → stateDiagram-OKZ733FA-O2JTTQeQ.js} +1 -1
- package/dist/webdist/assets/stateDiagram-v2-UEYNNEHI-DgY0HcET.js +1 -0
- package/dist/webdist/assets/{swimlanes-SLNWSIFB-BOkmWRMZ.js → swimlanes-SLNWSIFB-DUQC8WqG.js} +2 -2
- package/dist/webdist/assets/swimlanesDiagram-ULZ7WXOC-CI9ngVuS.js +8 -0
- package/dist/webdist/assets/{switch-DOWmW_HN.js → switch-Cj1Na-eN.js} +1 -1
- package/dist/webdist/assets/{terminal-Dsti4UEP.js → terminal-pWu2qk8h.js} +1 -1
- package/dist/webdist/assets/{timeline-definition-Z64GVDOM-DldeIhgX.js → timeline-definition-Z64GVDOM-y2fizDmT.js} +1 -1
- package/dist/webdist/assets/{trash-2-BS-v4vnu.js → trash-2-BczQb4TK.js} +1 -1
- package/dist/webdist/assets/{triangle-alert-CbnEc6nz.js → triangle-alert-B4-Qf1AC.js} +1 -1
- package/dist/webdist/assets/use-engine-log-kaqJp0Mi.js +1 -0
- package/dist/webdist/assets/{vennDiagram-T6HMQDX7-BfEil2zW.js → vennDiagram-T6HMQDX7-Dmx8Uh-S.js} +1 -1
- package/dist/webdist/assets/vram-DPDyCsNQ.js +1 -0
- package/dist/webdist/assets/{wardleyDiagram-T6FBY63Y-C5f7dizL.js → wardleyDiagram-T6FBY63Y-C9Fob2YW.js} +1 -1
- package/dist/webdist/assets/{wrench-RrT170se.js → wrench-84EHyYx6.js} +1 -1
- package/dist/webdist/assets/{xychartDiagram-ELKLHX3M-C0Caadm6.js → xychartDiagram-ELKLHX3M-TsEHKCX0.js} +1 -1
- package/dist/webdist/index.html +4 -4
- package/package.json +7 -3
- package/dist/webdist/assets/CodeComposer-DVq1Owms.js +0 -1
- package/dist/webdist/assets/CodeHomeScreen-BcXb_FrC.js +0 -1
- package/dist/webdist/assets/CustomizeScreen-1WEWeS2o.js +0 -4
- package/dist/webdist/assets/DeveloperScreen-CRd6LlbR.js +0 -1
- package/dist/webdist/assets/EnginesScreen-DMpTol2j.js +0 -8
- package/dist/webdist/assets/ModelDetailDialog-PesH4Lvj.js +0 -1
- package/dist/webdist/assets/ModelLoadMenu-Kyk_PCm1.js +0 -1
- package/dist/webdist/assets/ModelsScreen-BrWmAI3S.js +0 -2
- package/dist/webdist/assets/OnboardingScreen-BqsISOAx.js +0 -1
- package/dist/webdist/assets/RoutineEditPage-DYyP5bcn.js +0 -1
- package/dist/webdist/assets/RoutinesPanel-CWNAB6XV.js +0 -1
- package/dist/webdist/assets/SettingsScreen-BolAJ4j1.js +0 -2
- package/dist/webdist/assets/SidebarResizeHandle-CvNSmidY.js +0 -2
- package/dist/webdist/assets/TokensScreen-i81av7bn.js +0 -1
- package/dist/webdist/assets/WorkspaceScreen-C8o9JVxH.js +0 -1
- package/dist/webdist/assets/alert-dialog-BBENYlWb.js +0 -1
- package/dist/webdist/assets/channel-CAqIqLwF.js +0 -1
- package/dist/webdist/assets/classDiagram-JCYQIIEL-D8UwXHdu.js +0 -1
- package/dist/webdist/assets/classDiagram-v2-OCEON4UE-D8UwXHdu.js +0 -1
- package/dist/webdist/assets/collapsible-DDR_RndG.js +0 -1
- package/dist/webdist/assets/index-D4C8JIlz.css +0 -1
- package/dist/webdist/assets/link-queries-CM-8kcuV.js +0 -1
- package/dist/webdist/assets/skeleton-WkEOMnX2.js +0 -1
- package/dist/webdist/assets/stateDiagram-v2-UEYNNEHI-BCsf9FS8.js +0 -1
- package/dist/webdist/assets/swimlanesDiagram-ULZ7WXOC-Da27rzM3.js +0 -8
- package/dist/webdist/assets/vram-CyjPY3u5.js +0 -1
package/README.md
CHANGED
|
@@ -628,7 +628,8 @@ Use `--config <file>` to point at an alternate config (its directory becomes the
|
|
|
628
628
|
|
|
629
629
|
</details>
|
|
630
630
|
|
|
631
|
-
- **Windows, macOS, or Linux
|
|
631
|
+
- **Windows, macOS, or Linux** for `npx turbollm`. A native **Android app** also exists, with a
|
|
632
|
+
bundled Vulkan-accelerated engine — currently in closed/open testing, see turbollm.dev.
|
|
632
633
|
- A GPU is recommended but **not required** — a CPU build is provisioned as a fallback.
|
|
633
634
|
- On Windows, the first time the auto-downloaded `llama-server` runs, SmartScreen/Defender may
|
|
634
635
|
prompt (it's an upstream binary). Allow it once.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// TurboLLM Android's `--require` preload for the embedded (nodejs-mobile) Node 18.20.4
|
|
2
|
+
// runtime (see NodeRuntimeLauncher.android.kt's startScript, which passes this via
|
|
3
|
+
// `--require` BEFORE the entry script path).
|
|
4
|
+
//
|
|
5
|
+
// Why a --require preload and not a normal import/require inside cli.ts: confirmed live that
|
|
6
|
+
// a plain top-level ESM import at the very top of cli.ts's own source does NOT reliably run
|
|
7
|
+
// before every other module in its import graph. Node's ESM linker executes CommonJS
|
|
8
|
+
// dependencies' top-level code as part of resolving their NAMED EXPORTS during the LINK
|
|
9
|
+
// phase, which covers the whole import graph before ANY module (including the entry module's
|
|
10
|
+
// own body) reaches evaluation — so "first import in the source" does not mean "runs first".
|
|
11
|
+
// A `--require` preload runs via Node's own CLI bootstrap strictly before it even begins
|
|
12
|
+
// loading the entry module, which is the only mechanism confirmed to reliably beat that phase.
|
|
13
|
+
//
|
|
14
|
+
// The actual bug this works around: this embedded Node build does not expose the WHATWG
|
|
15
|
+
// `File` global that `undici` (an npm dependency, used transitively for fetch) reads at its
|
|
16
|
+
// own module-load time (`node_modules/undici/lib/web/webidl/index.js` does
|
|
17
|
+
// `webidl.is.File = webidl.util.MakeTypeAssertion(File)`), which throws
|
|
18
|
+
// `ReferenceError: File is not defined` and crashes the whole daemon before any of its own
|
|
19
|
+
// code runs. Desktop Node exposes `File` as a global; this build's own `node:buffer` module
|
|
20
|
+
// does NOT re-export `File` either (confirmed live — re-exporting it as the global had zero
|
|
21
|
+
// effect), so this builds a minimal polyfill on `Blob` instead, which is stable since Node 15
|
|
22
|
+
// and far more likely to have survived a size-stripped mobile build.
|
|
23
|
+
'use strict'
|
|
24
|
+
|
|
25
|
+
if (typeof globalThis.File === 'undefined') {
|
|
26
|
+
const { Blob } = require('node:buffer')
|
|
27
|
+
class PolyfillFile extends Blob {
|
|
28
|
+
constructor(fileBits, fileName, options = {}) {
|
|
29
|
+
super(fileBits, options)
|
|
30
|
+
this.name = fileName
|
|
31
|
+
this.lastModified = options.lastModified ?? Date.now()
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
globalThis.File = PolyfillFile
|
|
35
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// src/util/resolve-executable.ts
|
|
2
|
+
import { accessSync, constants, statSync } from "fs";
|
|
3
|
+
import { delimiter, extname, isAbsolute, join } from "path";
|
|
4
|
+
var SHIM_EXTENSIONS = /* @__PURE__ */ new Set([".cmd", ".bat"]);
|
|
5
|
+
function isFile(p) {
|
|
6
|
+
try {
|
|
7
|
+
return statSync(p).isFile();
|
|
8
|
+
} catch {
|
|
9
|
+
return false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function isExecutableFile(p) {
|
|
13
|
+
if (!isFile(p)) return false;
|
|
14
|
+
if (process.platform === "win32") return true;
|
|
15
|
+
try {
|
|
16
|
+
accessSync(p, constants.X_OK);
|
|
17
|
+
return true;
|
|
18
|
+
} catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function resolveExecutable(command, env = process.env, platform = process.platform) {
|
|
23
|
+
if (!command) return null;
|
|
24
|
+
const win32 = platform === "win32";
|
|
25
|
+
const exts = win32 ? (env.PATHEXT ?? ".COM;.EXE;.BAT;.CMD").split(";").filter(Boolean).map((e) => e.toLowerCase()) : [""];
|
|
26
|
+
const candidates = (base) => extname(base) ? [base] : win32 ? exts.map((e) => base + e) : [base];
|
|
27
|
+
if (isAbsolute(command) || command.startsWith("./") || command.startsWith(".\\")) {
|
|
28
|
+
return candidates(command).find(isExecutableFile) ?? null;
|
|
29
|
+
}
|
|
30
|
+
for (const dir of (env.PATH ?? env.Path ?? "").split(delimiter).filter(Boolean)) {
|
|
31
|
+
const clean = dir.replace(/^"|"$/g, "");
|
|
32
|
+
const hit = candidates(join(clean, command)).find(isExecutableFile);
|
|
33
|
+
if (hit) return hit;
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
function requiresShell(resolvedPath, platform = process.platform) {
|
|
38
|
+
if (!resolvedPath) return true;
|
|
39
|
+
if (platform !== "win32") return false;
|
|
40
|
+
return SHIM_EXTENSIONS.has(extname(resolvedPath).toLowerCase());
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export {
|
|
44
|
+
resolveExecutable,
|
|
45
|
+
requiresShell
|
|
46
|
+
};
|