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(this
Using 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!!