From 997ba696a9e2aabd1af5ef1c0ae46fd3966902d7 Mon Sep 17 00:00:00 2001 From: patrick brisbin Date: Wed, 14 Feb 2024 13:13:09 -0500 Subject: [PATCH] Fixup handling mismatched braches --- src/envsubst.test.ts | 19 +++++++++++++++++-- src/envsubst.ts | 10 +++++----- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/src/envsubst.test.ts b/src/envsubst.test.ts index 270e6b3..dcc965f 100644 --- a/src/envsubst.test.ts +++ b/src/envsubst.test.ts @@ -12,10 +12,25 @@ describe("envsubst", () => { }); test("unknown variables are replaced by whitespace", () => { - expect(envsubst("Home is $XNOPE.")).toEqual(`Home is .`); + expect(envsubst("Home is $XNOPE.")).toEqual("Home is ."); }); test("unknown variables with braces are replaced by whitespace", () => { - expect(envsubst("Home is ${XNOPE}.")).toEqual(`Home is .`); + expect(envsubst("Home is ${XNOPE}.")).toEqual("Home is ."); + }); + + test("invalid braces are not replaced", () => { + expect(envsubst("Home is ${ HOME}.")).toEqual("Home is ${ HOME}."); + expect(envsubst("Home is ${HOME }.")).toEqual("Home is ${HOME }."); + }); + + test("mismatched left brace is not replaced", () => { + expect(envsubst("Home is ${HOME.")).toEqual("Home is ${HOME."); + }); + + test("mismatched right brace is replaced before the brace", () => { + expect(envsubst("Home is $HOME}.")).toEqual( + `Home is ${process.env.HOME}}.`, + ); }); }); diff --git a/src/envsubst.ts b/src/envsubst.ts index 646105c..00e3a21 100644 --- a/src/envsubst.ts +++ b/src/envsubst.ts @@ -1,10 +1,10 @@ -const REGEXP = new RegExp("\\$\\{?([A-Z_]+)\\}?"); +const REGEXP = new RegExp("\\$([A-Z_]+)|\\$\\{([A-Z_]+)\\}"); + +function replacer(_match: string, p1: string, p2: string): string { + return process.env[p2 ?? p1] ?? ""; +} /* replace environment variables in an input string, like envsubst(1) */ export function envsubst(str: string): string { return str.replace(REGEXP, replacer); } - -function replacer(_match: string, k: string): string { - return process.env[k] ?? ""; -}