| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 6f941fc commit 10df38a
3 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -9,8 +9,10 @@ namespace node { | |||
| 9 | 9 | using v8::EscapableHandleScope; | |
| 10 | 10 | using v8::JustVoid; | |
| 11 | 11 | using v8::Local; | |
| 12 | + using v8::LocalVector; | ||
| 12 | 13 | using v8::Maybe; | |
| 13 | 14 | using v8::MaybeLocal; | |
| 15 | + using v8::Name; | ||
| 14 | 16 | using v8::Nothing; | |
| 15 | 17 | using v8::Object; | |
| 16 | 18 | using v8::String; | |
@@ -86,20 +88,29 @@ Maybe<void> Dotenv::SetEnvironment(node::Environment* env) { | |||
| 86 | 88 | ||
| 87 | 89 | MaybeLocal<Object> Dotenv::ToObject(Environment* env) const { | |
| 88 | 90 | EscapableHandleScope scope(env->isolate()); | |
| 89 | - Local<Object> result = Object::New(env->isolate()); | ||
| 90 | 91 | ||
| 91 | - Local<Value> name; | ||
| 92 | - Local<Value> val; | ||
| 92 | + LocalVector<Name> names(env->isolate(), store_.size()); | ||
| 93 | + LocalVector<Value> values(env->isolate(), store_.size()); | ||
| 93 | 94 | auto context = env->context(); | |
| 94 | 95 | ||
| 96 | + Local<Value> tmp; | ||
| 97 | + | ||
| 98 | + int n = 0; | ||
| 95 | 99 | for (const auto& entry : store_) { | |
| 96 | - if (!ToV8Value(context, entry.first).ToLocal(&name) || | ||
| 97 | - !ToV8Value(context, entry.second).ToLocal(&val) || | ||
| 98 | - result->Set(context, name, val).IsNothing()) { | ||
| 100 | + if (!ToV8Value(context, entry.first).ToLocal(&tmp)) { | ||
| 101 | + return MaybeLocal<Object>(); | ||
| 102 | + } | ||
| 103 | + names[n] = tmp.As<Name>(); | ||
| 104 | + if (!ToV8Value(context, entry.second).ToLocal(&tmp)) { | ||
| 99 | 105 | return MaybeLocal<Object>(); | |
| 100 | 106 | } | |
| 107 | + values[n++] = tmp; | ||
| 101 | 108 | } | |
| 102 | - | ||
| 109 | + Local<Object> result = Object::New(env->isolate(), | ||
| 110 | + Null(env->isolate()), | ||
| 111 | + names.data(), | ||
| 112 | + values.data(), | ||
| 113 | + values.size()); | ||
| 103 | 114 | return scope.Escape(result); | |
| 104 | 115 | } | |
| 105 | 116 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -215,6 +215,7 @@ describe('.env supports edge cases', () => { | |||
| 215 | 215 | ].join('\n')); | |
| 216 | 216 | ||
| 217 | 217 | assert.deepStrictEqual(result, { | |
| 218 | + __proto__: null, | ||
| 218 | 219 | baz: 'whatever', | |
| 219 | 220 | VALID_AFTER_INVALID: 'test', | |
| 220 | 221 | ANOTHER_VALID: 'value', | |
@@ -236,6 +237,7 @@ describe('.env supports edge cases', () => { | |||
| 236 | 237 | ].join('\n')); | |
| 237 | 238 | ||
| 238 | 239 | assert.deepStrictEqual(result, { | |
| 240 | + __proto__: null, | ||
| 239 | 241 | KEY_WITH_SPACES_BEFORE: 'value_with_spaces_before_and_after', | |
| 240 | 242 | KEY_WITH_TABS_BEFORE: 'value_with_tabs_before_and_after', | |
| 241 | 243 | KEY_WITH_SPACES_AND_TABS: 'value_with_spaces_and_tabs', | |
@@ -255,6 +257,7 @@ describe('.env supports edge cases', () => { | |||
| 255 | 257 | ].join('\n')); | |
| 256 | 258 | ||
| 257 | 259 | assert.deepStrictEqual(result, { | |
| 260 | + __proto__: null, | ||
| 258 | 261 | KEY_WITH_COMMENT_IN_VALUE: 'value # this is a comment', | |
| 259 | 262 | }); | |
| 260 | 263 | }); | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -10,7 +10,8 @@ const fs = require('node:fs'); | |||
| 10 | 10 | const validEnvFilePath = fixtures.path('dotenv/valid.env'); | |
| 11 | 11 | const validContent = fs.readFileSync(validEnvFilePath, 'utf8'); | |
| 12 | 12 | ||
| 13 | - assert.deepStrictEqual(util.parseEnv(validContent), { | ||
| 13 | + const checkObj = { | ||
| 14 | + __proto__: null, | ||
| 14 | 15 | A: 'B=C', | |
| 15 | 16 | B: 'C=D', | |
| 16 | 17 | AFTER_LINE: 'after_line', | |
@@ -56,11 +57,14 @@ const fs = require('node:fs'); | |||
| 56 | 57 | SPACED_KEY: 'parsed', | |
| 57 | 58 | SPACE_BEFORE_DOUBLE_QUOTES: 'space before double quotes', | |
| 58 | 59 | TRIM_SPACE_FROM_UNQUOTED: 'some spaced out string', | |
| 59 | - }); | ||
| 60 | + }; | ||
| 61 | + | ||
| 62 | + assert.deepStrictEqual(util.parseEnv(validContent), checkObj); | ||
| 60 | 63 | } | |
| 61 | 64 | ||
| 62 | - assert.deepStrictEqual(util.parseEnv(''), {}); | ||
| 63 | - assert.deepStrictEqual(util.parseEnv('FOO=bar\nFOO=baz\n'), { FOO: 'baz' }); | ||
| 65 | + assert.deepStrictEqual(util.parseEnv(''), { __proto__: null }); | ||
| 66 | + assert.deepStrictEqual(util.parseEnv('FOO=bar\nFOO=baz\n'), | ||
| 67 | + { __proto__: null, FOO: 'baz' }); | ||
| 64 | 68 | ||
| 65 | 69 | // Test for invalid input. | |
| 66 | 70 | assert.throws(() => { | |
| Back | FazBrowse Home | New Git URL |
0 commit comments