Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

jest-matcher-deep-close-to

Package Overview
Dependencies
Maintainers
1
Versions
13
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

jest-matcher-deep-close-to - npm Package Compare versions

Comparing version 2.0.1 to 3.0.0

lib-esm/types.js

45

lib-esm/index.js

@@ -1,40 +0,11 @@

import { matcherHint, printExpected, printReceived } from 'jest-matcher-utils';
import { recursiveCheck } from './recursiveCheck';
function printResponse(error, received, expected) {
/* istanbul ignore next */
if (error) {
return {
message: () => `${matcherHint('.toBeDeepCloseTo')}\n\n` +
`${error.reason}:\n` +
` ${printExpected(error.expected)}\n` +
'Received:\n' +
` ${printReceived(error.received)}`,
pass: false,
};
}
else {
return {
message: () => `${matcherHint('.not.toBeDeepCloseTo')}\n\n` +
'The two objects are deeply equal:\n' +
` ${printExpected(expected)}\n` +
'Received:\n' +
` ${printReceived(received)}`,
pass: true,
};
}
import { printResponse } from './utils';
export function toBeDeepCloseTo(received, expected, precision = 2) {
const error = recursiveCheck(received, expected, precision);
return printResponse(error, received, expected, precision);
}
export function toBeDeepCloseTo(received, expected, decimals) {
if (decimals === undefined) {
decimals = 10;
}
const error = recursiveCheck(received, expected, decimals);
return printResponse(error, received, expected);
export function toMatchCloseTo(received, expected, precision = 2) {
const error = recursiveCheck(received, expected, precision, false);
return printResponse(error, received, expected, precision);
}
export function toMatchCloseTo(received, expected, decimals) {
if (decimals === undefined) {
decimals = 10;
}
const error = recursiveCheck(received, expected, decimals, false);
return printResponse(error, received, expected);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFL0UsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxrQkFBa0IsQ0FBQztBQU9uRSxTQUFTLGFBQWEsQ0FDcEIsS0FBb0IsRUFDcEIsUUFBa0IsRUFDbEIsUUFBa0I7SUFFbEIsMEJBQTBCO0lBQzFCLElBQUksS0FBSyxFQUFFO1FBQ1QsT0FBTztZQUNMLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FDWixHQUFHLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUN4QyxHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUs7Z0JBQ3BCLEtBQUssYUFBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFDdEMsYUFBYTtnQkFDYixLQUFLLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDdEMsSUFBSSxFQUFFLEtBQUs7U0FDWixDQUFDO0tBQ0g7U0FBTTtRQUNMLE9BQU87WUFDTCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQ1osR0FBRyxXQUFXLENBQUMsc0JBQXNCLENBQUMsTUFBTTtnQkFDNUMscUNBQXFDO2dCQUNyQyxLQUFLLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSTtnQkFDaEMsYUFBYTtnQkFDYixLQUFLLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoQyxJQUFJLEVBQUUsSUFBSTtTQUNYLENBQUM7S0FDSDtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUM3QixRQUFrQixFQUNsQixRQUFrQixFQUNsQixRQUFpQjtJQUVqQixJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUU7UUFDMUIsUUFBUSxHQUFHLEVBQUUsQ0FBQztLQUNmO0lBQ0QsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDM0QsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsUUFBa0IsRUFDbEIsUUFBa0IsRUFDbEIsUUFBaUI7SUFFakIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO1FBQzFCLFFBQVEsR0FBRyxFQUFFLENBQUM7S0FDZjtJQUNELE1BQU0sS0FBSyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRSxPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELENBQUMifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWxELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEMsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsUUFBa0IsRUFDbEIsUUFBa0IsRUFDbEIsU0FBUyxHQUFHLENBQUM7SUFFYixNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RCxPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsUUFBa0IsRUFDbEIsUUFBa0IsRUFDbEIsU0FBUyxHQUFHLENBQUM7SUFFYixNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDN0QsQ0FBQyJ9

@@ -0,9 +1,10 @@

import { calculatePrecision } from './utils';
/**
* @param {number|Array} received
* @param {number|Array} expected
* @param {number} decimals
* @param {number} precision
* @param {boolean} strict equality or subsets allowed
* @return {boolean|{reason, expected, received}}
*/
export function recursiveCheck(received, expected, decimals, strict = true) {
export function recursiveCheck(received, expected, precision, strict = true) {
if (typeof received === 'number' && typeof expected === 'number') {

@@ -15,3 +16,3 @@ // Received and expected are numbers

: {
reason: `Expected value to be (using ${decimals} decimals)`,
reason: 'Expected',
expected,

@@ -25,3 +26,3 @@ received,

: {
reason: `Expected value to be`,
reason: 'Expected',
expected,

@@ -31,3 +32,3 @@ received,

}
else if (Math.abs(received - expected) <= Math.pow(10, -decimals)) {
else if (Math.abs(received - expected) <= calculatePrecision(precision)) {
return false;

@@ -37,5 +38,6 @@ }

return {
reason: `Expected value to be (using ${decimals} decimals)`,
reason: 'Expected',
expected,
received,
diff: Math.abs(received - expected),
};

@@ -58,18 +60,28 @@ }

}
else if (Array.isArray(received) && Array.isArray(expected)) {
else if (isArray(received) && isArray(expected)) {
// Received and expected are arrays
if (received.length !== expected.length) {
const receivedLength = received.length;
const expectedLength = expected.length;
if (receivedLength !== expectedLength) {
return {
reason: 'The arrays length does not match',
expected: expected.length,
received: received.length,
expected: expectedLength,
received: receivedLength,
};
}
for (let i = 0; i < received.length; i++) {
const error = recursiveCheck(received[i], expected[i], decimals, strict);
if (error)
return error;
for (let i = 0; i < receivedLength; i++) {
const error = recursiveCheck(received[i], expected[i], precision, strict);
if (error) {
return { ...error, index: i };
}
}
return false;
}
else if (expected === undefined && received === undefined) {
/* Received and expected are either
* 1) both explicitly set as undefined
* 2) undefined properties of an object, where the received value may be implicitly undefined
*/
return false;
}
else if (expected === null && received === null) {

@@ -91,5 +103,3 @@ // Received and expected are null

if (!sameLength ||
expectedKeys.some(function (e) {
return !Object.prototype.hasOwnProperty.call(received, e);
})) {
expectedKeys.some((e) => !Object.prototype.hasOwnProperty.call(received, e))) {
return {

@@ -102,5 +112,6 @@ reason: 'The objects do not have similar keys',

for (const prop in expected) {
const propError = recursiveCheck(received[prop], expected[prop], decimals, strict);
if (propError)
return propError;
const propError = recursiveCheck(received[prop], expected[prop], precision, strict);
if (propError) {
return { ...propError, key: prop };
}
}

@@ -118,2 +129,7 @@ return false;

}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdXJzaXZlQ2hlY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVjdXJzaXZlQ2hlY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBY0E7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FDNUIsUUFBa0IsRUFDbEIsUUFBa0IsRUFDbEIsUUFBZ0IsRUFDaEIsTUFBTSxHQUFHLElBQUk7SUFFYixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDaEUsb0NBQW9DO1FBRXBDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1AsQ0FBQyxDQUFDO29CQUNFLE1BQU0sRUFBRSwrQkFBK0IsUUFBUSxZQUFZO29CQUMzRCxRQUFRO29CQUNSLFFBQVE7aUJBQ1QsQ0FBQztTQUNQO2FBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5QixPQUFPLFFBQVEsS0FBSyxRQUFRO2dCQUMxQixDQUFDLENBQUMsS0FBSztnQkFDUCxDQUFDLENBQUM7b0JBQ0UsTUFBTSxFQUFFLHNCQUFzQjtvQkFDOUIsUUFBUTtvQkFDUixRQUFRO2lCQUNULENBQUM7U0FDUDthQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuRSxPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU07WUFDTCxPQUFPO2dCQUNMLE1BQU0sRUFBRSwrQkFBK0IsUUFBUSxZQUFZO2dCQUMzRCxRQUFRO2dCQUNSLFFBQVE7YUFDVCxDQUFDO1NBQ0g7S0FDRjtTQUFNLElBQ0wsQ0FBQyxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxRQUFRLEtB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
function isArray(value) {
return (Array.isArray(value) ||
value instanceof Float32Array ||
value instanceof Float64Array);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdXJzaXZlQ2hlY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVjdXJzaXZlQ2hlY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTdDOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQzVCLFFBQWtCLEVBQ2xCLFFBQWtCLEVBQ2xCLFNBQWlCLEVBQ2pCLE1BQU0sR0FBRyxJQUFJO0lBRWIsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ2hFLG9DQUFvQztRQUVwQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxLQUFLO2dCQUNQLENBQUMsQ0FBQztvQkFDRSxNQUFNLEVBQUUsVUFBVTtvQkFDbEIsUUFBUTtvQkFDUixRQUFRO2lCQUNULENBQUM7U0FDUDthQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUIsT0FBTyxRQUFRLEtBQUssUUFBUTtnQkFDMUIsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1AsQ0FBQyxDQUFDO29CQUNFLE1BQU0sRUFBRSxVQUFVO29CQUNsQixRQUFRO29CQUNSLFFBQVE7aUJBQ1QsQ0FBQztTQUNQO2FBQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUN6RSxPQUFPLEtBQUssQ0FBQztTQUNkO2FBQU07WUFDTCxPQUFPO2dCQUNMLE1BQU0sRUFBRSxVQUFVO2dCQUNsQixRQUFRO2dCQUNSLFFBQVE7Z0JBQ1IsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQzthQUNwQyxDQUFDO1NBQ0g7S0FDRjtT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

@@ -1,7 +0,3 @@

import { Iterable } from './recursiveCheck';
export interface MatcherResult {
message: () => string;
pass: boolean;
}
export declare function toBeDeepCloseTo(received: Iterable, expected: Iterable, decimals?: number): MatcherResult;
export declare function toMatchCloseTo(received: Iterable, expected: Iterable, decimals?: number): MatcherResult;
import type { Iterable, MatcherResult } from './types';
export declare function toBeDeepCloseTo(received: Iterable, expected: Iterable, precision?: number): MatcherResult;
export declare function toMatchCloseTo(received: Iterable, expected: Iterable, precision?: number): MatcherResult;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const jest_matcher_utils_1 = require("jest-matcher-utils");
exports.toMatchCloseTo = exports.toBeDeepCloseTo = void 0;
const recursiveCheck_1 = require("./recursiveCheck");
function printResponse(error, received, expected) {
/* istanbul ignore next */
if (error) {
return {
message: () => `${jest_matcher_utils_1.matcherHint('.toBeDeepCloseTo')}\n\n` +
`${error.reason}:\n` +
` ${jest_matcher_utils_1.printExpected(error.expected)}\n` +
'Received:\n' +
` ${jest_matcher_utils_1.printReceived(error.received)}`,
pass: false,
};
}
else {
return {
message: () => `${jest_matcher_utils_1.matcherHint('.not.toBeDeepCloseTo')}\n\n` +
'The two objects are deeply equal:\n' +
` ${jest_matcher_utils_1.printExpected(expected)}\n` +
'Received:\n' +
` ${jest_matcher_utils_1.printReceived(received)}`,
pass: true,
};
}
const utils_1 = require("./utils");
function toBeDeepCloseTo(received, expected, precision = 2) {
const error = (0, recursiveCheck_1.recursiveCheck)(received, expected, precision);
return (0, utils_1.printResponse)(error, received, expected, precision);
}
function toBeDeepCloseTo(received, expected, decimals) {
if (decimals === undefined) {
decimals = 10;
}
const error = recursiveCheck_1.recursiveCheck(received, expected, decimals);
return printResponse(error, received, expected);
}
exports.toBeDeepCloseTo = toBeDeepCloseTo;
function toMatchCloseTo(received, expected, decimals) {
if (decimals === undefined) {
decimals = 10;
}
const error = recursiveCheck_1.recursiveCheck(received, expected, decimals, false);
return printResponse(error, received, expected);
function toMatchCloseTo(received, expected, precision = 2) {
const error = (0, recursiveCheck_1.recursiveCheck)(received, expected, precision, false);
return (0, utils_1.printResponse)(error, received, expected, precision);
}
exports.toMatchCloseTo = toMatchCloseTo;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyREFBK0U7QUFFL0UscURBQW1FO0FBT25FLFNBQVMsYUFBYSxDQUNwQixLQUFvQixFQUNwQixRQUFrQixFQUNsQixRQUFrQjtJQUVsQiwwQkFBMEI7SUFDMUIsSUFBSSxLQUFLLEVBQUU7UUFDVCxPQUFPO1lBQ0wsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUNaLEdBQUcsZ0NBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO2dCQUN4QyxHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUs7Z0JBQ3BCLEtBQUssa0NBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUk7Z0JBQ3RDLGFBQWE7Z0JBQ2IsS0FBSyxrQ0FBYSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN0QyxJQUFJLEVBQUUsS0FBSztTQUNaLENBQUM7S0FDSDtTQUFNO1FBQ0wsT0FBTztZQUNMLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FDWixHQUFHLGdDQUFXLENBQUMsc0JBQXNCLENBQUMsTUFBTTtnQkFDNUMscUNBQXFDO2dCQUNyQyxLQUFLLGtDQUFhLENBQUMsUUFBUSxDQUFDLElBQUk7Z0JBQ2hDLGFBQWE7Z0JBQ2IsS0FBSyxrQ0FBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2hDLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQztLQUNIO0FBQ0gsQ0FBQztBQUVELFNBQWdCLGVBQWUsQ0FDN0IsUUFBa0IsRUFDbEIsUUFBa0IsRUFDbEIsUUFBaUI7SUFFakIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO1FBQzFCLFFBQVEsR0FBRyxFQUFFLENBQUM7S0FDZjtJQUNELE1BQU0sS0FBSyxHQUFHLCtCQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzRCxPQUFPLGFBQWEsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELENBQUM7QUFWRCwwQ0FVQztBQUVELFNBQWdCLGNBQWMsQ0FDNUIsUUFBa0IsRUFDbEIsUUFBa0IsRUFDbEIsUUFBaUI7SUFFakIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFO1FBQzFCLFFBQVEsR0FBRyxFQUFFLENBQUM7S0FDZjtJQUNELE1BQU0sS0FBSyxHQUFHLCtCQUFjLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbEUsT0FBTyxhQUFhLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBVkQsd0NBVUMifQ==
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWtEO0FBRWxELG1DQUF3QztBQUV4QyxTQUFnQixlQUFlLENBQzdCLFFBQWtCLEVBQ2xCLFFBQWtCLEVBQ2xCLFNBQVMsR0FBRyxDQUFDO0lBRWIsTUFBTSxLQUFLLEdBQUcsSUFBQSwrQkFBYyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUQsT0FBTyxJQUFBLHFCQUFhLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQVBELDBDQU9DO0FBRUQsU0FBZ0IsY0FBYyxDQUM1QixRQUFrQixFQUNsQixRQUFrQixFQUNsQixTQUFTLEdBQUcsQ0FBQztJQUViLE1BQU0sS0FBSyxHQUFHLElBQUEsK0JBQWMsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRSxPQUFPLElBQUEscUJBQWEsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBUEQsd0NBT0MifQ==

@@ -1,16 +0,9 @@

export declare type Iterable = number | Iterable[] | {
[k: string]: Iterable;
} | string | null | undefined | boolean;
export interface Error {
reason: string;
expected: unknown;
received: unknown;
}
import type { Iterable, Error } from './types';
/**
* @param {number|Array} received
* @param {number|Array} expected
* @param {number} decimals
* @param {number} precision
* @param {boolean} strict equality or subsets allowed
* @return {boolean|{reason, expected, received}}
*/
export declare function recursiveCheck(received: Iterable, expected: Iterable, decimals: number, strict?: boolean): false | Error;
export declare function recursiveCheck(received: Iterable, expected: Iterable, precision: number, strict?: boolean): false | Error;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.recursiveCheck = void 0;
const utils_1 = require("./utils");
/**
* @param {number|Array} received
* @param {number|Array} expected
* @param {number} decimals
* @param {number} precision
* @param {boolean} strict equality or subsets allowed
* @return {boolean|{reason, expected, received}}
*/
function recursiveCheck(received, expected, decimals, strict = true) {
function recursiveCheck(received, expected, precision, strict = true) {
if (typeof received === 'number' && typeof expected === 'number') {

@@ -17,3 +19,3 @@ // Received and expected are numbers

: {
reason: `Expected value to be (using ${decimals} decimals)`,
reason: 'Expected',
expected,

@@ -27,3 +29,3 @@ received,

: {
reason: `Expected value to be`,
reason: 'Expected',
expected,

@@ -33,3 +35,3 @@ received,

}
else if (Math.abs(received - expected) <= Math.pow(10, -decimals)) {
else if (Math.abs(received - expected) <= (0, utils_1.calculatePrecision)(precision)) {
return false;

@@ -39,5 +41,6 @@ }

return {
reason: `Expected value to be (using ${decimals} decimals)`,
reason: 'Expected',
expected,
received,
diff: Math.abs(received - expected),
};

@@ -60,18 +63,28 @@ }

}
else if (Array.isArray(received) && Array.isArray(expected)) {
else if (isArray(received) && isArray(expected)) {
// Received and expected are arrays
if (received.length !== expected.length) {
const receivedLength = received.length;
const expectedLength = expected.length;
if (receivedLength !== expectedLength) {
return {
reason: 'The arrays length does not match',
expected: expected.length,
received: received.length,
expected: expectedLength,
received: receivedLength,
};
}
for (let i = 0; i < received.length; i++) {
const error = recursiveCheck(received[i], expected[i], decimals, strict);
if (error)
return error;
for (let i = 0; i < receivedLength; i++) {
const error = recursiveCheck(received[i], expected[i], precision, strict);
if (error) {
return { ...error, index: i };
}
}
return false;
}
else if (expected === undefined && received === undefined) {
/* Received and expected are either
* 1) both explicitly set as undefined
* 2) undefined properties of an object, where the received value may be implicitly undefined
*/
return false;
}
else if (expected === null && received === null) {

@@ -93,5 +106,3 @@ // Received and expected are null

if (!sameLength ||
expectedKeys.some(function (e) {
return !Object.prototype.hasOwnProperty.call(received, e);
})) {
expectedKeys.some((e) => !Object.prototype.hasOwnProperty.call(received, e))) {
return {

@@ -104,5 +115,6 @@ reason: 'The objects do not have similar keys',

for (const prop in expected) {
const propError = recursiveCheck(received[prop], expected[prop], decimals, strict);
if (propError)
return propError;
const propError = recursiveCheck(received[prop], expected[prop], precision, strict);
if (propError) {
return { ...propError, key: prop };
}
}

@@ -121,2 +133,7 @@ return false;

exports.recursiveCheck = recursiveCheck;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdXJzaXZlQ2hlY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVjdXJzaXZlQ2hlY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQTs7Ozs7O0dBTUc7QUFDSCxTQUFnQixjQUFjLENBQzVCLFFBQWtCLEVBQ2xCLFFBQWtCLEVBQ2xCLFFBQWdCLEVBQ2hCLE1BQU0sR0FBRyxJQUFJO0lBRWIsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO1FBQ2hFLG9DQUFvQztRQUVwQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNuQixPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxLQUFLO2dCQUNQLENBQUMsQ0FBQztvQkFDRSxNQUFNLEVBQUUsK0JBQStCLFFBQVEsWUFBWTtvQkFDM0QsUUFBUTtvQkFDUixRQUFRO2lCQUNULENBQUM7U0FDUDthQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDOUIsT0FBTyxRQUFRLEtBQUssUUFBUTtnQkFDMUIsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1AsQ0FBQyxDQUFDO29CQUNFLE1BQU0sRUFBRSxzQkFBc0I7b0JBQzlCLFFBQVE7b0JBQ1IsUUFBUTtpQkFDVCxDQUFDO1NBQ1A7YUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbkUsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNO1lBQ0wsT0FBTztnQkFDTCxNQUFNLEVBQUUsK0JBQStCLFFBQVEsWUFBWTtnQkFDM0QsUUFBUTtnQkFDUixRQUFRO2FBQ1QsQ0FBQztTQUNIO0tBQ0Y7U0FBTSxJQUNMLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsQ0FBQztRQUM5RCxDQUFDLE9BQU8sUUFBUSxLQUFLLFNBQVMsSUFBSSxPQUFPLFFBQVEsS0FBSyxTQUFTLENBQUMsRUFDaEU7UUFDQSxrRUFBa0U7UUFFbEUsSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQ3pCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7YUFBTTtZQUNMLE9BQU87Z0JBQ0wsTUFBTSxFQUFFLE9BQU8sT0FBTyxRQUFRLGdCQUFnQjtnQkFDOUMsUUFBUTtnQkFDUixRQUFRO2FBQ1QsQ0FBQztTQUNIO0tBQ0Y7U0FBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUM3RCxtQ0FBbUM7UUFFbkMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDdkMsT0FBTztnQkFDTCxNQUFNLEVBQUUsa0NBQWtDO2dCQUMxQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU07Z0JBQ3pCLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTTthQUMxQixDQUFDO1NBQ0g7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN4QyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDekUsSUFBSSxLQUFLO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxLQUFLLENBQUM7S0FDZDtTQUFNLElBQUksUUFBUSxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssSUFBSSxFQUFFO1FBQ2pELGlDQUFpQztRQUVqQyxPQUFPLEtBQUssQ0FBQztLQUNkO1NBQU0sSUFDTCxRQUFRLEtBQUssSUFBSTtRQUNqQixPQUFPLFFBQVEsS0FBSyxRQUFRO1FBQzVCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7UUFDeEIsUUFBUSxLQUFLLElBQUk7UUFDakIsT0FBTyxRQUFRLEtBQUssUUFBUTtRQUM1QixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQ3hCO1FBQ0Esb0NBQW9DO1FBRXBDLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBUyxFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RCxNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDMUUsSUFDRSxDQUFDLFVBQVU7WUFDWCxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDM0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLEVBQ0Y7WUFDQSxPQUFPO2dCQUNMLE1BQU0sRUFBRSxzQ0FBc0M7Z0JBQzlDLFFBQVEsRUFBRSxZQUFZO2dCQUN0QixRQUFRLEVBQUUsWUFBWTthQUN2QixDQUFDO1NBQ0g7UUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRTtZQUMzQixNQUFNLFNBQVMsR0FBRyxjQUFjLENBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFDZCxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQ2QsUUFBUSxFQUNSLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsSUFBSSxTQUFTO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1NBQ2pDO1FBQ0QsT0FBTyxLQUFLLENBQUM7S0FDZDtTQUFNO1FBQ0wsNEJBQTRCO1FBQzVCLE9BQU87WUFDTCxNQUFNLEVBQUUsNkRBQTZEO1lBQ3JFLFFBQVEsRUFBRSxPQUFPLFFBQVE7WUFDekIsUUFBUSxFQUFFLE9BQU8sUUFBUTtTQUMxQixDQUFDO0tBQ0g7QUFDSCxDQUFDO0FBaEhELHdDQWdIQyJ9
function isArray(value) {
return (Array.isArray(value) ||
value instanceof Float32Array ||
value instanceof Float64Array);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdXJzaXZlQ2hlY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVjdXJzaXZlQ2hlY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbUNBQTZDO0FBRTdDOzs7Ozs7R0FNRztBQUNILFNBQWdCLGNBQWMsQ0FDNUIsUUFBa0IsRUFDbEIsUUFBa0IsRUFDbEIsU0FBaUIsRUFDakIsTUFBTSxHQUFHLElBQUk7SUFFYixJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDaEUsb0NBQW9DO1FBRXBDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25CLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDcEIsQ0FBQyxDQUFDLEtBQUs7Z0JBQ1AsQ0FBQyxDQUFDO29CQUNFLE1BQU0sRUFBRSxVQUFVO29CQUNsQixRQUFRO29CQUNSLFFBQVE7aUJBQ1QsQ0FBQztTQUNQO2FBQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5QixPQUFPLFFBQVEsS0FBSyxRQUFRO2dCQUMxQixDQUFDLENBQUMsS0FBSztnQkFDUCxDQUFDLENBQUM7b0JBQ0UsTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLFFBQVE7b0JBQ1IsUUFBUTtpQkFDVCxDQUFDO1NBQ1A7YUFBTSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxJQUFJLElBQUEsMEJBQWtCLEVBQUMsU0FBUyxDQUFDLEVBQUU7WUFDekUsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNO1lBQ0wsT0FBTztnQkFDTCxNQUFNLEVBQUUsVUFBVTtnQkFDbEIsUUFBUTtnQkFDUixRQUFRO2dCQUNSLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7YUFDcEMsQ0FBQztTQUNIO0tBQ0Y7U0FBTSxJQUNMLENBQUMsT0FBTyxRQUFRLEtB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
{
"name": "jest-matcher-deep-close-to",
"version": "2.0.1",
"version": "3.0.0",
"description": "Extend jest to assert arrays with approximate values",

@@ -25,6 +25,7 @@ "main": "./lib/index.js",

"eslint-fix": "npm run eslint -- --fix",
"prepublishOnly": "npm run tsc",
"test": "npm run test-coverage && npm run eslint",
"test-coverage": "npm run test-only -- --coverage",
"test-only": "jest",
"prepublishOnly": "npm run tsc & npm run copy-dts",
"copy-dts": "copyfiles -u 1 \"src/**/*.d.ts\" lib",
"tsc": "npm run clean && npm run tsc-cjs && npm run tsc-esm",

@@ -54,20 +55,21 @@ "tsc-cjs": "tsc --project tsconfig.cjs.json",

"dependencies": {
"jest-matcher-utils": "~25.4.0"
"jest-matcher-utils": "~27.2.2"
},
"devDependencies": {
"@types/jest": "~25.2.1",
"@typescript-eslint/eslint-plugin": "~2.30.0",
"@typescript-eslint/parser": "~2.30.0",
"eslint": "~6.8.0",
"eslint-config-cheminfo": "~3.0.0",
"eslint-config-cheminfo-typescript": "~5.0.0",
"eslint-plugin-import": "~2.20.2",
"eslint-plugin-jest": "~23.8.2",
"eslint-plugin-prettier": "~3.1.3",
"jest": "~25.4.0",
"prettier": "~2.0.5",
"@types/jest": "~27.0.2",
"@typescript-eslint/eslint-plugin": "~4.32.0",
"@typescript-eslint/parser": "~4.32.0",
"copyfiles": "^2.4.1",
"eslint": "~7.32.0",
"eslint-config-cheminfo": "~5.5.0",
"eslint-config-cheminfo-typescript": "~8.0.9",
"eslint-plugin-import": "~2.24.2",
"eslint-plugin-jest": "~24.4.2",
"eslint-plugin-prettier": "~4.0.0",
"jest": "~27.2.2",
"prettier": "~2.4.1",
"rimraf": "~3.0.2",
"ts-jest": "~25.4.0",
"typescript": "~3.8.3"
"ts-jest": "~27.0.5",
"typescript": "~4.4.3"
}
}

@@ -11,3 +11,3 @@ # jest-matcher-deep-close-to

`$ npm install --save jest-matcher-deep-close-to`
`$ npm i -D jest-matcher-deep-close-to`

@@ -14,0 +14,0 @@ ## Usage

@@ -1,49 +0,12 @@

import { matcherHint, printExpected, printReceived } from 'jest-matcher-utils';
import { recursiveCheck } from './recursiveCheck';
import type { Iterable, MatcherResult } from './types';
import { printResponse } from './utils';
import { recursiveCheck, Iterable, Error } from './recursiveCheck';
export interface MatcherResult {
message: () => string;
pass: boolean;
}
function printResponse(
error: false | Error,
received: Iterable,
expected: Iterable,
): MatcherResult {
/* istanbul ignore next */
if (error) {
return {
message: () =>
`${matcherHint('.toBeDeepCloseTo')}\n\n` +
`${error.reason}:\n` +
` ${printExpected(error.expected)}\n` +
'Received:\n' +
` ${printReceived(error.received)}`,
pass: false,
};
} else {
return {
message: () =>
`${matcherHint('.not.toBeDeepCloseTo')}\n\n` +
'The two objects are deeply equal:\n' +
` ${printExpected(expected)}\n` +
'Received:\n' +
` ${printReceived(received)}`,
pass: true,
};
}
}
export function toBeDeepCloseTo(
received: Iterable,
expected: Iterable,
decimals?: number,
precision = 2,
): MatcherResult {
if (decimals === undefined) {
decimals = 10;
}
const error = recursiveCheck(received, expected, decimals);
return printResponse(error, received, expected);
const error = recursiveCheck(received, expected, precision);
return printResponse(error, received, expected, precision);
}

@@ -54,9 +17,6 @@

expected: Iterable,
decimals?: number,
precision = 2,
): MatcherResult {
if (decimals === undefined) {
decimals = 10;
}
const error = recursiveCheck(received, expected, decimals, false);
return printResponse(error, received, expected);
const error = recursiveCheck(received, expected, precision, false);
return printResponse(error, received, expected, precision);
}
declare namespace jest {
interface IterableObject {
[k: string]: Iterable;
}
type Iterable =
| number
| Iterable[]
| { [k: string]: Iterable }
| Float32Array
| Float64Array
| IterableObject
| string

@@ -7,0 +12,0 @@ | null

@@ -1,14 +0,3 @@

export type Iterable =
| number
| Iterable[]
| { [k: string]: Iterable }
| string
| null
| undefined
| boolean;
export interface Error {
reason: string;
expected: unknown;
received: unknown;
}
import type { Iterable, Error, IterableObject } from './types';
import { calculatePrecision } from './utils';

@@ -18,3 +7,3 @@ /**

* @param {number|Array} expected
* @param {number} decimals
* @param {number} precision
* @param {boolean} strict equality or subsets allowed

@@ -26,3 +15,3 @@ * @return {boolean|{reason, expected, received}}

expected: Iterable,
decimals: number,
precision: number,
strict = true,

@@ -37,3 +26,3 @@ ): false | Error {

: {
reason: `Expected value to be (using ${decimals} decimals)`,
reason: 'Expected',
expected,

@@ -46,13 +35,14 @@ received,

: {
reason: `Expected value to be`,
reason: 'Expected',
expected,
received,
};
} else if (Math.abs(received - expected) <= Math.pow(10, -decimals)) {
} else if (Math.abs(received - expected) <= calculatePrecision(precision)) {
return false;
} else {
return {
reason: `Expected value to be (using ${decimals} decimals)`,
reason: 'Expected',
expected,
received,
diff: Math.abs(received - expected),
};

@@ -75,17 +65,32 @@ }

}
} else if (Array.isArray(received) && Array.isArray(expected)) {
} else if (isArray(received) && isArray(expected)) {
// Received and expected are arrays
if (received.length !== expected.length) {
const receivedLength = (received as ArrayType).length;
const expectedLength = (expected as ArrayType).length;
if (receivedLength !== expectedLength) {
return {
reason: 'The arrays length does not match',
expected: expected.length,
received: received.length,
expected: expectedLength,
received: receivedLength,
};
}
for (let i = 0; i < received.length; i++) {
const error = recursiveCheck(received[i], expected[i], decimals, strict);
if (error) return error;
for (let i = 0; i < receivedLength; i++) {
const error = recursiveCheck(
(received as ArrayType)[i],
(expected as ArrayType)[i],
precision,
strict,
);
if (error) {
return { ...error, index: i };
}
}
return false;
} else if (expected === undefined && received === undefined) {
/* Received and expected are either
* 1) both explicitly set as undefined
* 2) undefined properties of an object, where the received value may be implicitly undefined
*/
return false;
} else if (expected === null && received === null) {

@@ -111,5 +116,5 @@ // Received and expected are null

!sameLength ||
expectedKeys.some(function (e) {
return !Object.prototype.hasOwnProperty.call(received, e);
})
expectedKeys.some(
(e) => !Object.prototype.hasOwnProperty.call(received, e),
)
) {

@@ -124,8 +129,10 @@ return {

const propError = recursiveCheck(
received[prop],
expected[prop],
decimals,
(received as IterableObject)[prop],
(expected as IterableObject)[prop],
precision,
strict,
);
if (propError) return propError;
if (propError) {
return { ...propError, key: prop };
}
}

@@ -142,1 +149,10 @@ return false;

}
type ArrayType = Float32Array | Float64Array | Array<Iterable>;
function isArray(value: Iterable): boolean {
return (
Array.isArray(value) ||
value instanceof Float32Array ||
value instanceof Float64Array
);
}

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc