diff --git a/package-lock.json b/package-lock.json index 6d38c07..600b907 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "envfill", - "version": "1.2.0", + "version": "1.2.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "envfill", - "version": "1.2.0", + "version": "1.2.1", "license": "MIT", "dependencies": { "@clack/prompts": "^0.11.0", diff --git a/package.json b/package.json index 97b5f46..cb238d0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "envfill", - "version": "1.2.0", + "version": "1.2.1", "description": "Interactive CLI to populate .env files from templates", "type": "module", "main": "./dist/index.cjs", diff --git a/src/writer.ts b/src/writer.ts index 859e496..24f02e1 100644 --- a/src/writer.ts +++ b/src/writer.ts @@ -6,8 +6,11 @@ export function escapeValue(value: string): string { return ''; } - if (value.includes('\n') || value.includes('"') || value.includes("'") || value.includes(' ') || value.includes('#')) { - const escaped = value.replace(/\\/g, '\\\\').replace(/"/g, '\\"'); + if (value.includes('\n') || value.includes('"') || value.includes("'") || value.includes(' ') || value.includes('#') || value.includes('$')) { + const escaped = value + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\$/g, '\\$'); return `"${escaped}"`; } @@ -95,7 +98,7 @@ export function read(filePath: string): Map { value = value.slice(1, -1); } - value = value.replace(/\\"/g, '"').replace(/\\\\/g, '\\'); + value = value.replace(/\\"/g, '"').replace(/\\\$/g, '$').replace(/\\\\/g, '\\'); values.set(name, value); } diff --git a/test/e2e/cli.e2e.test.ts b/test/e2e/cli.e2e.test.ts index 8f20659..ed4ddd6 100644 --- a/test/e2e/cli.e2e.test.ts +++ b/test/e2e/cli.e2e.test.ts @@ -453,6 +453,7 @@ VAR=` 'hello world', // space 'pass"word', // quote 'value with # comment', // hash + 'abc$def', // dollar sign ] ); @@ -463,6 +464,7 @@ VAR=` expect(content).toContain('MESSAGE="hello world"'); expect(content).toContain('PASSWORD="pass\\"word"'); expect(content).toContain('DESCRIPTION="value with # comment"'); + expect(content).toContain('DOLLAR_VAR="abc\\$def"'); }); }); diff --git a/test/e2e/fixtures/escaping.template b/test/e2e/fixtures/escaping.template index 7075fba..daa9664 100644 --- a/test/e2e/fixtures/escaping.template +++ b/test/e2e/fixtures/escaping.template @@ -1,3 +1,4 @@ MESSAGE= PASSWORD= DESCRIPTION= +DOLLAR_VAR=