Skip to content

The most correct, informative, appealing and configurable variable inspector for JavaScript

License

Notifications You must be signed in to change notification settings

r37r0m0d3l/consono

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Consono

๐Ÿ•ต๏ธ Consono ๐Ÿ•ต๏ธโ€โ™€๏ธ

The most correct, informative, appealing, and configurable variable inspector for JavaScript.

๐Ÿ“ Consono Documentation

npm downloads stars types build lgtm


๐Ÿ”‹ Motivation

Motivation and differences from other libraries.

  • โ˜€๏ธ Light and ๐ŸŒ‘ dark themes for terminal output.
  • ๐ŸŽš๏ธ Configurable coloring of variables.
  • Can print to terminal or ๐ŸŒˆ return formatted and colored string for later use.
  • ๐Ÿ”€ Turn on/off output colorization.
  • Configurable indent - tabs ๐Ÿ†š spaces holy war ๐Ÿ‘ผ๐Ÿป โš”๏ธ ๐Ÿ‡ป๐Ÿ‡ฆ.
  • Availability to set the ๐Ÿ•ณ๏ธ depth for object inspection.
  • Configurable #๏ธโƒฃ max items for array, map, object, set.
  • โœ‚๏ธLimit string length when printing for better readability.
  • Inspect both string ๐Ÿ“ character count and ๐Ÿ“ string length.
  • Inspect โž•0๏ธ positive zeroes and โž–0๏ธ negative zeroes.
  • Inspect ๐Ÿ” items count for collection-like variables array, map, object, set.
  • Actually ๐Ÿ”ฌ can inspect arguments, set and map.
  • Can print ๐Ÿ“› function names or mark them as anonymous.
  • Handles ๐Ÿ”„ circular references.
  • Has ๐Ÿ“˜ TypeScript declaration file.
  • Avoids ๐Ÿ”ฑ๐Ÿ˜ˆ๐Ÿ”ฅ dependency hell.
  • Can ๐Ÿงน clear terminal before output.
  • Can ๐Ÿ’ฅ exit Node.js process after output.
  • Import as ๐Ÿ†• ECMAScript module.
  • And so on and so forth โ™พ๏ธ.

๐Ÿงฌ Examples

consono(undefined);
consono(null);

Nil

consono(true);
consono(false);

Boolean

consono(Infinity);
consono(Number.NEGATIVE_INFINITY);
consono(NaN);
consono(1);
consono(1.5);
consono(BigInt(9007199254740991));

Number

consono(new Date());

Date

consono("Hello, world ๐Ÿ˜€๐Ÿ˜๐Ÿ˜‚๐Ÿคฃ๐Ÿ˜ƒ๐Ÿ˜„๐Ÿ˜…๐Ÿ˜†๐Ÿ˜‰๐Ÿ˜Š", { stringMaxLength: 17 });
consono(Symbol("๐ŸŒˆ"));

String

consono(/[0-9]+/);
consono(/\w+/giu);

RegExp

consono(function() {});
consono(function helloWorld() {});
consono(() => {});

Function

consono(new Promise(() => {}));
consono(async function helloWorld() {});
consono(async () => {});
consono(function* gen() { yield 1; });

Async

consono([1, 2, 3]);
consono(Int8Array.from([1, 2, 3]));

Array

consono(new ArrayBuffer(8));
consono(new SharedArrayBuffer(16));

Array Buffer

consono(new Set(["a", true, { prop: 1 }]));
consono(new Map([["first", "a"], [true, "b"]]));
consono(new WeakMap());
consono(new WeakSet());

Collection

consono({});

class MyClass {} const myClass = new MyClass(); myClass.deeper = new
MyClass(); consono(myClass);

Object

consono(new Error("Standard error"));
consono(new EvalError("Unable to run this code"));
consono(new RangeError("Must be less than 10 and greater than 0"));
consono(new ReferenceError("This is error from try/catch"));
consono(new SyntaxError("Not a source code"));
consono(new TypeError("Value is not of the expected type"));

Error

(function(a, b) { consono(arguments); })(true, false);

Arguments

consono(global || globalThis, { objectMaxProps: 3 });

Global

๐Ÿ“ฆ Installation

npm -s install consono

โŒจ๏ธ Include

The default is a function for printing variable.

import { consono } from "consono";

Import multiple items: function, constructor, options object, theme objects.

import {
  Consono,
  consono,
  options,
  THEME_DARK,
  THEME_LIGHT,
} from "consono";

UNPKG CDN.

Note that the web browser version has no theme support, limited color palette, and only support chromium based browsers.

<script src="https://unpkg.com/consono/dist/consono.js"></script>

โš™๏ธ Options

import { Consono } from "consono";
const options = {
  clear: true,
  quotesEnd: `โ€`,
  quotesStart: `โ€œ`,
  stringMaxLength: 54,
};
const theme = "light"; // default is "dark"
const consono = new Consono(options, theme);
consono.log("Cleared before output. Different quotes. And cut to 54!");
// string โ€ข "Cleared before output. Different quotes. And cut to 54"
// (length=55, shown=54)
import { Consono } from "consono";
const theme = {
  argument: [253, 151, 31],
  boolean: [174, 129, 255],
  comment: [117, 113, 94],
  keyword: [249, 38, 114],
  name: [230, 219, 116],
  number: [174, 129, 255],
  plain: [255, 255, 255],
  property: [102, 217, 239],
  string: [166, 226, 46],
};
const consono = new Consono(null, theme);
consono.log("Themed");
import { Consono, options } from "consono";
options.colorize = false;
const consono = new Consono(options);
consono.log("Text without colorization");
import { consono } from "consono";
console.debug(
  consono("Outputs a message only at the debug log level.", false)
);

๐Ÿท๏ธ Instance

const consono = Consono.factory(options, theme);
consono("This is log function with your own options");

๐Ÿ”– Log function

import { consono } from "consono";
const map = new Map();
map.add("key", true);
consono(map);

Return string with variable description.

const variableAsString = consono({}, false);

or

const variableAsString = consono({},  { console: false });
const defaultOptions = {
  // Maximum number of elements in array to show
  arrayMaxElements: 99,
  // Assign symbol
  assignSymbol: "โ†’",
  // Clear console before output
  clear: false,
  // Colorize the output
  colorize: true,
  // Output to console
  console: true,
  // Default depth of object
  depth: 20,
  // 'false' - do nothing. 'true' - exit status ok.
  // Number greater than zero - exit status with passed error code.
  exit: false,
  // Call console.log immediately
  immediate: false,
  // Print indentation
  indent: "ห‘ห‘",
  // Maximum number of entries in map to show
  mapMaxEntries: 99,
  // Maximum number of properties in object to show
  objectMaxProps: 99,
  // Quote start
  quotesEnd: `"`,
  // Quote end
  quotesStart: `"`,
  // Return inspected variable as string
  returns: true,
  // Maximum number of values in set to show
  setMaxValues: 99,
  // Call `process.stdout.write` instead of `console.log`.
  stdout: false,
  // Maximum length of string to show
  stringMaxLength: 360,
};
consono("Some variable", defaultOptions);

๐Ÿ”ฎ Shortcuts

// Exit code - 15
consonoExit("Some value", null, null, 15);
// No colorization, no description, only printing with `console.dir`
consonoJSON("Some value");
// No colorization, no description, only printing with `process.stdout.write`
consonoOut("Some value");
// No colorization
consonoPlain("Some value");
// Return only, no `console.log`
consonoReturn("Some value");

๐Ÿ‘€ Discover more

My other projects