-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathJavaScriptRuntimeResolver.cs
More file actions
37 lines (31 loc) · 1.09 KB
/
Copy pathJavaScriptRuntimeResolver.cs
File metadata and controls
37 lines (31 loc) · 1.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
namespace SimpleMusicPlayer;
internal static class JavaScriptRuntimeResolver
{
private static readonly JavaScriptRuntimeCandidate[] Candidates =
[
new("deno", "deno"),
new("node", "node"),
new("bun", "bun"),
new("quickjs", "qjs")
];
public static JavaScriptRuntimeSelection? ResolveForYtDlp()
{
foreach (var candidate in Candidates)
{
var executablePath = ToolPathResolver.ResolveExecutablePath(candidate.ExecutableName);
if (!string.IsNullOrWhiteSpace(executablePath))
{
return new JavaScriptRuntimeSelection(candidate.YtDlpRuntimeName, executablePath);
}
}
return null;
}
public static string GetSupportedRuntimeDisplayText()
=> "Deno, Node.js, Bun, or QuickJS";
private sealed record JavaScriptRuntimeCandidate(string YtDlpRuntimeName, string ExecutableName);
}
internal sealed record JavaScriptRuntimeSelection(string RuntimeName, string ExecutablePath)
{
public string ToYtDlpArgument()
=> $"{RuntimeName}:{ExecutablePath}";
}