diff --git a/src/extension/common/variables/environment.ts b/src/extension/common/variables/environment.ts index ce67bb8b..866a4dae 100644 --- a/src/extension/common/variables/environment.ts +++ b/src/extension/common/variables/environment.ts @@ -177,7 +177,7 @@ function parseEnvLine(line: string): [string, string] { // We don't use dotenv here because it loses ordering, which is // significant for substitution. // Modified to handle multiline values by using 's' flag so $ matches before newlines in multiline strings - const match = line.match(/^\s*(_*[a-zA-Z]\w*)\s*=\s*(.*?)?\s*$/s); + const match = line.match(/^\s*(_*[a-zA-Z][\w/]*)\s*=\s*(.*?)?\s*$/s); if (!match) { return ['', '']; } diff --git a/src/test/unittest/common/environment.unit.test.ts b/src/test/unittest/common/environment.unit.test.ts index be5353eb..e3e69543 100644 --- a/src/test/unittest/common/environment.unit.test.ts +++ b/src/test/unittest/common/environment.unit.test.ts @@ -102,4 +102,21 @@ suite('Environment File Parsing Tests', () => { expect(result.VAR1).to.equal('value1'); expect(result.VAR2).to.equal('multiline\nvalue'); }); + + test('Should parse keys containing forward slashes (e.g. Consul-style namespaced variables)', () => { + const content = 'routes/my_service=http://localhost:8080\nservices/db/host=localhost'; + const result = parseEnvFile(content); + + expect(result['routes/my_service']).to.equal('http://localhost:8080'); + expect(result['services/db/host']).to.equal('localhost'); + }); + + test('Should parse mixed standard and slash-namespaced keys in the same file', () => { + const content = 'STANDARD_VAR=value1\nroutes/my_service=http://localhost:8080\nANOTHER_VAR=value2'; + const result = parseEnvFile(content); + + expect(result['STANDARD_VAR']).to.equal('value1'); + expect(result['routes/my_service']).to.equal('http://localhost:8080'); + expect(result['ANOTHER_VAR']).to.equal('value2'); + }); });