Best JavaScript code snippet using chai
appendix.js
Source:appendix.js  
1const inspectCustom = Symbol.for("nodejs.util.inspect.custom");2/**3 * algebraic-struct4 */5const createCompose = curry(6  (F, G) =>7    class Compose {8      constructor(x) {9        this.$value = x;10      }11      [inspectCustom]() {12        return `Compose(${inspect(this.$value)})`;13      }14      // ----- Pointed (Compose F G)15      static of(x) {16        return new Compose(F(G(x)));17      }18      // ----- Functor (Compose F G)19      map(fn) {20        return new Compose(this.$value.map((x) => x.map(fn)));21      }22      // ----- Applicative (Compose F G)23      ap(f) {24        return f.map(this.$value);25      }26    }27);28class Either {29  constructor(x) {30    this.$value = x;31  }32  // ----- Pointed (Either a)33  static of(x) {34    return new Right(x);35  }36}37class Left extends Either {38  get isLeft() {39    return true;40  }41  get isRight() {42    return false;43  }44  static of(x) {45    throw new Error(46      "`of` called on class Left (value) instead of Either (type)"47    );48  }49  [inspectCustom]() {50    return `Left(${inspect(this.$value)})`;51  }52  // ----- Functor (Either a)53  map() {54    return this;55  }56  // ----- Applicative (Either a)57  ap() {58    return this;59  }60  // ----- Monad (Either a)61  chain() {62    return this;63  }64  join() {65    return this;66  }67  // ----- Traversable (Either a)68  sequence(of) {69    return of(this);70  }71  traverse(of, fn) {72    return of(this);73  }74}75class Right extends Either {76  get isLeft() {77    return false;78  }79  get isRight() {80    return true;81  }82  static of(x) {83    throw new Error(84      "`of` called on class Right (value) instead of Either (type)"85    );86  }87  [inspectCustom]() {88    return `Right(${inspect(this.$value)})`;89  }90  // ----- Functor (Either a)91  map(fn) {92    return Either.of(fn(this.$value));93  }94  // ----- Applicative (Either a)95  ap(f) {96    return f.map(this.$value);97  }98  // ----- Monad (Either a)99  chain(fn) {100    return fn(this.$value);101  }102  join() {103    return this.$value;104  }105  // ----- Traversable (Either a)106  sequence(of) {107    return this.traverse(of, identity);108  }109  traverse(of, fn) {110    fn(this.$value).map(Either.of);111  }112}113class Identity {114  constructor(x) {115    this.$value = x;116  }117  [inspectCustom]() {118    return `Identity(${inspect(this.$value)})`;119  }120  // ----- Pointed Identity121  static of(x) {122    return new Identity(x);123  }124  // ----- Functor Identity125  map(fn) {126    return Identity.of(fn(this.$value));127  }128  // ----- Applicative Identity129  ap(f) {130    return f.map(this.$value);131  }132  // ----- Monad Identity133  chain(fn) {134    return this.map(fn).join();135  }136  join() {137    return this.$value;138  }139  // ----- Traversable Identity140  sequence(of) {141    return this.traverse(of, identity);142  }143  traverse(of, fn) {144    return fn(this.$value).map(Identity.of);145  }146}147class IO {148  constructor(fn) {149    this.unsafePerformIO = fn;150  }151  [inspectCustom]() {152    return "IO(?)";153  }154  // ----- Pointed IO155  static of(x) {156    return new IO(() => x);157  }158  // ----- Functor IO159  map(fn) {160    return new IO(compose(fn, this.unsafePerformIO));161  }162  // ----- Applicative IO163  ap(f) {164    return this.chain((fn) => f.map(fn));165  }166  // ----- Monad IO167  chain(fn) {168    return this.map(fn).join();169  }170  join() {171    return new IO(() => this.unsafePerformIO().unsafePerformIO());172  }173}174class List {175  constructor(xs) {176    this.$value = xs;177  }178  [inspectCustom]() {179    return `List(${inspect(this.$value)})`;180  }181  concat(x) {182    return new List(this.$value.concat(x));183  }184  // ----- Pointed List185  static of(x) {186    return new List([x]);187  }188  // ----- Functor List189  map(fn) {190    return new List(this.$value.map(fn));191  }192  // ----- Traversable List193  sequence(of) {194    return this.traverse(of, identity);195  }196  traverse(of, fn) {197    return this.$value.reduce(198      (f, a) =>199        fn(a)200          .map((b) => (bs) => bs.concat(b))201          .ap(f),202      of(new List([]))203    );204  }205}206class Map {207  constructor(x) {208    this.$value = x;209  }210  [inspectCustom]() {211    return `Map(${inspect(this.$value)})`;212  }213  insert(k, v) {214    const singleton = {};215    singleton[k] = v;216    return Map.of(Object.assign({}, this.$value, singleton));217  }218  reduceWithKeys(fn, zero) {219    return Object.keys(this.$value).reduce(220      (acc, k) => fn(acc, this.$value[k], k),221      zero222    );223  }224  // ----- Functor (Map a)225  map(fn) {226    return this.reduceWithKeys((m, v, k) => m.insert(k, fn(v)), new Map({}));227  }228  // ----- Traversable (Map a)229  sequence(of) {230    return this.traverse(of, identity);231  }232  traverse(of, fn) {233    return this.reduceWithKeys(234      (f, a, k) =>235        fn(a)236          .map((b) => (m) => m.insert(k, b))237          .ap(f),238      of(new Map({}))239    );240  }241}242class Maybe {243  get isNothing() {244    return this.$value === null || this.$value === undefined;245  }246  get isJust() {247    return !this.isNothing;248  }249  constructor(x) {250    this.$value = x;251  }252  [inspectCustom]() {253    return this.isNothing ? "Nothing" : `Just(${inspect(this.$value)})`;254  }255  // ----- Pointed Maybe256  static of(x) {257    return new Maybe(x);258  }259  // ----- Functor Maybe260  map(fn) {261    return this.isNothing ? this : Maybe.of(fn(this.$value));262  }263  // ----- Applicative Maybe264  ap(f) {265    return this.isNothing ? this : f.map(this.$value);266  }267  // ----- Monad Maybe268  chain(fn) {269    return this.map(fn).join();270  }271  join() {272    return this.isNothing ? this : this.$value;273  }274  // ----- Traversable Maybe275  sequence(of) {276    return this.traverse(of, identity);277  }278  traverse(of, fn) {279    return this.isNothing ? of(this) : fn(this.$value).map(Maybe.of);280  }281}282class Task {283  constructor(fork) {284    this.fork = fork;285  }286  [inspectCustom]() {287    return "Task(?)";288  }289  static rejected(x) {290    return new Task((reject, _) => reject(x));291  }292  // ----- Pointed (Task a)293  static of(x) {294    return new Task((_, resolve) => resolve(x));295  }296  // ----- Functor (Task a)297  map(fn) {298    return new Task((reject, resolve) =>299      this.fork(reject, compose(resolve, fn))300    );301  }302  // ----- Applicative (Task a)303  ap(f) {304    return this.chain((fn) => f.map(fn));305  }306  // ----- Monad (Task a)307  chain(fn) {308    return new Task((reject, resolve) =>309      this.fork(reject, (x) => fn(x).fork(reject, resolve))310    );311  }312  join() {313    return this.chain(identity);314  }315}316/**317 * functions318 */319// always :: a -> b -> a320const always = curry((a, b) => a);321// compose :: ((a -> b), (b -> c),  ..., (y -> z)) -> a -> z322const compose = (...fns) => (...args) =>323  fns.reduceRight((res, fn) => [fn.call(null, ...res)], args)[0];324// curry :: ((a, b, ...) -> c) -> a -> b -> ... -> c325function curry(fn) {326  const arity = fn.length;327  return function $curry(...args) {328    if (args.length < arity) {329      return $curry.bind(null, ...args);330    }331    return fn.call(null, ...args);332  };333}334// either :: (a -> c) -> (b -> c) -> Either a b -> c335const either = curry((f, g, e) => {336  if (e.isLeft) {337    return f(e.$value);338  }339  return g(e.$value);340});341// identity :: x -> x342const identity = (x) => x;343// inspect :: a -> String344const inspect = (x) => {345  if (x && typeof x.inspect === "function") {346    return x.inspect();347  }348  function inspectFn(f) {349    return f.name ? f.name : f.toString();350  }351  function inspectTerm(t) {352    switch (typeof t) {353      case "string":354        return `'${t}'`;355      case "object": {356        const ts = Object.keys(t).map((k) => [k, inspect(t[k])]);357        return `{${ts.map((kv) => kv.join(": ")).join(", ")}}`;358      }359      default:360        return String(t);361    }362  }363  function inspectArgs(args) {364    return Array.isArray(args)365      ? `[${args.map(inspect).join(", ")}]`366      : inspectTerm(args);367  }368  return typeof x === "function" ? inspectFn(x) : inspectArgs(x);369};370// left :: a -> Either a b371const left = (a) => new Left(a);372// liftA2 :: (Applicative f) => (a1 -> a2 -> b) -> f a1 -> f a2 -> f b373const liftA2 = curry((fn, a1, a2) => a1.map(fn).ap(a2));374// liftA3 :: (Applicative f) => (a1 -> a2 -> a3 -> b) -> f a1 -> f a2 -> f a3 -> f b375const liftA3 = curry((fn, a1, a2, a3) => a1.map(fn).ap(a2).ap(a3));376// maybe :: b -> (a -> b) -> Maybe a -> b377const maybe = curry((v, f, m) => {378  if (m.isNothing) {379    return v;380  }381  return f(m.$value);382});383// nothing :: Maybe a384const nothing = Maybe.of(null);385// reject :: a -> Task a b386const reject = (a) => Task.rejected(a);387/**388 * pointfree-utils389 */390// add :: Number -> Number -> Number391const add = curry((a, b) => a + b);392// append :: String -> String -> String393const append = flip(concat);394// chain :: Monad m => (a -> m b) -> m a -> m b395const chain = curry((fn, m) => m.chain(fn));396// concat :: String -> String -> String397const concat = curry((a, b) => a.concat(b));398// eq :: Eq a => a -> a -> Boolean399const eq = curry((a, b) => a === b);400// filter :: (a -> Boolean) -> [a] -> [a]401const filter = curry((fn, xs) => xs.filter(fn));402// flip :: (a -> b -> c) -> b -> a -> c403const flip = curry((fn, a, b) => fn(b, a));404// forEach :: (a -> ()) -> [a] -> ()405const forEach = curry((fn, xs) => xs.forEach(fn));406// head :: [a] -> a407const head = (xs) => xs[0];408// intercalate :: String -> [String] -> String409const intercalate = curry((str, xs) => xs.join(str));410// join :: Monad m => m (m a) -> m a411const join = (m) => m.join();412// last :: [a] -> a413const last = (xs) => xs[xs.length - 1];414// map :: Functor f => (a -> b) -> f a -> f b415const map = curry((fn, f) => f.map(fn));416// match :: RegExp -> String -> Boolean417const match = curry((re, str) => re.test(str));418// prop :: String -> Object -> a419const prop = curry((p, obj) => obj[p]);420// reduce :: (b -> a -> b) -> b -> [a] -> b421const reduce = curry((fn, zero, xs) => xs.reduce(fn, zero));422// replace :: RegExp -> String -> String -> String423const replace = curry((re, rpl, str) => str.replace(re, rpl));424// reverse :: [a] -> [a]425const reverse = (x) =>426  Array.isArray(x) ? x.reverse() : x.split("").reverse().join("");427// safeHead :: [a] -> Maybe a428const safeHead = compose(Maybe.of, head);429// safeLast :: [a] -> Maybe a430const safeLast = compose(Maybe.of, last);431// safeProp :: String -> Object -> Maybe a432const safeProp = curry((p, obj) => compose(Maybe.of, prop(p))(obj));433// sequence :: (Applicative f, Traversable t) => (a -> f a) -> t (f a) -> f (t a)434const sequence = curry((of, f) => f.sequence(of));435// sortBy :: Ord b => (a -> b) -> [a] -> [a]436const sortBy = curry((fn, xs) =>437  xs.sort((a, b) => {438    if (fn(a) === fn(b)) {439      return 0;440    }441    return fn(a) > fn(b) ? 1 : -1;442  })443);444// split :: String -> String -> [String]445const split = curry((sep, str) => str.split(sep));446// take :: Number -> [a] -> [a]447const take = curry((n, xs) => xs.slice(0, n));448// toLowerCase :: String -> String449const toLowerCase = (s) => s.toLowerCase();450// toString :: a -> String451const toString = String;452// toUpperCase :: String -> String453const toUpperCase = (s) => s.toUpperCase();454// traverse :: (Applicative f, Traversable t) => (a -> f a) -> (a -> f b) -> t a -> f455const traverse = curry((of, fn, f) => f.traverse(of, fn));456// unsafePerformIO :: IO a -> a457const unsafePerformIO = (io) => io.unsafePerformIO();458module.exports = {459  /**460   * functions461   */462  always,463  compose,464  curry,465  either,466  identity,467  inspect,468  left,469  liftA2,470  liftA3,471  maybe,472  nothing,473  reject,474  /**475   * algebraic-struct476   */477  createCompose,478  Either,479  Left,480  Right,481  Identity,482  IO,483  List,484  Map,485  Maybe,486  Task,487  /**488   * pointfree-utils489   */490  add,491  append,492  chain,493  concat,494  eq,495  filter,496  flip,497  forEach,498  head,499  intercalate,500  join,501  last,502  map,503  match,504  prop,505  reduce,506  replace,507  reverse,508  safeHead,509  safeLast,510  safeProp,511  sequence,512  sortBy,513  split,514  take,515  toLowerCase,516  toString,517  toUpperCase,518  traverse,519  unsafePerformIO,...index.js
Source:index.js  
1var hasMap = typeof Map === 'function' && Map.prototype;2var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null;3var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null;4var mapForEach = hasMap && Map.prototype.forEach;5var hasSet = typeof Set === 'function' && Set.prototype;6var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null;7var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null;8var setForEach = hasSet && Set.prototype.forEach;9var booleanValueOf = Boolean.prototype.valueOf;10var objectToString = Object.prototype.toString;11var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null;12var inspectCustom = require('./util.inspect').custom;13var inspectSymbol = (inspectCustom && isSymbol(inspectCustom)) ? inspectCustom : null;14module.exports = function inspect_ (obj, opts, depth, seen) {15    if (!opts) opts = {};16    if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {17        throw new TypeError('option "quoteStyle" must be "single" or "double"');18    }19    if (typeof obj === 'undefined') {20        return 'undefined';21    }22    if (obj === null) {23        return 'null';24    }25    if (typeof obj === 'boolean') {26        return obj ? 'true' : 'false';27    }28    if (typeof obj === 'string') {29        return inspectString(obj, opts);30    }31    if (typeof obj === 'number') {32      if (obj === 0) {33        return Infinity / obj > 0 ? '0' : '-0';34      }35      return String(obj);36    }37    if (typeof obj === 'bigint') {38      return String(obj) + 'n';39    }40    var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth;41    if (typeof depth === 'undefined') depth = 0;42    if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {43        return '[Object]';44    }45    if (typeof seen === 'undefined') seen = [];46    else if (indexOf(seen, obj) >= 0) {47        return '[Circular]';48    }49    function inspect (value, from) {50        if (from) {51            seen = seen.slice();52            seen.push(from);53        }54        return inspect_(value, opts, depth + 1, seen);55    }56    if (typeof obj === 'function') {57        var name = nameOf(obj);58        return '[Function' + (name ? ': ' + name : '') + ']';59    }60    if (isSymbol(obj)) {61        var symString = Symbol.prototype.toString.call(obj);62        return typeof obj === 'object' ? markBoxed(symString) : symString;63    }64    if (isElement(obj)) {65        var s = '<' + String(obj.nodeName).toLowerCase();66        var attrs = obj.attributes || [];67        for (var i = 0; i < attrs.length; i++) {68            s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts);69        }70        s += '>';71        if (obj.childNodes && obj.childNodes.length) s += '...';72        s += '</' + String(obj.nodeName).toLowerCase() + '>';73        return s;74    }75    if (isArray(obj)) {76        if (obj.length === 0) return '[]';77        return '[ ' + arrObjKeys(obj, inspect).join(', ') + ' ]';78    }79    if (isError(obj)) {80        var parts = arrObjKeys(obj, inspect);81        if (parts.length === 0) return '[' + String(obj) + ']';82        return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }';83    }84    if (typeof obj === 'object') {85        if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {86            return obj[inspectSymbol]();87        } else if (typeof obj.inspect === 'function') {88            return obj.inspect();89        }90    }91    if (isMap(obj)) {92        var parts = [];93        mapForEach.call(obj, function (value, key) {94            parts.push(inspect(key, obj) + ' => ' + inspect(value, obj));95        });96        return collectionOf('Map', mapSize.call(obj), parts);97    }98    if (isSet(obj)) {99        var parts = [];100        setForEach.call(obj, function (value ) {101            parts.push(inspect(value, obj));102        });103        return collectionOf('Set', setSize.call(obj), parts);104    }105    if (isNumber(obj)) {106        return markBoxed(inspect(Number(obj)));107    }108    if (isBigInt(obj)) {109        return markBoxed(inspect(bigIntValueOf.call(obj)));110    }111    if (isBoolean(obj)) {112        return markBoxed(booleanValueOf.call(obj));113    }114    if (isString(obj)) {115        return markBoxed(inspect(String(obj)));116    }117    if (!isDate(obj) && !isRegExp(obj)) {118        var xs = arrObjKeys(obj, inspect);119        if (xs.length === 0) return '{}';120        return '{ ' + xs.join(', ') + ' }';121    }122    return String(obj);123};124function wrapQuotes (s, defaultStyle, opts) {125    var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'";126    return quoteChar + s + quoteChar;127}128function quote (s) {129    return String(s).replace(/"/g, '"');130}131function isArray (obj) { return toStr(obj) === '[object Array]'; }132function isDate (obj) { return toStr(obj) === '[object Date]'; }133function isRegExp (obj) { return toStr(obj) === '[object RegExp]'; }134function isError (obj) { return toStr(obj) === '[object Error]'; }135function isSymbol (obj) { return toStr(obj) === '[object Symbol]'; }136function isString (obj) { return toStr(obj) === '[object String]'; }137function isNumber (obj) { return toStr(obj) === '[object Number]'; }138function isBigInt (obj) { return toStr(obj) === '[object BigInt]'; }139function isBoolean (obj) { return toStr(obj) === '[object Boolean]'; }140var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; };141function has (obj, key) {142    return hasOwn.call(obj, key);143}144function toStr (obj) {145    return objectToString.call(obj);146}147function nameOf (f) {148    if (f.name) return f.name;149    var m = String(f).match(/^function\s*([\w$]+)/);150    if (m) return m[1];151}152function indexOf (xs, x) {153    if (xs.indexOf) return xs.indexOf(x);154    for (var i = 0, l = xs.length; i < l; i++) {155        if (xs[i] === x) return i;156    }157    return -1;158}159function isMap (x) {160    if (!mapSize) {161        return false;162    }163    try {164        mapSize.call(x);165        try {166            setSize.call(x);167        } catch (s) {168            return true;169        }170        return x instanceof Map; // core-js workaround, pre-v2.5.0171    } catch (e) {}172    return false;173}174function isSet (x) {175    if (!setSize) {176        return false;177    }178    try {179        setSize.call(x);180        try {181            mapSize.call(x);182        } catch (m) {183            return true;184        }185        return x instanceof Set; // core-js workaround, pre-v2.5.0186    } catch (e) {}187    return false;188}189function isElement (x) {190    if (!x || typeof x !== 'object') return false;191    if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) {192        return true;193    }194    return typeof x.nodeName === 'string'195        && typeof x.getAttribute === 'function'196    ;197}198function inspectString (str, opts) {199    var s = str.replace(/(['\\])/g, '\\$1').replace(/[\x00-\x1f]/g, lowbyte);200    return wrapQuotes(s, 'single', opts);201}202function lowbyte (c) {203    var n = c.charCodeAt(0);204    var x = { 8: 'b', 9: 't', 10: 'n', 12: 'f', 13: 'r' }[n];205    if (x) return '\\' + x;206    return '\\x' + (n < 0x10 ? '0' : '') + n.toString(16);207}208function markBoxed (str) {209    return 'Object(' + str + ')';210}211function collectionOf (type, size, entries) {212    return type + ' (' + size + ') {' + entries.join(', ') + '}';213}214function arrObjKeys (obj, inspect) {215    var isArr = isArray(obj);216    var xs = [];217    if (isArr) {218        xs.length = obj.length;219        for (var i = 0; i < obj.length; i++) {220            xs[i] = has(obj, i) ? inspect(obj[i], obj) : '';221        }222    }223    for (var key in obj) {224        if (!has(obj, key)) continue;225        if (isArr && String(Number(key)) === key && key < obj.length) continue;226        if (/[^\w$]/.test(key)) {227            xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj));228        } else {229            xs.push(key + ': ' + inspect(obj[key], obj));230        }231    }232    return xs;...object-inspect.js
Source:object-inspect.js  
1'use strict'2/* global BigInt */3/* eslint-disable valid-typeof,no-redeclare,no-control-regex */4var hasMap = typeof Map === 'function' && Map.prototype5var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap6  ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null7var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function'8  ? mapSizeDescriptor.get : null9var mapForEach = hasMap && Map.prototype.forEach10var hasSet = typeof Set === 'function' && Set.prototype11var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet12  ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null13var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function'14  ? setSizeDescriptor.get : null15var setForEach = hasSet && Set.prototype.forEach16var booleanValueOf = Boolean.prototype.valueOf17var objectToString = Object.prototype.toString18var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null19// var inspectCustom = require('util').inspect.custom;20// console.log(inspectCustom);21// var inspectSymbol = (inspectCustom && isSymbol(inspectCustom)) ? inspectCustom : null;22var inspectSymbol = null23module.exports = function inspect_ (obj, opts, depth, seen) {24  if (!opts) opts = {}25  if (has(opts, 'quoteStyle') &&26    (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) {27    throw new TypeError('option "quoteStyle" must be "single" or "double"')28  }29  if (typeof obj === 'undefined') {30    return 'undefined'31  }32  if (obj === null) {33    return 'null'34  }35  if (typeof obj === 'boolean') {36    return obj ? 'true' : 'false'37  }38  if (typeof obj === 'string') {39    return inspectString(obj, opts)40  }41  if (typeof obj === 'number') {42    if (obj === 0) {43      return Infinity / obj > 0 ? '0' : '-0'44    }45    return String(obj)46  }47  if (typeof obj === 'bigint') {48    return String(obj) + 'n'49  }50  var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth51  if (typeof depth === 'undefined') depth = 052  if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') {53    return '[Object]'54  }55  if (typeof seen === 'undefined') seen = []56  else if (indexOf(seen, obj) >= 0) {57    return '[Circular]'58  }59  function inspect (value, from) {60    if (from) {61      seen = seen.slice()62      seen.push(from)63    }64    return inspect_(value, opts, depth + 1, seen)65  }66  if (typeof obj === 'function') {67    var name = nameOf(obj)68    return '[Function' + (name ? ': ' + name : '') + ']'69  }70  if (isSymbol(obj)) {71    var symString = Symbol.prototype.toString.call(obj)72    return typeof obj === 'object' ? markBoxed(symString) : symString73  }74  if (isElement(obj)) {75    var s = '<' + String(obj.nodeName).toLowerCase()76    var attrs = obj.attributes || []77    for (var i = 0; i < attrs.length; i++) {78      s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts)79    }80    s += '>'81    if (obj.childNodes && obj.childNodes.length) s += '...'82    s += '</' + String(obj.nodeName).toLowerCase() + '>'83    return s84  }85  if (isArray(obj)) {86    if (obj.length === 0) return '[]'87    return '[ ' + arrObjKeys(obj, inspect).join(', ') + ' ]'88  }89  if (isError(obj)) {90    var parts = arrObjKeys(obj, inspect)91    if (parts.length === 0) return '[' + String(obj) + ']'92    return '{ [' + String(obj) + '] ' + parts.join(', ') + ' }'93  }94  if (typeof obj === 'object') {95    if (inspectSymbol && typeof obj[inspectSymbol] === 'function') {96      return obj[inspectSymbol]()97    } else if (typeof obj.inspect === 'function') {98      return obj.inspect()99    }100  }101  if (isMap(obj)) {102    var parts = []103    mapForEach.call(obj, function (value, key) {104      parts.push(inspect(key, obj) + ' => ' + inspect(value, obj))105    })106    return collectionOf('Map', mapSize.call(obj), parts)107  }108  if (isSet(obj)) {109    var parts = []110    setForEach.call(obj, function (value) {111      parts.push(inspect(value, obj))112    })113    return collectionOf('Set', setSize.call(obj), parts)114  }115  if (isNumber(obj)) {116    return markBoxed(inspect(Number(obj)))117  }118  if (isBigInt(obj)) {119    return markBoxed(inspect(bigIntValueOf.call(obj)))120  }121  if (isBoolean(obj)) {122    return markBoxed(booleanValueOf.call(obj))123  }124  if (isString(obj)) {125    return markBoxed(inspect(String(obj)))126  }127  if (!isDate(obj) && !isRegExp(obj)) {128    var xs = arrObjKeys(obj, inspect)129    if (xs.length === 0) return '{}'130    return '{ ' + xs.join(', ') + ' }'131  }132  return String(obj)133}134function wrapQuotes (s, defaultStyle, opts) {135  var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'"136  return quoteChar + s + quoteChar137}138function quote (s) {139  return String(s).replace(/"/g, '"')140}141function isArray (obj) { return toStr(obj) === '[object Array]' }142function isDate (obj) { return toStr(obj) === '[object Date]' }143function isRegExp (obj) { return toStr(obj) === '[object RegExp]' }144function isError (obj) { return toStr(obj) === '[object Error]' }145function isSymbol (obj) { return toStr(obj) === '[object Symbol]' }146function isString (obj) { return toStr(obj) === '[object String]' }147function isNumber (obj) { return toStr(obj) === '[object Number]' }148function isBigInt (obj) { return toStr(obj) === '[object BigInt]' }149function isBoolean (obj) { return toStr(obj) === '[object Boolean]' }150var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this }151function has (obj, key) {152  return hasOwn.call(obj, key)153}154function toStr (obj) {155  return objectToString.call(obj)156}157function nameOf (f) {158  if (f.name) return f.name159  var m = String(f).match(/^function\s*([\w$]+)/)160  if (m) return m[1]161}162function indexOf (xs, x) {163  if (xs.indexOf) return xs.indexOf(x)164  for (var i = 0, l = xs.length; i < l; i++) {165    if (xs[i] === x) return i166  }167  return -1168}169function isMap (x) {170  if (!mapSize) {171    return false172  }173  try {174    mapSize.call(x)175    try {176      setSize.call(x)177    } catch (s) {178      return true179    }180    return x instanceof Map // core-js workaround, pre-v2.5.0181  } catch (e) { }182  return false183}184function isSet (x) {185  if (!setSize) {186    return false187  }188  try {189    setSize.call(x)190    try {191      mapSize.call(x)192    } catch (m) {193      return true194    }195    return x instanceof Set // core-js workaround, pre-v2.5.0196  } catch (e) { }197  return false198}199function isElement (x) {200  return false201}202function inspectString (str, opts) {203  var s = str.replace(/(['\\])/g, '\\$1').replace(/[\x00-\x1f]/g, lowbyte)204  return wrapQuotes(s, 'single', opts)205}206function lowbyte (c) {207  var n = c.charCodeAt(0)208  var x = { 8: 'b', 9: 't', 10: 'n', 12: 'f', 13: 'r' }[n]209  if (x) return '\\' + x210  return '\\x' + (n < 0x10 ? '0' : '') + n.toString(16)211}212function markBoxed (str) {213  return 'Object(' + str + ')'214}215function collectionOf (type, size, entries) {216  return type + ' (' + size + ') {' + entries.join(', ') + '}'217}218function arrObjKeys (obj, inspect) {219  var isArr = isArray(obj)220  var xs = []221  if (isArr) {222    xs.length = obj.length223    for (var i = 0; i < obj.length; i++) {224      xs[i] = has(obj, i) ? inspect(obj[i], obj) : ''225    }226  }227  for (var key in obj) {228    if (!has(obj, key)) continue229    if (isArr && String(Number(key)) === key && key < obj.length) continue230    if (/[^\w$]/.test(key)) {231      xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj))232    } else {233      xs.push(key + ': ' + inspect(obj[key], obj))234    }235  }236  return xs...Using AI Code Generation
1var chai = require('chai');2var chaiAsPromised = require('chai-as-promised');3chai.use(chaiAsPromised);4chai.config.includeStack = true;5chai.config.showDiff = true;6chai.config.truncateThreshold = 0;7var expect = chai.expect;8var assert = chai.assert;9var should = chai.should();10var inspect = require('util').inspect;11chai.Assertion.addProperty('inspectCustom', function () {12    var obj = this._obj;13    this.assert(14        obj === inspect(obj),15        'expected #{this} to inspect to #{exp}',16        'expected #{this} to not inspect to #{exp}',17        inspect(obj)18    );19});20var chai = require('chai');21var chaiAsPromised = require('chai-as-promised');22chai.use(chaiAsPromised);23chai.config.includeStack = true;24chai.config.showDiff = true;25chai.config.truncateThreshold = 0;26var expect = chai.expect;27var assert = chai.assert;28var should = chai.should();29var inspect = require('util').inspect;30chai.Assertion.addProperty('inspectCustom', function () {31    var obj = this._obj;32    this.assert(33        obj === inspect(obj),34        'expected #{this} to inspect to #{exp}',35        'expected #{this} to not inspect to #{exp}',36        inspect(obj)37    );38});39var chai = require('chai');40var chaiAsPromised = require('chai-as-promised');41chai.use(chaiAsPromised);42chai.config.includeStack = true;43chai.config.showDiff = true;44chai.config.truncateThreshold = 0;45var expect = chai.expect;46var assert = chai.assert;47var should = chai.should();48var inspect = require('util').inspect;49chai.Assertion.addProperty('inspectCustom', function () {50    var obj = this._obj;51    this.assert(52        obj === inspect(obj),53        'expected #{this} to inspect to #{exp}',54        'expected #{this} to not inspect to #{exp}',55        inspect(obj)56    );57});58var chai = require('chai');59var chaiAsPromised = require('chai-as-promised');Using AI Code Generation
1const chai = require('chai');2const chaiAsPromised = require('chai-as-promised');3const {inspectCustom} = require('chai-inspect-custom');4chai.use(chaiAsPromised);5chai.use(inspectCustom);6const {expect} = chai;7const {inspect} = require('util');8describe('test', () => {9  it('should inspect custom', () => {10    const obj = {a: 1, b: 2, c: 3};11    expect(obj).to.inspectCustom((customObj) => {12      expect(customObj).to.deep.equal({a: 1, b: 2, c: 3});13    });14  });15});16AssertionError: expected { a: 1, b: 2, c: 3 } to inspect to { a: 1, b: 2, c: 3 }17+{18+}19const chai = require('chai');20const chaiAsPromised = require('chai-as-promised');21const {inspectCustom} = require('chai-inspect-custom');22chai.use(chaiAsPromised);23chai.use(inspectCustom);24const {expect} = chai;25const {inspect} = require('util');26describe('test', () => {27  it('should inspect custom', () => {28    const obj = {a: 1, b: 2, c: 3};29    expect(obj).to.inspectCustom((customObj) => {30      expect(customObj).to.deep.equal({a: 1, b: 2, c: 3});31    });32  });33});Using AI Code Generation
1var chai = require('chai');2var assert = chai.assert;3chai.use(function (_chai, utils) {4  var inspect = utils.objDisplay;5  _chai.Assertion.addMethod('inspectCustom', function (val) {6    var obj = utils.flag(this, 'object');7    this.assert(8      'expected #{this} to equal #{exp}',9      'expected #{this} to not equal #{exp}',10    );11  });12});13describe('test', function () {14  it('test', function () {15    assert.inspectCustom(1, 1);16  });17});Using AI Code Generation
1const chai = require('chai');2const { inspectCustom } = require('chai/lib/chai/utils/inspect');3chai.use(require('chai-as-promised'));4chai.config.includeStack = true;5chai.use((chai, utils) => {6    utils.addMethod(chai.Assertion.prototype, 'inspect', function () {7        const obj = utils.flag(this, 'object');8        const customInspect = inspectCustom(obj);9${customInspect}` : '';10        this.assert(11            `expected #{this} to have an inspect method${customInspectStr}`,12            `expected #{this} to not have an inspect method${customInspectStr}`,13        );14    });15});16const chai = require('chai');17const expect = chai.expect;18describe('inspect method', () => {19    it('should have inspect method', () => {20        expect({}).to.be.an('object').and.have.property('inspect');21        expect({}).to.be.an('object').and.inspect();22    });23});24  0 passing (8ms)25     AssertionError: expected {} to have an inspect method26      at Assertion.assert (node_modules/chai/lib/chai/assertion.js:107:23)27      at Assertion.inspect (test.js:15:14)28      at Context.<anonymous> (test.spec.js:9:39)Using AI Code Generation
1var chai = require('chai');2var assert = chai.assert;3var myObj = {4  inspect: function() {5    return 'inspect() called';6  },7  inspectCustom: function() {8    return 'inspectCustom() called';9  }10};11assert.equal(myObj, 'inspectCustom() called');12var chai = require('chai');13var assert = chai.assert;14var myObj = {15  inspect: function() {16    return 'inspect() called';17  },18  inspectCustom: function() {19    return 'inspectCustom() called';20  }21};22assert.deepEqual(myObj, 'inspectCustom() called');23var chai = require('chai');24var assert = chai.assert;25var myObj = {26  inspect: function() {27    return 'inspect() called';28  },29  inspectCustom: function() {30    return 'inspectCustom() called';31  }32};33assert.equal(myObj, 'inspectCustom() called');34var chai = require('chai');35var assert = chai.assert;36var myObj = {37  inspect: function() {38    return 'inspect() called';39  },40  inspectCustom: function() {41    return 'inspectCustom() called';42  }43};44assert.deepEqual(myObj, 'inspectCustom() called');45var chai = require('chai');46var assert = chai.assert;47var myObj = {48  inspect: function() {49    return 'inspect() called';50  },51  inspectCustom: function() {52    return 'inspectCustom() called';53  }54};55assert.equal(myObj, 'inspectCustom() called');Using AI Code Generation
1var chai = require("chai");2var chaiAsPromised = require("chai-as-promised");3chai.use(chaiAsPromised);4var expect = chai.expect;5var should = chai.should();6var test = function() {7  var a = 1;8  var b = 2;9  expect(a).to.equal(b);10};11test();12var inspect = require('util').inspect;13chai.Assertion.prototype.inspectCustom = function () {14  var obj = this._obj;15  if (obj && typeof obj.inspect === 'function') {16    return obj.inspect();17  }18  return inspect(obj);19};20var flag = require('./flag');21var getProperties = require('./getProperties');22var config = require('../config');23 * ### .inspect(obj)24 * @param {*} obj25module.exports = function (obj) {26  var flags = flag(this, 'object');27  var stylize = flag(this, 'stylize');28  return inspect(obj, {29  });30};31var flag = require('./flag');32var getProperties = require('./getProperties');33var config = require('../config');34 * ### .inspect(obj)35 * @param {*} obj36module.exports = function (obj) {37  var flags = flag(this, 'object');38  var stylize = flag(thisUsing AI Code Generation
1var chai = require('chai');2chai.use(require('chai-json-schema'));3var expect = chai.expect;4var assert = chai.assert;5var should = chai.should();6var obj = {7};8var schema = {9    "properties": {10        "name": {11        },12        "age": {13        }14    },15};16describe('Test', function() {17    it('should return true if the object conforms to the schema', function() {18        expect(obj).to.be.jsonSchema(schema);19    });20});211 passing (8ms)Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
