All files / src/internal/client/dev equality.js

69.14% Statements 65/94
66.66% Branches 8/12
83.33% Functions 5/6
68.47% Lines 63/92

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 932x 2x 2x 2x 4x 4x 4x 4x 832369x 832369x 832369x 305808x 305808x 305808x           305808x 832369x 832369x 4x 4x 4x 37756x 37756x 37756x 6x 6x 6x           6x 37756x 37756x 4x 4x 4x 1068613x 1068613x 1068613x 545886x 545886x 545886x           545886x 1068613x 1068613x 4x 4x 2x 2x 2x 2x 2x 2x 2x 2x 8x           8x 8x 8x 2x 2x 2x 2x 2x 2x 2x 2x                    
import * as w from '../warnings.js';
import { get_proxied_value } from '../proxy.js';
 
export function init_array_prototype_warnings() {
	const array_prototype = Array.prototype;
	const { indexOf, lastIndexOf, includes } = array_prototype;
 
	array_prototype.indexOf = function (item, from_index) {
		const index = indexOf.call(this, item, from_index);
 
		if (index === -1) {
			const test = indexOf.call(get_proxied_value(this), get_proxied_value(item), from_index);
 
			if (test !== -1) {
				w.state_proxy_equality_mismatch('array.indexOf(...)');

				// eslint-disable-next-line no-console
				console.trace();
			}
		}
 
		return index;
	};
 
	array_prototype.lastIndexOf = function (item, from_index) {
		const index = lastIndexOf.call(this, item, from_index);
 
		if (index === -1) {
			const test = lastIndexOf.call(get_proxied_value(this), get_proxied_value(item), from_index);
 
			if (test !== -1) {
				w.state_proxy_equality_mismatch('array.lastIndexOf(...)');

				// eslint-disable-next-line no-console
				console.trace();
			}
		}
 
		return index;
	};
 
	array_prototype.includes = function (item, from_index) {
		const has = includes.call(this, item, from_index);
 
		if (!has) {
			const test = includes.call(get_proxied_value(this), get_proxied_value(item), from_index);
 
			if (test) {
				w.state_proxy_equality_mismatch('array.includes(...)');

				// eslint-disable-next-line no-console
				console.trace();
			}
		}
 
		return has;
	};
}
 
/**
 * @param {any} a
 * @param {any} b
 * @param {boolean} equal
 * @returns {boolean}
 */
export function strict_equals(a, b, equal = true) {
	if ((a === b) !== (get_proxied_value(a) === get_proxied_value(b))) {
		w.state_proxy_equality_mismatch(equal ? '===' : '!==');

		// eslint-disable-next-line no-console
		console.trace();
	}
 
	return (a === b) === equal;
}
 
/**
 * @param {any} a
 * @param {any} b
 * @param {boolean} equal
 * @returns {boolean}
 */
export function equals(a, b, equal = true) {
	if ((a == b) !== (get_proxied_value(a) == get_proxied_value(b))) {
		w.state_proxy_equality_mismatch(equal ? '==' : '!=');

		// eslint-disable-next-line no-console
		console.trace();
	}

	return (a == b) === equal;
}