|
2 | 2 | #include "debug_utils-inl.h" |
3 | 3 | #include "simdjson.h" |
4 | 4 |
|
5 | | -#include <string> |
6 | | - |
7 | 5 | namespace node { |
8 | 6 |
|
| 7 | +constexpr std::string_view kConfigFileFlag = "--experimental-config-file"; |
| 8 | +constexpr std::string_view kDefaultConfigFileFlag = |
| 9 | + "--experimental-default-config-file"; |
| 10 | +constexpr std::string_view kDefaultConfigFileName = "node.config.json"; |
| 11 | + |
| 12 | +inline bool HasEqualsPrefix(std::string_view arg, std::string_view flag) { |
| 13 | + return arg.size() > flag.size() && arg.starts_with(flag) && |
| 14 | + arg[flag.size()] == '='; |
| 15 | +} |
| 16 | + |
9 | 17 | std::optional<std::string_view> ConfigReader::GetDataFromArgs( |
10 | | - const std::vector<std::string>& args) { |
11 | | - constexpr std::string_view flag_path = "--experimental-config-file"; |
12 | | - constexpr std::string_view default_file = |
13 | | - "--experimental-default-config-file"; |
14 | | - |
15 | | - bool has_default_config_file = false; |
16 | | - |
17 | | - for (auto it = args.begin(); it != args.end(); ++it) { |
18 | | - if (*it == flag_path) { |
19 | | - // Case: "--experimental-config-file foo" |
20 | | - if (auto next = std::next(it); next != args.end()) { |
21 | | - return *next; |
| 18 | + std::vector<std::string>* args) { |
| 19 | + std::optional<std::string_view> result; |
| 20 | + invalid_default_config_file_argument_ = false; |
| 21 | + |
| 22 | + for (size_t i = 0; i < args->size(); ++i) { |
| 23 | + std::string& arg = (*args)[i]; |
| 24 | + |
| 25 | + if (arg == kConfigFileFlag) { |
| 26 | + // --experimental-config-file |
| 27 | + arg = std::string(kConfigFileFlag) + "=" + |
| 28 | + std::string(kDefaultConfigFileName); |
| 29 | + result = kDefaultConfigFileName; |
| 30 | + } else if (HasEqualsPrefix(arg, kConfigFileFlag)) { |
| 31 | + // --experimental-config-file=path |
| 32 | + std::string_view path = |
| 33 | + std::string_view(arg).substr(kConfigFileFlag.size() + 1); |
| 34 | + if (!path.empty()) { |
| 35 | + result = path; |
22 | 36 | } |
23 | | - } else if (it->starts_with(flag_path)) { |
24 | | - // Case: "--experimental-config-file=foo" |
25 | | - if (it->size() > flag_path.size() && (*it)[flag_path.size()] == '=') { |
26 | | - return std::string_view(*it).substr(flag_path.size() + 1); |
27 | | - } |
28 | | - } else if (*it == default_file || it->starts_with(default_file)) { |
29 | | - has_default_config_file = true; |
| 37 | + } else if (arg == kDefaultConfigFileFlag) { |
| 38 | + // --experimental-default-config-file |
| 39 | + arg = std::string(kConfigFileFlag) + "=" + |
| 40 | + std::string(kDefaultConfigFileName); |
| 41 | + result = kDefaultConfigFileName; |
| 42 | + } else if (HasEqualsPrefix(arg, kDefaultConfigFileFlag)) { |
| 43 | + invalid_default_config_file_argument_ = true; |
30 | 44 | } |
31 | 45 | } |
32 | 46 |
|
33 | | - if (has_default_config_file) { |
34 | | - return "node.config.json"; |
35 | | - } |
| 47 | + return result; |
| 48 | +} |
36 | 49 |
|
37 | | - return std::nullopt; |
| 50 | +bool ConfigReader::HasInvalidDefaultConfigFileArgument() const { |
| 51 | + return invalid_default_config_file_argument_; |
38 | 52 | } |
39 | 53 |
|
40 | 54 | ParseResult ConfigReader::ProcessOptionValue( |
|
0 commit comments