// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. /** * Stringify an object into a valid `.env` file format. * * @example Usage * ```ts * import { stringify } from "@std/dotenv/stringify"; * import { assertEquals } from "@std/assert"; * * const object = { GREETING: "hello world" }; * assertEquals(stringify(object), "GREETING='hello world'"); * ``` * * @param object object to be stringified * @returns string of object */ export function stringify(object: Record): string { const lines: string[] = []; for (const [key, value] of Object.entries(object)) { let quote; let escapedValue = value ?? ""; if (key.startsWith("#")) { // deno-lint-ignore no-console console.warn( `key starts with a '#' indicates a comment and is ignored: '${key}'`, ); continue; } else if (escapedValue.includes("\n") || escapedValue.includes("'")) { // escape inner new lines escapedValue = escapedValue.replaceAll("\n", "\\n"); quote = `"`; } else if (escapedValue.match(/\W/)) { quote = "'"; } if (quote) { // escape inner quotes escapedValue = escapedValue.replaceAll(quote, `\\${quote}`); escapedValue = `${quote}${escapedValue}${quote}`; } const line = `${key}=${escapedValue}`; lines.push(line); } return lines.join("\n"); }