Socket
Socket
Sign inDemoInstall

ava

Package Overview
Dependencies
Maintainers
2
Versions
114
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ava - npm Package Compare versions

Comparing version 5.2.0 to 5.3.1

lib/slash.cjs

4

lib/assert.js

@@ -58,3 +58,3 @@ import concordance from 'concordance';

export function checkAssertionMessage(assertion, message) {
if (typeof message === 'undefined' || typeof message === 'string') {
if (message === undefined || typeof message === 'string') {
return true;

@@ -257,3 +257,3 @@ }

if (typeof expectations.code !== 'undefined' && actual.code !== expectations.code) {
if (expectations.code !== undefined && actual.code !== expectations.code) {
throw new AssertionError({

@@ -260,0 +260,0 @@ assertion,

@@ -8,3 +8,2 @@

import ciParallelVars from 'ci-parallel-vars';
import {deleteAsync} from 'del';
import figures from 'figures';

@@ -144,2 +143,3 @@ import yargs from 'yargs';

const {argv} = yargs(hideBin(process.argv))
.scriptName('ava')
.version(pkg.version)

@@ -265,7 +265,19 @@ .parserConfiguration({

const cacheDir = path.join(projectDir, 'node_modules', '.cache', 'ava');
try {
const deletedFilePaths = await deleteAsync('*', {cwd: cacheDir});
let entries;
try {
entries = fs.readdirSync(cacheDir);
} catch (error) {
if (error.code === 'ENOENT') {
entries = [];
} else {
throw error;
}
}
if (deletedFilePaths.length === 0) {
for (const entry of entries) {
fs.rmSync(path.join(cacheDir, entry), {recursive: true, force: true});
}
if (entries.length === 0) {
console.log(`\n${chalk.green(figures.tick)} No cache files to remove`);

@@ -272,0 +284,0 @@ } else {

@@ -0,6 +1,15 @@

const isPrimitive = value => value === null || typeof value !== 'object';
export function isLikeSelector(selector) {
return selector !== null
&& typeof selector === 'object'
&& Reflect.getPrototypeOf(selector) === Object.prototype
&& Reflect.ownKeys(selector).length > 0;
// Require selector to be an array or plain object.
if (
isPrimitive(selector)
|| (!Array.isArray(selector) && Reflect.getPrototypeOf(selector) !== Object.prototype)
) {
return false;
}
// Also require at least one enumerable property.
const descriptors = Object.getOwnPropertyDescriptors(selector);
return Reflect.ownKeys(descriptors).some(key => descriptors[key].enumerable === true);
}

@@ -10,19 +19,21 @@

export function selectComparable(lhs, selector, circular = new Set()) {
if (circular.has(selector)) {
throw CIRCULAR_SELECTOR;
export function selectComparable(actual, selector, circular = [selector]) {
if (isPrimitive(actual)) {
return actual;
}
circular.add(selector);
const comparable = Array.isArray(selector) ? [] : {};
const enumerableKeys = Reflect.ownKeys(selector).filter(key => Reflect.getOwnPropertyDescriptor(selector, key).enumerable);
for (const key of enumerableKeys) {
const subselector = Reflect.get(selector, key);
if (isLikeSelector(subselector)) {
if (circular.includes(subselector)) {
throw CIRCULAR_SELECTOR;
}
if (lhs === null || typeof lhs !== 'object') {
return lhs;
}
const comparable = {};
for (const [key, rhs] of Object.entries(selector)) {
if (isLikeSelector(rhs)) {
comparable[key] = selectComparable(Reflect.get(lhs, key), rhs, circular);
circular.push(subselector);
comparable[key] = selectComparable(Reflect.get(actual, key), subselector, circular);
circular.pop();
} else {
comparable[key] = Reflect.get(lhs, key);
comparable[key] = Reflect.get(actual, key);
}

@@ -29,0 +40,0 @@ }

@@ -13,6 +13,6 @@ import {Buffer} from 'node:buffer';

import mem from 'mem';
import slash from 'slash';
import writeFileAtomic from 'write-file-atomic';
import {snapshotManager as concordanceOptions} from './concordance-options.js';
import slash from './slash.cjs';

@@ -19,0 +19,0 @@ // Increment if encoding layout or Concordance serialization versions change. Previous AVA versions will not be able to

@@ -10,2 +10,18 @@ import concordance from 'concordance';

const hasOwnProperty = (object, prop) => Object.prototype.hasOwnProperty.call(object, prop);
function isExternalAssertError(error) {
if (typeof error !== 'object' || error === null) {
return false;
}
// Match errors thrown by <https://www.npmjs.com/package/expect>.
if (hasOwnProperty(error, 'matcherResult')) {
return true;
}
// Match errors thrown by <https://www.npmjs.com/package/chai> and <https://nodejs.org/api/assert.html>.
return hasOwnProperty(error, 'actual') && hasOwnProperty(error, 'expected');
}
function formatErrorValue(label, error) {

@@ -523,7 +539,15 @@ const formatted = concordance.format(error, concordanceOptions);

if (!result.ok) {
this.saveFirstError(new AssertionError({
message: 'Error thrown in test',
savedError: result.error instanceof Error && result.error,
values: [formatErrorValue('Error thrown in test:', result.error)],
}));
if (isExternalAssertError(result.error)) {
this.saveFirstError(new AssertionError({
message: 'Assertion failed',
savedError: result.error instanceof Error && result.error,
values: [{label: 'Assertion failed: ', formatted: result.error.message}],
}));
} else {
this.saveFirstError(new AssertionError({
message: 'Error thrown in test',
savedError: result.error instanceof Error && result.error,
values: [formatErrorValue('Error thrown in test:', result.error)],
}));
}

@@ -569,7 +593,15 @@ return this.finish();

.catch(error => {
this.saveFirstError(new AssertionError({
message: 'Rejected promise returned by test',
savedError: error instanceof Error && error,
values: [formatErrorValue('Rejected promise returned by test. Reason:', error)],
}));
if (isExternalAssertError(error)) {
this.saveFirstError(new AssertionError({
message: 'Assertion failed',
savedError: error instanceof Error && error,
values: [{label: 'Assertion failed: ', formatted: error.message}],
}));
} else {
this.saveFirstError(new AssertionError({
message: 'Rejected promise returned by test',
savedError: error instanceof Error && error,
values: [formatErrorValue('Rejected promise returned by test. Reason:', error)],
}));
}
})

@@ -576,0 +608,0 @@ .then(() => resolve(this.finish()));

{
"name": "ava",
"version": "5.2.0",
"version": "5.3.1",
"description": "Node.js test runner that lets you develop with confidence.",

@@ -84,3 +84,3 @@ "license": "MIT",

"dependencies": {
"acorn": "^8.8.1",
"acorn": "^8.8.2",
"acorn-walk": "^8.2.0",

@@ -95,3 +95,3 @@ "ansi-styles": "^6.2.1",

"chunkd": "^2.0.1",
"ci-info": "^3.7.1",
"ci-info": "^3.8.0",
"ci-parallel-vars": "^1.0.1",

@@ -105,6 +105,5 @@ "clean-yaml-object": "^0.1.0",

"debug": "^4.3.4",
"del": "^7.0.0",
"emittery": "^1.0.1",
"figures": "^5.0.0",
"globby": "^13.1.3",
"globby": "^13.1.4",
"ignore-by-default": "^2.1.0",

@@ -125,3 +124,2 @@ "indent-string": "^5.0.0",

"resolve-cwd": "^3.0.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.6",

@@ -131,24 +129,25 @@ "strip-ansi": "^7.0.1",

"temp-dir": "^3.0.0",
"write-file-atomic": "^5.0.0",
"yargs": "^17.6.2"
"write-file-atomic": "^5.0.1",
"yargs": "^17.7.2"
},
"devDependencies": {
"@ava/test": "github:avajs/test",
"@ava/typescript": "^3.0.1",
"@ava/typescript": "^4.0.0",
"@sindresorhus/tsconfig": "^3.0.1",
"ansi-escapes": "^6.0.0",
"c8": "^7.12.0",
"ansi-escapes": "^6.2.0",
"c8": "^7.13.0",
"delay": "^5.0.0",
"execa": "^6.1.0",
"fs-extra": "^11.1.0",
"execa": "^7.1.1",
"expect": "^29.5.0",
"fs-extra": "^11.1.1",
"get-stream": "^6.0.1",
"replace-string": "^4.0.0",
"sinon": "^15.0.1",
"tap": "^16.3.3",
"sinon": "^15.1.0",
"tap": "^16.3.4",
"temp-write": "^5.0.0",
"tempy": "^3.0.0",
"touch": "^3.1.0",
"tsd": "^0.25.0",
"typescript": "^4.9.4",
"xo": "^0.53.1",
"tsd": "^0.28.1",
"typescript": "^4.9.5",
"xo": "^0.54.2",
"zen-observable": "^0.10.0"

@@ -165,5 +164,4 @@ },

"volta": {
"node": "18.13.0",
"npm": "9.3.0"
"node": "20.2.0"
}
}

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