// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. // This module is browser compatible. /** * Converts the input into a string. Objects, Sets and Maps are sorted so as to * make tests less flaky. * * @param v Value to be formatted * * @returns The formatted string * * @example Usage * ```ts * import { format } from "@std/internal/format"; * import { assertEquals } from "@std/assert"; * * assertEquals(format({ a: 1, b: 2 }), "{\n a: 1,\n b: 2,\n}"); * assertEquals(format(new Set([1, 2])), "Set(2) {\n 1,\n 2,\n}"); * assertEquals(format(new Map([[1, 2]])), "Map(1) {\n 1 => 2,\n}"); * ``` */ export function format(v: unknown): string { // deno-lint-ignore no-explicit-any const { Deno } = globalThis as any; return typeof Deno?.inspect === "function" ? Deno.inspect(v, { depth: Infinity, sorted: true, trailingComma: true, compact: false, iterableLimit: Infinity, // getters should be true in assertEquals. getters: true, strAbbreviateSize: Infinity, }) : `"${String(v).replace(/(?=["\\])/g, "\\")}"`; }