diff --git a/packages/get-db/src/lib/utils/validate.test.ts b/packages/get-db/src/lib/utils/validate.test.ts index ad00b7f4..0fef4cb5 100644 --- a/packages/get-db/src/lib/utils/validate.test.ts +++ b/packages/get-db/src/lib/utils/validate.test.ts @@ -13,12 +13,22 @@ describe("validateEnvPath", () => { expect(validateEnvPath("env-local")).toBeUndefined(); }); + it("returns undefined for valid relative paths", () => { + expect(validateEnvPath("./.env")).toBeUndefined(); + expect(validateEnvPath("./.env.local")).toBeUndefined(); + expect(validateEnvPath("./config/.env")).toBeUndefined(); + expect(validateEnvPath("config/.env")).toBeUndefined(); + expect(validateEnvPath("src/config/.env.local")).toBeUndefined(); + }); + it("returns undefined for empty string", () => { expect(validateEnvPath("")).toBeUndefined(); }); it("returns error for invalid paths", () => { - expect(validateEnvPath(".env/local")).toBeInstanceOf(Error); + expect(validateEnvPath("../.env")).toBeInstanceOf(Error); + expect(validateEnvPath("/etc/.env")).toBeInstanceOf(Error); + expect(validateEnvPath(".env/")).toBeInstanceOf(Error); expect(validateEnvPath("..env")).toBeInstanceOf(Error); expect(validateEnvPath(".env..local")).toBeInstanceOf(Error); }); diff --git a/packages/get-db/src/lib/utils/validate.ts b/packages/get-db/src/lib/utils/validate.ts index 2c30624d..a1d613a2 100644 --- a/packages/get-db/src/lib/utils/validate.ts +++ b/packages/get-db/src/lib/utils/validate.ts @@ -1,14 +1,18 @@ /** - * Validates the path to the .env file - it can be dotfile or not. + * Validates the path to the .env file - accepts filenames and relative paths. * @param value - The path to the .env file * @returns An error if the path is invalid, otherwise undefined */ function validateEnvPath(value: string) { if (!value) return undefined; - if (!/^\.?[\w-]+(?:\.[\w-]+)*$/.test(value)) { + if ( + !/^(?:\.\/)?(?:[\w-]+(?:\.[\w-]+)*\/)*\.?[\w-]+(?:\.[\w-]+)*$/.test( + value, + ) + ) { return new Error( - "Please enter a valid file name (e.g.: .env or .env.local)", + "Please enter a valid file path (e.g.: .env, .env.local, or ./config/.env)", ); }