You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.6 KiB
65 lines
1.6 KiB
type variable_doc('t) = { |
|
name: string, |
|
doc: string, |
|
default: string, |
|
}; |
|
|
|
module EnvVar = |
|
( |
|
M: { |
|
type t; |
|
let name: string; |
|
let doc: string; |
|
let default: t; |
|
let parse: string => t; |
|
let unparse: t => string; |
|
}, |
|
) => { |
|
include M; |
|
let getOpt = () => Sys.getenv_opt(name) |> Opt.map(parse); |
|
let get = () => Opt.(getOpt() or default); |
|
let docInfo = {name, doc, default: unparse(default)}; |
|
}; |
|
|
|
let ensureTrailingBackslash = str => |
|
switch (str.[String.length(str) - 1]) { |
|
| '/' => str |
|
| _ => str ++ "/" |
|
}; |
|
|
|
module FNM_NODE_DIST_MIRROR = |
|
EnvVar({ |
|
type t = string; |
|
let name = "FNM_NODE_DIST_MIRROR"; |
|
let doc = "https://nodejs.org/dist/ mirror"; |
|
let default = "https://nodejs.org/dist/"; |
|
let parse = ensureTrailingBackslash; |
|
let unparse = ensureTrailingBackslash; |
|
}); |
|
|
|
module FNM_DIR = |
|
EnvVar({ |
|
type t = string; |
|
let parse = ensureTrailingBackslash; |
|
let unparse = ensureTrailingBackslash; |
|
let name = "FNM_DIR"; |
|
let doc = "The root directory of fnm installations."; |
|
let default = { |
|
let home = |
|
Sys.getenv_opt("HOME") |
|
|> Opt.orThrow("There isn't $HOME environment variable set."); |
|
Filename.concat(home, ".fnm"); |
|
}; |
|
}); |
|
|
|
module FNM_MULTISHELL_PATH = |
|
EnvVar({ |
|
type t = string; |
|
let parse = x => x; |
|
let unparse = x => x; |
|
let name = "FNM_MULTISHELL_PATH"; |
|
let doc = "Where the current node version link is stored"; |
|
let default = ""; |
|
}); |
|
|
|
let getDocs = () => [FNM_DIR.docInfo, FNM_NODE_DIST_MIRROR.docInfo];
|
|
|