diff --git a/CHANGELOG.md b/CHANGELOG.md index b9552e2..bc01b8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - **Change**: Update package-lock.json file - **Feature**: Added support for asyncronous .env and .rc files - **Feature**: Added support for a programmatic API +- **Fix**: Keep newline (`\n`) characters intact when parsing env files - **Change**: Added node v10 and v12 to build automation ## 8.0.2 diff --git a/src/parse-env-file.ts b/src/parse-env-file.ts index 87fcedc..c4683e2 100644 --- a/src/parse-env-file.ts +++ b/src/parse-env-file.ts @@ -53,7 +53,9 @@ export function parseEnvVars (envString: string): { [key: string]: string } { const value = match[3].trim() || '' // remove any surrounding quotes - matches[key] = value.replace(/(^['"]|['"]$)/g, '') + matches[key] = value + .replace(/(^['"]|['"]$)/g, '') + .replace(`\\n`, `\n`) } return matches } @@ -78,4 +80,4 @@ export function stripComments (envString: string): string { export function stripEmptyLines (envString: string): string { const emptyLinesRegex = /(^\n)/gim return envString.replace(emptyLinesRegex, '') -} +} \ No newline at end of file diff --git a/test/parse-env-file.spec.ts b/test/parse-env-file.spec.ts index b3ca10c..22d6c5e 100644 --- a/test/parse-env-file.spec.ts +++ b/test/parse-env-file.spec.ts @@ -97,30 +97,19 @@ describe('getEnvFileVars', (): void => { it('should parse a json file', async (): Promise => { const env = await getEnvFileVars('./test/test-files/test.json') assert.deepEqual(env, { - 'development': { - 'THANKS': 'FOR ALL THE FISH', - 'ANSWER': 0 - }, - 'production': { - 'THANKS': 'FOR WHAT?!', - 'ANSWER': 42, - 'ONLY': 'IN PRODUCTION' - } + 'THANKS': 'FOR WHAT?!', + 'ANSWER': 42, + 'ONLY': 'IN PRODUCTION', + 'GALAXY': 'hitch\nhiking' }) }) it('should parse a js file', async (): Promise => { const env = await getEnvFileVars('./test/test-files/test.js') assert.deepEqual(env, { - 'development': { - 'THANKS': 'FOR ALL THE FISH', - 'ANSWER': 0 - }, - 'production': { - 'THANKS': 'FOR WHAT?!', - 'ANSWER': 42, - 'ONLY': 'IN PRODUCTION' - } + 'THANKS': 'FOR ALL THE FISH', + 'ANSWER': 0, + 'GALAXY': 'hitch\nhiking' }) }) @@ -137,7 +126,8 @@ describe('getEnvFileVars', (): void => { assert.deepEqual(env, { 'THANKS': 'FOR WHAT?!', 'ANSWER': '42', - 'ONLY': 'IN=PRODUCTION' + 'ONLY': 'IN=PRODUCTION', + 'GALAXY': 'hitch\nhiking' }) }) diff --git a/test/test-files/test b/test/test-files/test index 1444f3b..bee4cae 100644 --- a/test/test-files/test +++ b/test/test-files/test @@ -1,3 +1,4 @@ THANKS = FOR WHAT?! ANSWER=42 -ONLY= "IN=PRODUCTION" \ No newline at end of file +ONLY= "IN=PRODUCTION" +GALAXY="hitch\nhiking" \ No newline at end of file diff --git a/test/test-files/test.js b/test/test-files/test.js index baf2325..63d3f99 100644 --- a/test/test-files/test.js +++ b/test/test-files/test.js @@ -1,11 +1,5 @@ module.exports = { - 'development': { - 'THANKS': 'FOR ALL THE FISH', - 'ANSWER': 0 - }, - 'production': { - 'THANKS': 'FOR WHAT?!', - 'ANSWER': 42, - 'ONLY': 'IN PRODUCTION' - } + 'THANKS': 'FOR ALL THE FISH', + 'ANSWER': 0, + 'GALAXY': 'hitch\nhiking' } diff --git a/test/test-files/test.json b/test/test-files/test.json index c1ccf3b..a90c062 100644 --- a/test/test-files/test.json +++ b/test/test-files/test.json @@ -1,11 +1,6 @@ { - "development": { - "THANKS": "FOR ALL THE FISH", - "ANSWER": 0 - }, - "production": { - "THANKS": "FOR WHAT?!", - "ANSWER": 42, - "ONLY": "IN PRODUCTION" - } + "THANKS": "FOR WHAT?!", + "ANSWER": 42, + "ONLY": "IN PRODUCTION", + "GALAXY": "hitch\nhiking" } \ No newline at end of file