@@ -8,34 +8,34 @@ namespace node {
8
8
using v8::NewStringType;
9
9
using v8::String;
10
10
11
- std::optional <std::string> Dotenv::GetPathFromArgs (
11
+ std::vector <std::string> Dotenv::GetPathFromArgs (
12
12
const std::vector<std::string>& args) {
13
- std::string_view flag = " --env-file" ;
14
- // Match the last `--env-file`
15
- // This is required to imitate the default behavior of Node.js CLI argument
16
- // matching.
17
- auto path =
18
- std::find_if (args.rbegin (), args.rend (), [&flag](const std::string& arg) {
19
- return strncmp (arg.c_str (), flag.data (), flag.size ()) == 0 ;
20
- });
21
-
22
- if (path == args.rend ()) {
23
- return std::nullopt ;
24
- }
25
-
26
- auto equal_char = path->find (' =' );
27
-
28
- if (equal_char != std::string::npos) {
29
- return path->substr (equal_char + 1 );
30
- }
31
-
32
- auto next_arg = std::prev (path);
13
+ const auto find_match = [](const std::string& arg) {
14
+ const std::string_view flag = " --env-file" ;
15
+ return strncmp (arg.c_str (), flag.data (), flag.size ()) == 0 ;
16
+ };
17
+ std::vector<std::string> paths;
18
+ auto path = std::find_if (args.begin (), args.end (), find_match);
19
+
20
+ while (path != args.end ()) {
21
+ auto equal_char = path->find (' =' );
22
+
23
+ if (equal_char != std::string::npos) {
24
+ paths.push_back (path->substr (equal_char + 1 ));
25
+ } else {
26
+ auto next_path = std::next (path);
27
+
28
+ if (next_path == args.end ()) {
29
+ return paths;
30
+ }
31
+
32
+ paths.push_back (*next_path);
33
+ }
33
34
34
- if (next_arg == args.rend ()) {
35
- return std::nullopt ;
35
+ path = std::find_if (++path, args.end (), find_match);
36
36
}
37
37
38
- return *next_arg ;
38
+ return paths ;
39
39
}
40
40
41
41
void Dotenv::SetEnvironment (node::Environment* env) {
@@ -163,7 +163,7 @@ void Dotenv::ParseLine(const std::string_view line) {
163
163
value.erase (value.size () - 1 );
164
164
}
165
165
166
- store_.emplace ( key, value);
166
+ store_.insert_or_assign ( std::string ( key) , value);
167
167
}
168
168
169
169
} // namespace node
0 commit comments