r37r0m0d3l/consono

View on GitHub
src/helpers/node/consonoJSON.js

Summary

Maintainability
D
1 day
Test Coverage
import Consono from "../../core/browser/consono.js";
import cliExit from "../../utils/cliExit.js";
import processExit from "../../utils/processExit.js";
import objectKeysSort from "../../utils/objectKeysSort.js";

/**
 * @name consonoJSON
 * @description Print variable as JSON without highlighting. Uses `console.dir`.
 * @param {*} variable
 * @param {boolean|Object} [options=true]
 * @param {boolean} [sortKeys=true]
 * @returns {string|undefined}
 * @since 1.4.11
 */
export default function consonoJSON(variable, options, sortKeys = true) {
  let out;
  if (variable === undefined) {
    out = undefined;
  } else {
    out = JSON.parse(JSON.stringify(variable), null, 2);
  }
  if (sortKeys) {
    out = objectKeysSort(out);
  }
  const createdOptions = Consono.createOptions({ ...options });
  if (createdOptions.console) {
    if (createdOptions.clear) {
      cliExit();
    }
    if (createdOptions.immediate) {
      setTimeout(() => {
        if (out === undefined) {
          console.dir(undefined);
        } else {
          console.dir(out);
        }
      }, 0);
    } else {
      if (out === undefined) {
        console.dir(undefined);
      } else {
        console.dir(out);
      }
    }
    processExit(createdOptions.exit);
  }
  if (createdOptions.returns) {
    return out;
  }
}