@planet-a/affinity-node
Version:
API wrapper for the affinity.co API
71 lines (70 loc) • 2.28 kB
JavaScript
// Copyright 2018-2025 the Deno authors. MIT license.
// This module is browser compatible.
/** An inspect function conforming to the shape of `Deno.inspect` and `node:util`'s `inspect` */
import * as dntShim from "../../../../../_dnt.shims.js";
/**
* 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) {
// deno-lint-ignore no-explicit-any
const { Deno, process } = dntShim.dntGlobalThis;
const inspect = Deno?.inspect ??
process?.getBuiltinModule?.("node:util")?.inspect;
return typeof inspect === "function"
? inspect(v, {
depth: Infinity,
sorted: true,
trailingComma: true,
compact: false,
iterableLimit: Infinity,
// getters should be true in assertEquals.
getters: true,
strAbbreviateSize: Infinity,
})
: basicInspect(v);
}
const formatters = [
(v) => {
if (typeof v === "undefined")
return "undefined";
if (typeof v === "bigint")
return `${v}n`;
if (typeof v === "string" ||
typeof v === "number" ||
typeof v === "boolean" ||
v === null ||
Array.isArray(v) ||
[null, Object.prototype].includes(Object.getPrototypeOf(v))) {
return JSON.stringify(v, null, 2);
}
},
(v) => String(v),
(v) => Object.prototype.toString.call(v),
];
// for environments lacking both `Deno.inspect` and `process.inspect`
function basicInspect(v) {
for (const fmt of formatters) {
try {
const result = fmt(v);
if (typeof result === "string")
return result;
}
catch { /* try the next one */ }
}
return "[[Unable to format value]]";
}