diff --git a/.c8rc.json b/.c8rc.json
index 3409cc347..6fcd26a66 100644
--- a/.c8rc.json
+++ b/.c8rc.json
@@ -1,7 +1,7 @@
{
"all": true,
"exclude": [
- "{coverage,examples,media,test,test-d,test-tap,types}/**",
+ "{coverage,examples,media,test,test-types,test-tap,types}/**",
"*.config.cjs",
"*.d.*(c|m)ts"
],
diff --git a/.gitattributes b/.gitattributes
index 92a6c930e..fddf58144 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,3 +1,5 @@
* text=auto eol=lf
*.ai binary
*.psd binary
+*.png binary
+*.snap binary
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 879aa88ab..3f2fa30ee 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -15,7 +15,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- node-version: [^12.22, ^14.17, ^16.4, ^18]
+ node-version: [^14.19, ^16.15, ^18]
os: [ubuntu-latest, windows-latest]
steps:
- uses: actions/checkout@v3
@@ -29,7 +29,7 @@ jobs:
node-version: ${{ matrix.node-version }}
cache: npm
- name: Upgrade npm
- run: npm install --global npm@^8.12
+ run: npm install --global npm@^8.18
- run: npm install --no-audit
- run: npm run cover
- uses: codecov/codecov-action@v2
@@ -42,7 +42,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
- ts-version: [~4.4, ~4.5, ~4.6, ~4.7]
+ ts-version: [~4.7, ~4.8]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
@@ -50,14 +50,13 @@ jobs:
node-version: ^18
cache: npm
- name: Upgrade npm
- run: npm install --global npm@^8.12
+ run: npm install --global npm@^8.18
- run: npm install --no-audit
- run: npm i typescript@${TS_VERSION}
env:
TS_VERSION: ${{ matrix.ts-version }}
- - run: npm ls typescript
- continue-on-error: true
- - run: npx tsd
+ - run: ./node_modules/typescript/bin/tsc --version
+ - run: ./node_modules/typescript/bin/tsc --noEmit
lockfile_churn:
name: Test package-lock for unexpected modifications
@@ -69,7 +68,7 @@ jobs:
node-version: ^18
cache: npm
- name: Upgrade npm
- run: if [[ "$(npm -v)" != "8.12.0" ]]; then npm install --global npm@8.12.0; fi
+ run: if [[ "$(npm -v)" != "8.18.0" ]]; then npm install --global npm@8.18.0; fi
- run: npm install --no-audit
- name: Test package-lock for unexpected modifications
run: |
@@ -90,7 +89,7 @@ jobs:
with:
node-version: ^18
- name: Upgrade npm
- run: npm install --global npm@^8.12
+ run: npm install --global npm@^8.18
- run: npm install --no-package-lock --no-audit
- run: npm run cover
@@ -104,6 +103,6 @@ jobs:
node-version: ^18
cache: npm
- name: Upgrade npm
- run: npm install --global npm@^8.12
+ run: npm install --global npm@^8.18
- run: npm install --no-audit
- run: npx xo
diff --git a/.xo-config.cjs b/.xo-config.cjs
index 74b2df577..01f8786db 100644
--- a/.xo-config.cjs
+++ b/.xo-config.cjs
@@ -36,6 +36,7 @@ module.exports = {
{
files: 'examples/**',
rules: {
+ 'ava/no-ignored-test-files': 'off',
'ava/no-only-test': 'off',
'unicorn/prefer-module': 'off',
},
@@ -49,12 +50,27 @@ module.exports = {
'unicorn/no-empty-file': 'off',
},
},
+ {
+ files: 'test-types/**',
+ rules: {
+ 'ava/assertion-arguments': 'off',
+ 'ava/no-ignored-test-files': 'off',
+ 'ava/no-skip-assert': 'off',
+ 'ava/use-t': 'off',
+ },
+ },
{
// TODO: Update tests.
files: 'test/**',
rules: {
'import/no-anonymous-default-export': 'off',
- 'node/prefer-global/process': 'off',
+ 'n/prefer-global/process': 'off',
+ },
+ },
+ {
+ files: 'test/**/fixtures/**',
+ rules: {
+ 'n/file-extension-in-import': 'off',
},
},
{
@@ -69,7 +85,7 @@ module.exports = {
files: 'test-tap/**',
rules: {
'import/no-anonymous-default-export': 'off',
- 'node/prefer-global/process': 'off',
+ 'n/prefer-global/process': 'off',
'unicorn/error-message': 'off',
},
},
diff --git a/ava.config.js b/ava.config.js
index 6a542a4e9..57992596c 100644
--- a/ava.config.js
+++ b/ava.config.js
@@ -1,6 +1,6 @@
export default { // eslint-disable-line import/no-anonymous-default-export
files: ['test/**', '!test/**/{fixtures,helpers}/**'],
- ignoredByWatcher: ['{coverage,docs,media,test-d,test-tap}/**'],
+ ignoredByWatcher: ['{coverage,docs,media,test-types,test-tap}/**'],
environmentVariables: {
AVA_FAKE_SCM_ROOT: '.fake-root', // This is an internal test flag.
},
diff --git a/docs/02-execution-context.md b/docs/02-execution-context.md
index dc8e312be..65200eed0 100644
--- a/docs/02-execution-context.md
+++ b/docs/02-execution-context.md
@@ -36,7 +36,7 @@ Plan how many assertions there are in the test. The test will fail if the actual
## `t.teardown(fn)`
-Registers the `fn` function to be run after the test has finished. You can register multiple functions. They'll run in reverse order, so the most last registered function is run first. You can use asynchronous functions: only one will run at a time.
+Registers the `fn` function to be run after the test has finished. You can register multiple functions. They'll run in reverse order, so the last registered function is run first. You can use asynchronous functions: only one will run at a time.
You cannot perform assertions using the `t` object or register additional functions from inside `fn`.
diff --git a/docs/06-configuration.md b/docs/06-configuration.md
index fae579aed..dc92f54c7 100644
--- a/docs/06-configuration.md
+++ b/docs/06-configuration.md
@@ -55,7 +55,7 @@ Arguments passed to the CLI will always take precedence over the CLI options con
- `verbose`: if `true`, enables verbose output (though there currently non-verbose output is not supported)
- `snapshotDir`: specifies a fixed location for storing snapshot files. Use this if your snapshots are ending up in the wrong location
- `extensions`: extensions of test files. Setting this overrides the default `["cjs", "mjs", "js"]` value, so make sure to include those extensions in the list. [Experimentally you can configure how files are loaded](#configuring-module-formats)
-- `require`: extra modules to require before tests are run. Modules are required in the [worker processes](./01-writing-tests.md#process-isolation)
+- `require`: extra modules to require before tests are run. Modules are required in the [worker processes](./01-writing-tests.md#test-isolation)
- `timeout`: Timeouts in AVA behave differently than in other test frameworks. AVA resets a timer after each test, forcing tests to quit if no new test results were received within the specified timeout. This can be used to handle stalled tests. See our [timeout documentation](./07-test-timeouts.md) for more options.
- `nodeArguments`: Configure Node.js arguments used to launch worker processes.
- `sortTestFiles`: A comparator function to sort test files with. Available only when using a `ava.config.*` file. See an example use case [here](recipes/splitting-tests-ci.md).
diff --git a/docs/recipes/browser-testing.md b/docs/recipes/browser-testing.md
index 9993b8df7..edad125b6 100644
--- a/docs/recipes/browser-testing.md
+++ b/docs/recipes/browser-testing.md
@@ -1,82 +1,42 @@
# Setting up AVA for browser testing
-Translations: [Español](https://github.com/avajs/ava-docs/blob/main/es_ES/docs/recipes/browser-testing.md), [Français](https://github.com/avajs/ava-docs/blob/main/fr_FR/docs/recipes/browser-testing.md), [Italiano](https://github.com/avajs/ava-docs/blob/main/it_IT/docs/recipes/browser-testing.md), [Русский](https://github.com/avajs/ava-docs/blob/main/ru_RU/docs/recipes/browser-testing.md), [简体中文](https://github.com/avajs/ava-docs/blob/main/zh_CN/docs/recipes/browser-testing.md)
+AVA is running in a __Node.js__ environment. JavaScript that runs in a browser will likely expect the browser DOM globals to be in place.
+With help from a package called [jsdom](https://github.com/jsdom/jsdom),
+you can write unit tests with `ava` also for JavaScript that will run in a browser
+and relying on browser specific globals such as `window`, `document` and `navigator`.
-AVA does not support running tests in browsers [yet](https://github.com/avajs/ava/issues/24). However JavaScript libraries that require browser specific globals (`window`, `document`, `navigator`, etc) can still be tested with AVA by mocking these globals.
+## Install jsdom
-This recipe works for any library that needs a mocked browser environment.
-
-## Install browser-env
-
-> **❗️ Important note**
->
->`browser-env` adds properties from the `jsdom` window namespace to the Node.js global namespace. This is explicitly [recommended against](https://github.com/tmpvar/jsdom/wiki/Don't-stuff-jsdom-globals-onto-the-Node-global) by `jsdom`. Please read through the linked wiki page and make sure you understand the caveats. If you don't have lots of dependencies that also require a browser environment then [`window`](https://github.com/lukechilds/window#universal-testing-pattern) may be a better solution.
-
-Install [browser-env](https://github.com/lukechilds/browser-env).
-
-> Simulates a global browser environment using jsdom.
-
-```
-$ npm install --save-dev browser-env
+```bash
+npm install --save-dev jsdom
```
-## Setup browser-env
-
-Create a helper file, prefixed with an underscore. This ensures AVA does not treat it as a test.
+## Writing unit tests
-`test/_setup-browser-env.js`:
+Use `jsdom` to set the globals and the DOM elements that the test target is expecting.
-```js
-import browserEnv from 'browser-env';
-browserEnv();
-```
-By default, `browser-env` will add all global browser variables to the Node.js global scope, creating a full browser environment. This should have good compatibility with most front-end libraries, however, it's generally not a good idea to create lots of global variables if you don't need to. If you know exactly which browser globals you need, you can pass an array of them.
+### An example Unit Test
+The JavaScript code to be tested is doing a DOM query, such as: `document.querySelector('#my-element-id')`.
-```js
-import browserEnv from 'browser-env';
-browserEnv(['window', 'document', 'navigator']);
-```
-
-You can expose more global variables by assigning them to the `global` object. For instance, jQuery is typically available through the `$` variable:
-
-```js
-import browserEnv from 'browser-env';
-import jQuery from 'jquery';
-
-browserEnv();
-global.$ = jQuery(window);
-```
-
-## Configure tests to use browser-env
-
-Configure AVA to `require` the helper before every test file.
-
-**`package.json`:**
-
-```json
-{
- "ava": {
- "require": [
- "./test/_setup-browser-env.js"
- ]
- }
-}
-```
-
-## Enjoy!
-
-Write your tests and enjoy a mocked browser environment.
-
-`test.js`:
+To make the code testable with `ava`, add the element to `jsdom` and set the global object.
```js
import test from 'ava';
+import { JSDOM } from 'jsdom';
-test('Insert to DOM', t => {
- const div = document.createElement('div');
- document.body.appendChild(div);
+test.before(() => {
+ const dom = new JSDOM('
'); // insert any html needed for the unit test suite here
+ global.document = dom.window.document; // add the globals needed for the unit tests in this suite.
+});
+
+test('this is an example', (t) => {
+ const res = myTarget.runFunctionThatExpectsTheDocumentGlobalAndElement();
- t.is(document.querySelector('div'), div);
+ t.truthy(res);
});
```
+
+## Important note
+In general, adding globals to the `Node.js` environment is [recommended against](https://github.com/jsdom/jsdom/wiki/Don't-stuff-jsdom-globals-onto-the-Node-global) by `jsdom`.
+Please read through the linked wiki page and make sure you understand why.
diff --git a/docs/recipes/typescript.md b/docs/recipes/typescript.md
index 3831d529b..bd2083a66 100644
--- a/docs/recipes/typescript.md
+++ b/docs/recipes/typescript.md
@@ -4,7 +4,7 @@ Translations: [Español](https://github.com/avajs/ava-docs/blob/main/es_ES/docs/
AVA comes bundled with a TypeScript definition file. This allows developers to leverage TypeScript for writing tests.
-This guide assumes you've already set up TypeScript for your project. Note that AVA's definition expects at least version 4.4.
+This guide assumes you've already set up TypeScript for your project. Note that AVA's definition expects at least version 4.7.
## Enabling AVA's support for TypeScript test files
diff --git a/entrypoints/index.d.cts b/entrypoints/index.d.cts
deleted file mode 100644
index 91c40063f..000000000
--- a/entrypoints/index.d.cts
+++ /dev/null
@@ -1,2 +0,0 @@
-export {default} from '../index.js';
-export * from '../index.js';
diff --git a/entrypoints/main.d.cts b/entrypoints/main.d.cts
new file mode 100644
index 000000000..d4fcdc160
--- /dev/null
+++ b/entrypoints/main.d.cts
@@ -0,0 +1,12 @@
+import type {TestFn} from '../types/test-fn.cjs';
+
+export * from '../types/assertions.cjs';
+export * from '../types/try-fn.cjs';
+export * from '../types/test-fn.cjs';
+export * from '../types/subscribable.cjs';
+
+/** Call to declare a test, or chain to declare hooks or test modifiers */
+declare const test: TestFn;
+
+/** Call to declare a test, or chain to declare hooks or test modifiers */
+export default test;
diff --git a/entrypoints/main.d.ts b/entrypoints/main.d.ts
new file mode 100644
index 000000000..d4fcdc160
--- /dev/null
+++ b/entrypoints/main.d.ts
@@ -0,0 +1,12 @@
+import type {TestFn} from '../types/test-fn.cjs';
+
+export * from '../types/assertions.cjs';
+export * from '../types/try-fn.cjs';
+export * from '../types/test-fn.cjs';
+export * from '../types/subscribable.cjs';
+
+/** Call to declare a test, or chain to declare hooks or test modifiers */
+declare const test: TestFn;
+
+/** Call to declare a test, or chain to declare hooks or test modifiers */
+export default test;
diff --git a/entrypoints/plugin.d.cts b/entrypoints/plugin.d.cts
index b66e07dcb..9e5871101 100644
--- a/entrypoints/plugin.d.cts
+++ b/entrypoints/plugin.d.cts
@@ -1 +1,6 @@
-export * from '../plugin.js'
+import type {SharedWorker} from '../types/shared-worker.cjs';
+
+export function registerSharedWorker(options: SharedWorker.Plugin.RegistrationOptions<'ava-4', Data>): SharedWorker.Plugin.Protocol;
+// Add overloads for additional protocols.
+
+export type {SharedWorker} from '../types/shared-worker.cjs';
diff --git a/entrypoints/plugin.d.ts b/entrypoints/plugin.d.ts
new file mode 100644
index 000000000..9e5871101
--- /dev/null
+++ b/entrypoints/plugin.d.ts
@@ -0,0 +1,6 @@
+import type {SharedWorker} from '../types/shared-worker.cjs';
+
+export function registerSharedWorker(options: SharedWorker.Plugin.RegistrationOptions<'ava-4', Data>): SharedWorker.Plugin.Protocol;
+// Add overloads for additional protocols.
+
+export type {SharedWorker} from '../types/shared-worker.cjs';
diff --git a/index.d.ts b/index.d.ts
index 50f1570d7..66c0e85d2 100644
--- a/index.d.ts
+++ b/index.d.ts
@@ -1,12 +1,4 @@
-import type {TestFn} from './types/test-fn.js';
+// For compatibility with resolution algorithms other than Node16.
-export * from './types/assertions.js';
-export * from './types/try-fn.js';
-export * from './types/test-fn.js';
-export * from './types/subscribable.js';
-
-/** Call to declare a test, or chain to declare hooks or test modifiers */
-declare const test: TestFn;
-
-/** Call to declare a test, or chain to declare hooks or test modifiers */
-export default test;
+export * from './entrypoints/main.cjs';
+export {default} from './entrypoints/main.cjs';
diff --git a/lib/api.js b/lib/api.js
index 1ebe27ce5..eaf223650 100644
--- a/lib/api.js
+++ b/lib/api.js
@@ -16,6 +16,7 @@ import fork from './fork.js';
import * as globs from './globs.js';
import isCi from './is-ci.js';
import {getApplicableLineNumbers} from './line-numbers.js';
+import {setCappedTimeout} from './now-and-timers.cjs';
import {observeWorkerProcess} from './plugin-support/shared-workers.js';
import RunStatus from './run-status.js';
import scheduler from './scheduler.js';
@@ -52,7 +53,7 @@ class TimeoutTrigger {
debounce() {
if (this.timer === undefined) {
- this.timer = setTimeout(() => this.trigger(), this.waitMs);
+ this.timer = setCappedTimeout(() => this.trigger(), this.waitMs);
} else {
this.timer.refresh();
}
@@ -246,14 +247,16 @@ export default class Api extends Emittery {
}
}));
- // Resolve the correct concurrency value.
- let concurrency = Math.min(os.cpus().length, isCi ? 2 : Number.POSITIVE_INFINITY);
- if (apiOptions.concurrency > 0) {
- concurrency = apiOptions.concurrency;
- }
-
+ // Resolve the correct concurrency value. Note that `os.cpus()` can return empty arrays on
+ // platforms not officially supported by Node.js. Use 1 as a minimum.
+ // See .
+ let concurrency = Math.max(1, os.cpus().length);
if (apiOptions.serial) {
concurrency = 1;
+ } else if (apiOptions.concurrency > 0) {
+ concurrency = apiOptions.concurrency;
+ } else if (isCi) {
+ concurrency = 2;
}
const deregisteredSharedWorkers = [];
diff --git a/lib/assert.js b/lib/assert.js
index 5d5477071..849b4a1eb 100644
--- a/lib/assert.js
+++ b/lib/assert.js
@@ -8,8 +8,10 @@ import {SnapshotError, VersionMismatchError} from './snapshot-manager.js';
function formatDescriptorDiff(actualDescriptor, expectedDescriptor, options) {
options = {...options, ...concordanceOptions};
+ const {diffGutters} = options.theme;
+ const {insertLine, deleteLine} = options.theme.string.diff;
return {
- label: 'Difference:',
+ label: `Difference (${diffGutters.actual}${deleteLine.open}actual${deleteLine.close}, ${diffGutters.expected}${insertLine.open}expected${insertLine.close}):`,
formatted: concordance.diffDescriptors(actualDescriptor, expectedDescriptor, options),
};
}
diff --git a/lib/cli.js b/lib/cli.js
index a4c89ac09..c2ddcbca6 100644
--- a/lib/cli.js
+++ b/lib/cli.js
@@ -5,10 +5,10 @@ import process from 'node:process';
import arrify from 'arrify';
import ciParallelVars from 'ci-parallel-vars';
-import del from 'del';
+import {deleteAsync} from 'del';
import figures from 'figures';
import yargs from 'yargs';
-import {hideBin} from 'yargs/helpers'; // eslint-disable-line node/file-extension-in-import
+import {hideBin} from 'yargs/helpers'; // eslint-disable-line n/file-extension-in-import
import Api from './api.js';
import {chalk} from './chalk.js';
@@ -124,7 +124,7 @@ export default async function loadCli() { // eslint-disable-line complexity
// run AVA with the debug command, though it's allowed.
let activeInspector = false;
try {
- const {default: inspector} = await import('node:inspector'); // eslint-disable-line node/no-unsupported-features/es-syntax
+ const {default: inspector} = await import('node:inspector');
activeInspector = inspector.url() !== undefined;
} catch {}
@@ -242,11 +242,11 @@ export default async function loadCli() { // eslint-disable-line complexity
const chalkOptions = {level: 0};
if (combined.color !== false) {
- const {supportsColor: {level}} = await import('chalk'); // eslint-disable-line node/no-unsupported-features/es-syntax, unicorn/import-style
+ const {supportsColor: {level}} = await import('chalk'); // eslint-disable-line unicorn/import-style
chalkOptions.level = level;
}
- const {set: setChalk} = await import('./chalk.js'); // eslint-disable-line node/no-unsupported-features/es-syntax
+ const {set: setChalk} = await import('./chalk.js');
setChalk(chalkOptions);
if (confError) {
@@ -262,7 +262,7 @@ export default async function loadCli() { // eslint-disable-line complexity
const cacheDir = path.join(projectDir, 'node_modules', '.cache', 'ava');
try {
- const deletedFilePaths = await del('*', {cwd: cacheDir});
+ const deletedFilePaths = await deleteAsync('*', {cwd: cacheDir});
if (deletedFilePaths.length === 0) {
console.log(`\n${chalk.green(figures.tick)} No cache files to remove`);
diff --git a/lib/code-excerpt.js b/lib/code-excerpt.js
index ca9ab0586..a46d012eb 100644
--- a/lib/code-excerpt.js
+++ b/lib/code-excerpt.js
@@ -43,7 +43,7 @@ export default function exceptCode(source, options = {}) {
const coloredLineNumber = isErrorSource ? lineNumber : chalk.grey(lineNumber);
const result = ` ${coloredLineNumber} ${item.value.padEnd(extendedWidth)}`;
- return isErrorSource ? chalk.bgRed(result) : result;
+ return isErrorSource ? chalk.bgRed.bold(result) : result;
})
.join('\n');
}
diff --git a/lib/concordance-options.js b/lib/concordance-options.js
index 48a367054..3e5fbf4be 100644
--- a/lib/concordance-options.js
+++ b/lib/concordance-options.js
@@ -85,7 +85,7 @@ const colorTheme = {
undefined: ansiStyles.yellow,
};
-const plainTheme = JSON.parse(JSON.stringify(colorTheme), value => typeof value === 'string' ? stripAnsi(value) : value);
+const plainTheme = JSON.parse(JSON.stringify(colorTheme), (_name, value) => typeof value === 'string' ? stripAnsi(value) : value);
const theme = chalk.level > 0 ? colorTheme : plainTheme;
diff --git a/lib/load-config.js b/lib/load-config.js
index e3c70fd70..9ffa2aa6e 100644
--- a/lib/load-config.js
+++ b/lib/load-config.js
@@ -11,7 +11,7 @@ const MISSING_DEFAULT_EXPORT = Symbol('missing default export');
const EXPERIMENTS = new Set();
const importConfig = async ({configFile, fileForErrorMessage}) => {
- const {default: config = MISSING_DEFAULT_EXPORT} = await import(url.pathToFileURL(configFile)); // eslint-disable-line node/no-unsupported-features/es-syntax
+ const {default: config = MISSING_DEFAULT_EXPORT} = await import(url.pathToFileURL(configFile));
if (config === MISSING_DEFAULT_EXPORT) {
throw new Error(`${fileForErrorMessage} must have a default export`);
}
diff --git a/lib/now-and-timers.cjs b/lib/now-and-timers.cjs
index 2576d7ef9..851bf6d4d 100644
--- a/lib/now-and-timers.cjs
+++ b/lib/now-and-timers.cjs
@@ -3,3 +3,14 @@ const timers = require('timers');
Object.assign(exports, timers);
exports.now = Date.now;
+
+// Any delay larger than this value is ignored by Node.js, with a delay of `1`
+// used instead. See .
+const MAX_DELAY = (2 ** 31) - 1;
+
+function setCappedTimeout(callback, delay) {
+ const safeDelay = Math.min(delay, MAX_DELAY);
+ return timers.setTimeout(callback, safeDelay);
+}
+
+exports.setCappedTimeout = setCappedTimeout;
diff --git a/lib/plugin-support/shared-worker-loader.js b/lib/plugin-support/shared-worker-loader.js
index 2813fe69c..8ab57d444 100644
--- a/lib/plugin-support/shared-worker-loader.js
+++ b/lib/plugin-support/shared-worker-loader.js
@@ -156,7 +156,7 @@ function broadcastMessage(data) {
}
async function loadFactory() {
- const {default: factory} = await import(workerData.filename); // eslint-disable-line node/no-unsupported-features/es-syntax
+ const {default: factory} = await import(workerData.filename);
return factory;
}
diff --git a/lib/provider-manager.js b/lib/provider-manager.js
index c3b7c85d8..faf61f78b 100644
--- a/lib/provider-manager.js
+++ b/lib/provider-manager.js
@@ -15,7 +15,7 @@ const levelsByProtocol = {
async function load(providerModule, projectDir) {
const ava = {version: pkg.version};
- const {default: makeProvider} = await import(providerModule); // eslint-disable-line node/no-unsupported-features/es-syntax
+ const {default: makeProvider} = await import(providerModule);
let fatal;
let level;
diff --git a/lib/reporters/default.js b/lib/reporters/default.js
index 8a612deef..6bb14fc94 100644
--- a/lib/reporters/default.js
+++ b/lib/reporters/default.js
@@ -233,6 +233,16 @@ export default class Reporter {
break;
}
+ case 'process-exit': {
+ this.write(colors.error(`${figures.cross} Exiting due to process.exit() when running ${this.relativeFile(event.testFile)}`));
+
+ this.lineWriter.writeLine();
+ this.lineWriter.writeLine(colors.errorStack(event.stack));
+ this.lineWriter.writeLine();
+
+ break;
+ }
+
case 'hook-finished': {
if (event.logs.length > 0) {
this.lineWriter.writeLine(` ${this.prefixTitle(event.testFile, event.title)}`);
@@ -244,9 +254,9 @@ export default class Reporter {
case 'selected-test': {
if (event.skip) {
- this.lineWriter.writeLine(colors.skip(`- ${this.prefixTitle(event.testFile, event.title)}`));
+ this.lineWriter.writeLine(colors.skip(`- [skip] ${this.prefixTitle(event.testFile, event.title)}`));
} else if (event.todo) {
- this.lineWriter.writeLine(colors.todo(`- ${this.prefixTitle(event.testFile, event.title)}`));
+ this.lineWriter.writeLine(colors.todo(`- [todo] ${this.prefixTitle(event.testFile, event.title)}`));
}
break;
@@ -504,15 +514,30 @@ export default class Reporter {
}
writeTestSummary(event) {
+ // Prefix icon indicates matched expectations vs. not.
+ // Prefix color indicates passed-as-expected vs. not (fail or unexpected pass).
+ // This yields four possibilities, which in the standard configuration render as:
+ // * normal test, pass: ✔
+ // * normal test, fail: ✘ [fail]
+ // * fail-expected test, fail: ✔ [expected fail]
+ // * fail-expected test, pass: ✘ [unexpected pass]
+ let prefix;
+ let suffix;
if (event.type === 'hook-failed' || event.type === 'test-failed') {
- this.write(`${colors.error(figures.cross)} ${this.prefixTitle(event.testFile, event.title)} ${colors.error(event.err.message)}`);
+ const type = event.knownFailing ? '[unexpected pass]' : '[fail]';
+ prefix = colors.error(`${figures.cross} ${type}:`);
+ suffix = chalk.italic(colors.error(event.err.message));
} else if (event.knownFailing) {
- this.write(`${colors.error(figures.tick)} ${colors.error(this.prefixTitle(event.testFile, event.title))}`);
+ prefix = colors.error(figures.tick + ' [expected fail]');
} else {
- const duration = event.duration > this.durationThreshold ? colors.duration(' (' + prettyMs(event.duration) + ')') : '';
- this.write(`${colors.pass(figures.tick)} ${this.prefixTitle(event.testFile, event.title)}${duration}`);
+ prefix = colors.pass(figures.tick);
+ if (event.duration > this.durationThreshold) {
+ suffix = colors.duration(`(${prettyMs(event.duration)})`);
+ }
}
+ const label = this.prefixTitle(event.testFile, event.title);
+ this.write(`${prefix} ${label}${suffix ? ' ' + suffix : ''}`);
this.writeLogs(event);
}
@@ -658,8 +683,8 @@ export default class Reporter {
this.lineWriter.writeLine(colors.error(`${this.stats.uncaughtExceptions} uncaught ${plur('exception', this.stats.uncaughtExceptions)}`));
}
- if (this.stats.timeouts > 0) {
- this.lineWriter.writeLine(colors.error(`${this.stats.timeouts} ${plur('test', this.stats.timeouts)} remained pending after a timeout`));
+ if (this.stats.timedOutTests > 0) {
+ this.lineWriter.writeLine(colors.error(`${this.stats.timedOutTests} ${plur('test', this.stats.timedOutTests)} remained pending after a timeout`));
}
if (this.previousFailures > 0) {
diff --git a/lib/reporters/tap.js b/lib/reporters/tap.js
index 51a55cdb6..5efc98ad5 100644
--- a/lib/reporters/tap.js
+++ b/lib/reporters/tap.js
@@ -29,7 +29,7 @@ function dumpError(error) {
}
if (error.values.length > 0) {
- object.values = Object.fromEntries(error.values.map(({label, formatted}) => [label, stripAnsi(formatted)]));
+ object.values = Object.fromEntries(error.values.map(({label, formatted}) => [stripAnsi(label), stripAnsi(formatted)]));
}
}
@@ -128,6 +128,17 @@ export default class TapReporter {
}
}
+ writeProcessExit(evt) {
+ const error = new Error(`Exiting due to process.exit() when running ${this.relativeFile(evt.testFile)}`);
+ error.stack = evt.stack;
+
+ for (const [testFile, tests] of evt.pendingTests) {
+ for (const title of tests) {
+ this.writeTest({testFile, title, err: error}, {passed: false, todo: false, skip: false});
+ }
+ }
+ }
+
writeTimeout(evt) {
const error = new Error(`Exited because no new tests completed within the last ${evt.period}ms of inactivity`);
@@ -158,6 +169,9 @@ export default class TapReporter {
this.filesWithMissingAvaImports.add(evt.testFile);
this.writeCrash(evt, `No tests found in ${this.relativeFile(evt.testFile)}, make sure to import "ava" at the top of your test file`);
break;
+ case 'process-exit':
+ this.writeProcessExit(evt);
+ break;
case 'selected-test':
if (evt.skip) {
this.writeTest(evt, {passed: true, todo: false, skip: true});
diff --git a/lib/run-status.js b/lib/run-status.js
index 7d6b26c01..ea1149fa4 100644
--- a/lib/run-status.js
+++ b/lib/run-status.js
@@ -33,6 +33,7 @@ export default class RunStatus extends Emittery {
selectedTests: 0,
sharedWorkerErrors: 0,
skippedTests: 0,
+ timedOutTests: 0,
timeouts: 0,
todoTests: 0,
uncaughtExceptions: 0,
@@ -62,6 +63,7 @@ export default class RunStatus extends Emittery {
worker.onStateChange(data => this.emitStateChange(data));
}
+ // eslint-disable-next-line complexity
emitStateChange(event) {
const {stats} = this;
const fileStats = stats.byFile.get(event.testFile);
@@ -123,10 +125,11 @@ export default class RunStatus extends Emittery {
this.removePendingTest(event);
break;
case 'timeout':
+ stats.timeouts++;
event.pendingTests = this.pendingTests;
this.pendingTests = new Map();
for (const testsInFile of event.pendingTests.values()) {
- stats.timeouts += testsInFile.size;
+ stats.timedOutTests += testsInFile.size;
}
break;
@@ -134,6 +137,10 @@ export default class RunStatus extends Emittery {
event.pendingTests = this.pendingTests;
this.pendingTests = new Map();
break;
+ case 'process-exit':
+ event.pendingTests = this.pendingTests;
+ this.pendingTests = new Map();
+ break;
case 'uncaught-exception':
stats.uncaughtExceptions++;
fileStats.uncaughtExceptions++;
@@ -175,6 +182,7 @@ export default class RunStatus extends Emittery {
|| this.stats.failedHooks > 0
|| this.stats.failedTests > 0
|| this.stats.failedWorkers > 0
+ || this.stats.remainingTests > 0
|| this.stats.sharedWorkerErrors > 0
|| this.stats.timeouts > 0
|| this.stats.uncaughtExceptions > 0
diff --git a/lib/test.js b/lib/test.js
index d2bb93e2e..d6a39444a 100644
--- a/lib/test.js
+++ b/lib/test.js
@@ -405,7 +405,7 @@ export default class Test {
this.clearTimeout();
this.timeoutMs = ms;
- this.timeoutTimer = nowAndTimers.setTimeout(() => {
+ this.timeoutTimer = nowAndTimers.setCappedTimeout(() => {
this.saveFirstError(new Error(message || 'Test timeout exceeded'));
if (this.finishDueToTimeout) {
diff --git a/lib/watcher.js b/lib/watcher.js
index 58d59e245..00784e315 100644
--- a/lib/watcher.js
+++ b/lib/watcher.js
@@ -294,6 +294,7 @@ export default class Watcher {
switch (evt.type) {
case 'hook-failed':
case 'internal-error':
+ case 'process-exit':
case 'test-failed':
case 'uncaught-exception':
case 'unhandled-rejection':
diff --git a/lib/worker/base.js b/lib/worker/base.js
index e62e30eb4..bf4302e2e 100644
--- a/lib/worker/base.js
+++ b/lib/worker/base.js
@@ -19,6 +19,41 @@ import {flags, refs, sharedWorkerTeardowns} from './state.cjs';
import {isRunningInThread, isRunningInChildProcess} from './utils.cjs';
const currentlyUnhandled = setUpCurrentlyUnhandled();
+let runner;
+
+// Override process.exit with an undetectable replacement
+// to report when it is called from a test (which it should never be).
+const {apply} = Reflect;
+const realExit = process.exit;
+
+async function exit(code, forceSync = false) {
+ dependencyTracking.flush();
+ const flushing = channel.flush();
+ if (!forceSync) {
+ await flushing;
+ }
+
+ apply(realExit, process, [code]);
+}
+
+const handleProcessExit = (fn, receiver, args) => {
+ const error = new Error('Unexpected process.exit()');
+ Error.captureStackTrace(error, handleProcessExit);
+ const {stack} = serializeError('', true, error);
+ channel.send({type: 'process-exit', stack});
+
+ // Make sure to extract the code only from `args` rather than e.g. `Array.prototype`.
+ // This level of paranoia is usually unwarranted, but we're dealing with test code
+ // that has already colored outside the lines.
+ const code = args.length > 0 ? args[0] : undefined;
+
+ // Force a synchronous exit as guaranteed by the real process.exit().
+ exit(code, true);
+};
+
+process.exit = new Proxy(realExit, {
+ apply: handleProcessExit,
+});
const run = async options => {
setOptions(options);
@@ -29,16 +64,6 @@ const run = async options => {
global.console = Object.assign(global.console, new console.Console({stdout, stderr, colorMode: true}));
}
- async function exit(code) {
- if (!process.exitCode) {
- process.exitCode = code;
- }
-
- dependencyTracking.flush();
- await channel.flush();
- process.exit(); // eslint-disable-line unicorn/no-process-exit
- }
-
let checkSelectedByLineNumbers;
try {
checkSelectedByLineNumbers = lineNumberSelection({
@@ -50,7 +75,7 @@ const run = async options => {
checkSelectedByLineNumbers = () => false;
}
- const runner = new Runner({
+ runner = new Runner({
checkSelectedByLineNumbers,
experiments: options.experiments,
failFast: options.failFast,
@@ -141,7 +166,7 @@ const run = async options => {
for (const extension of extensionsToLoadAsModules) {
if (ref.endsWith(`.${extension}`)) {
- return import(pathToFileURL(ref)); // eslint-disable-line node/no-unsupported-features/es-syntax
+ return import(pathToFileURL(ref));
}
}
@@ -161,7 +186,7 @@ const run = async options => {
if (options.debug && options.debug.port !== undefined && options.debug.host !== undefined) {
// If an inspector was active when the main process started, and is
// already active for the worker process, do not open a new one.
- const {default: inspector} = await import('node:inspector'); // eslint-disable-line node/no-unsupported-features/es-syntax
+ const {default: inspector} = await import('node:inspector');
if (!options.debug.active || inspector.url() === undefined) {
inspector.open(options.debug.port, options.debug.host, true);
}
diff --git a/lib/worker/channel.cjs b/lib/worker/channel.cjs
index 7eed7960a..6444f752b 100644
--- a/lib/worker/channel.cjs
+++ b/lib/worker/channel.cjs
@@ -15,7 +15,7 @@ let pEvent = async (emitter, event, options) => {
emitter.on(event, addToBuffer);
try {
- ({pEvent} = await import('p-event')); // eslint-disable-line node/no-unsupported-features/es-syntax
+ ({pEvent} = await import('p-event'));
} finally {
emitter.off(event, addToBuffer);
}
diff --git a/lib/worker/line-numbers.js b/lib/worker/line-numbers.js
index 4e8013def..bf3280311 100644
--- a/lib/worker/line-numbers.js
+++ b/lib/worker/line-numbers.js
@@ -12,7 +12,7 @@ function parse(file) {
const walk = require('acorn-walk');
const ast = acorn.parse(fs.readFileSync(file, 'utf8'), {
- ecmaVersion: 11,
+ ecmaVersion: 'latest',
locations: true,
sourceType: 'module',
});
diff --git a/package-lock.json b/package-lock.json
index 08ecdc3ed..7c249fd4c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,17 +1,17 @@
{
"name": "ava",
- "version": "4.3.3",
+ "version": "5.0.1",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "ava",
- "version": "4.3.3",
+ "version": "5.0.1",
"license": "MIT",
"dependencies": {
- "acorn": "^8.7.1",
+ "acorn": "^8.8.0",
"acorn-walk": "^8.2.0",
- "ansi-styles": "^6.1.0",
+ "ansi-styles": "^6.1.1",
"arrgv": "^1.0.2",
"arrify": "^3.0.0",
"callsites": "^4.0.0",
@@ -19,7 +19,7 @@
"chalk": "^5.0.1",
"chokidar": "^3.5.3",
"chunkd": "^2.0.1",
- "ci-info": "^3.3.1",
+ "ci-info": "^3.4.0",
"ci-parallel-vars": "^1.0.1",
"clean-yaml-object": "^0.1.0",
"cli-truncate": "^3.1.0",
@@ -28,10 +28,10 @@
"concordance": "^5.0.4",
"currently-unhandled": "^0.4.1",
"debug": "^4.3.4",
- "del": "^6.1.1",
- "emittery": "^0.11.0",
- "figures": "^4.0.1",
- "globby": "^13.1.1",
+ "del": "^7.0.0",
+ "emittery": "^1.0.0",
+ "figures": "^5.0.0",
+ "globby": "^13.1.2",
"ignore-by-default": "^2.1.0",
"indent-string": "^5.0.0",
"is-error": "^2.2.2",
@@ -41,18 +41,18 @@
"mem": "^9.0.2",
"ms": "^2.1.3",
"p-event": "^5.0.1",
- "p-map": "^5.4.0",
+ "p-map": "^5.5.0",
"picomatch": "^2.3.1",
"pkg-conf": "^4.0.0",
"plur": "^5.1.0",
- "pretty-ms": "^7.0.1",
+ "pretty-ms": "^8.0.0",
"resolve-cwd": "^3.0.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.5",
"strip-ansi": "^7.0.1",
"supertap": "^3.0.1",
"temp-dir": "^2.0.0",
- "write-file-atomic": "^4.0.1",
+ "write-file-atomic": "^4.0.2",
"yargs": "^17.5.1"
},
"bin": {
@@ -61,26 +61,27 @@
"devDependencies": {
"@ava/test": "github:avajs/test",
"@ava/typescript": "^3.0.1",
+ "@sindresorhus/tsconfig": "^3.0.1",
"@sinonjs/fake-timers": "^9.1.2",
- "ansi-escapes": "^5.0.0",
- "c8": "^7.11.3",
+ "ansi-escapes": "^6.0.0",
+ "c8": "^7.12.0",
"delay": "^5.0.0",
"execa": "^6.1.0",
"fs-extra": "^10.1.0",
"get-stream": "^6.0.1",
"replace-string": "^4.0.0",
- "sinon": "^13.0.2",
- "tap": "^16.2.0",
+ "sinon": "^14.0.0",
+ "tap": "^16.3.0",
"temp-write": "^5.0.0",
- "tempy": "^2.0.0",
+ "tempy": "^3.0.0",
"touch": "^3.1.0",
- "tsd": "^0.20.0",
- "typescript": "^4.7.2",
- "xo": "^0.49.0",
+ "tsd": "^0.24.1",
+ "typescript": "^4.8.3",
+ "xo": "^0.52.3",
"zen-observable": "^0.8.15"
},
"engines": {
- "node": ">=12.22 <13 || >=14.17 <15 || >=16.4 <17 || >=18"
+ "node": ">=14.19 <15 || >=16.15 <17 || >=18"
},
"peerDependencies": {
"@ava/typescript": "*"
@@ -106,11 +107,11 @@
},
"node_modules/@ava/test": {
"version": "0.0.0",
- "resolved": "git+ssh://git@github.com/avajs/test.git#103d53dec79afef3a0da913abdfdcfdad071a5f1",
+ "resolved": "git+ssh://git@github.com/avajs/test.git#77d7e1f5a51c02c9536648b274e3c30a0ad7dded",
"dev": true,
"license": "MIT",
"dependencies": {
- "@ava/v4": "npm:ava@4.3.2"
+ "@ava/v4": "npm:ava@4.3.3"
},
"bin": {
"test-ava": "cli.js"
@@ -220,9 +221,9 @@
},
"node_modules/@ava/v4": {
"name": "ava",
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ava/-/ava-4.3.2.tgz",
- "integrity": "sha512-JdS6Dtt08WNHeWbhVSHwJ2qovRZ5pTG9gAt86GVOCXzhy/LmfJBwIyuitn2FBcroMH4yiCjylTD2GI0jHQxKFg==",
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/ava/-/ava-4.3.3.tgz",
+ "integrity": "sha512-9Egq/d9R74ExrWohHeqUlexjDbgZJX5jA1Wq4KCTqc3wIfpGEK79zVy4rBtofJ9YKIxs4PzhJ8BgbW5PlAYe6w==",
"dev": true,
"dependencies": {
"acorn": "^8.7.1",
@@ -286,43 +287,201 @@
}
}
},
+ "node_modules/@ava/v4/node_modules/aggregate-error": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
+ "dev": true,
+ "dependencies": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@ava/v4/node_modules/aggregate-error/node_modules/indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@ava/v4/node_modules/clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@ava/v4/node_modules/del": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
+ "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
+ "dev": true,
+ "dependencies": {
+ "globby": "^11.0.1",
+ "graceful-fs": "^4.2.4",
+ "is-glob": "^4.0.1",
+ "is-path-cwd": "^2.2.0",
+ "is-path-inside": "^3.0.2",
+ "p-map": "^4.0.0",
+ "rimraf": "^3.0.2",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@ava/v4/node_modules/del/node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@ava/v4/node_modules/del/node_modules/p-map": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
+ "dev": true,
+ "dependencies": {
+ "aggregate-error": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@ava/v4/node_modules/emittery": {
+ "version": "0.11.0",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.11.0.tgz",
+ "integrity": "sha512-S/7tzL6v5i+4iJd627Nhv9cLFIo5weAIlGccqJFpnBoDB8U1TF2k5tez4J/QNuxyyhWuFqHg1L84Kd3m7iXg6g==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sindresorhus/emittery?sponsor=1"
+ }
+ },
+ "node_modules/@ava/v4/node_modules/figures": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-4.0.1.tgz",
+ "integrity": "sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w==",
+ "dev": true,
+ "dependencies": {
+ "escape-string-regexp": "^5.0.0",
+ "is-unicode-supported": "^1.2.0"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/@ava/v4/node_modules/is-path-cwd": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
+ "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@ava/v4/node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/@ava/v4/node_modules/parse-ms": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz",
+ "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@ava/v4/node_modules/pretty-ms": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz",
+ "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==",
+ "dev": true,
+ "dependencies": {
+ "parse-ms": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/@babel/code-frame": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
- "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
+ "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.16.7"
+ "@babel/highlight": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/compat-data": {
- "version": "7.17.10",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz",
- "integrity": "sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw==",
+ "version": "7.18.13",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.13.tgz",
+ "integrity": "sha512-5yUzC5LqyTFp2HLmDoxGQelcdYgSpP9xsnMWBphAscOdFrHSAVbLNzWiy32sVNDqJRDiJK6klfDnAgu6PAGSHw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/core": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz",
- "integrity": "sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ==",
+ "version": "7.18.13",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.13.tgz",
+ "integrity": "sha512-ZisbOvRRusFktksHSG6pjj1CSvkPkcZq/KHD45LAkVP/oiHJkNBZWfpvlLmX8OtHDG8IuzsFlVRWo08w7Qxn0A==",
"dev": true,
"dependencies": {
"@ampproject/remapping": "^2.1.0",
- "@babel/code-frame": "^7.16.7",
- "@babel/generator": "^7.18.2",
- "@babel/helper-compilation-targets": "^7.18.2",
- "@babel/helper-module-transforms": "^7.18.0",
- "@babel/helpers": "^7.18.2",
- "@babel/parser": "^7.18.0",
- "@babel/template": "^7.16.7",
- "@babel/traverse": "^7.18.2",
- "@babel/types": "^7.18.2",
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.13",
+ "@babel/helper-compilation-targets": "^7.18.9",
+ "@babel/helper-module-transforms": "^7.18.9",
+ "@babel/helpers": "^7.18.9",
+ "@babel/parser": "^7.18.13",
+ "@babel/template": "^7.18.10",
+ "@babel/traverse": "^7.18.13",
+ "@babel/types": "^7.18.13",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.2",
@@ -347,13 +506,13 @@
}
},
"node_modules/@babel/generator": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz",
- "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==",
+ "version": "7.18.13",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.13.tgz",
+ "integrity": "sha512-CkPg8ySSPuHTYPJYo7IRALdqyjM9HCbt/3uOBEFbzyGVP6Mn8bwFPB0jX6982JVNBlYzM1nnPkfjuXSOPtQeEQ==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.2",
- "@jridgewell/gen-mapping": "^0.3.0",
+ "@babel/types": "^7.18.13",
+ "@jridgewell/gen-mapping": "^0.3.2",
"jsesc": "^2.5.1"
},
"engines": {
@@ -361,12 +520,12 @@
}
},
"node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz",
- "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==",
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"dependencies": {
- "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
@@ -375,13 +534,13 @@
}
},
"node_modules/@babel/helper-compilation-targets": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz",
- "integrity": "sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz",
+ "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==",
"dev": true,
"dependencies": {
- "@babel/compat-data": "^7.17.10",
- "@babel/helper-validator-option": "^7.16.7",
+ "@babel/compat-data": "^7.18.8",
+ "@babel/helper-validator-option": "^7.18.6",
"browserslist": "^4.20.2",
"semver": "^6.3.0"
},
@@ -402,133 +561,142 @@
}
},
"node_modules/@babel/helper-environment-visitor": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz",
- "integrity": "sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz",
+ "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-function-name": {
- "version": "7.17.9",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
- "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz",
+ "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.16.7",
- "@babel/types": "^7.17.0"
+ "@babel/template": "^7.18.6",
+ "@babel/types": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-hoist-variables": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
- "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz",
+ "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-imports": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
- "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz",
+ "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-module-transforms": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz",
- "integrity": "sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz",
+ "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==",
"dev": true,
"dependencies": {
- "@babel/helper-environment-visitor": "^7.16.7",
- "@babel/helper-module-imports": "^7.16.7",
- "@babel/helper-simple-access": "^7.17.7",
- "@babel/helper-split-export-declaration": "^7.16.7",
- "@babel/helper-validator-identifier": "^7.16.7",
- "@babel/template": "^7.16.7",
- "@babel/traverse": "^7.18.0",
- "@babel/types": "^7.18.0"
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-module-imports": "^7.18.6",
+ "@babel/helper-simple-access": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/helper-validator-identifier": "^7.18.6",
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-simple-access": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz",
- "integrity": "sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz",
+ "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.18.2"
+ "@babel/types": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-split-export-declaration": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
- "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz",
+ "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==",
"dev": true,
"dependencies": {
- "@babel/types": "^7.16.7"
+ "@babel/types": "^7.18.6"
},
"engines": {
"node": ">=6.9.0"
}
},
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.18.10",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz",
+ "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
- "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz",
+ "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-option": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz",
- "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz",
+ "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==",
"dev": true,
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helpers": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz",
- "integrity": "sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg==",
+ "version": "7.18.9",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz",
+ "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==",
"dev": true,
"dependencies": {
- "@babel/template": "^7.16.7",
- "@babel/traverse": "^7.18.2",
- "@babel/types": "^7.18.2"
+ "@babel/template": "^7.18.6",
+ "@babel/traverse": "^7.18.9",
+ "@babel/types": "^7.18.9"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/highlight": {
- "version": "7.17.12",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz",
- "integrity": "sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==",
+ "version": "7.18.6",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz",
+ "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.16.7",
+ "@babel/helper-validator-identifier": "^7.18.6",
"chalk": "^2.0.0",
"js-tokens": "^4.0.0"
},
@@ -593,9 +761,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.18.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz",
- "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==",
+ "version": "7.18.13",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.13.tgz",
+ "integrity": "sha512-dgXcIfMuQ0kgzLB2b9tRZs7TTFFaGM2AbtA4fJgUUYukzGH4jwsS7hzQHEGs67jdehpm22vkgKwvbU+aEflgwg==",
"dev": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -605,33 +773,33 @@
}
},
"node_modules/@babel/template": {
- "version": "7.16.7",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
- "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
+ "version": "7.18.10",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
+ "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
"dev": true,
"dependencies": {
- "@babel/code-frame": "^7.16.7",
- "@babel/parser": "^7.16.7",
- "@babel/types": "^7.16.7"
+ "@babel/code-frame": "^7.18.6",
+ "@babel/parser": "^7.18.10",
+ "@babel/types": "^7.18.10"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/traverse": {
- "version": "7.18.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz",
- "integrity": "sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.16.7",
- "@babel/generator": "^7.18.2",
- "@babel/helper-environment-visitor": "^7.18.2",
- "@babel/helper-function-name": "^7.17.9",
- "@babel/helper-hoist-variables": "^7.16.7",
- "@babel/helper-split-export-declaration": "^7.16.7",
- "@babel/parser": "^7.18.0",
- "@babel/types": "^7.18.2",
+ "version": "7.18.13",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.13.tgz",
+ "integrity": "sha512-N6kt9X1jRMLPxxxPYWi7tgvJRH/rtoU+dbKAPDM44RFHiMH8igdsaSBgFeskhSl/kLWLDUvIh1RXCrTmg0/zvA==",
+ "dev": true,
+ "dependencies": {
+ "@babel/code-frame": "^7.18.6",
+ "@babel/generator": "^7.18.13",
+ "@babel/helper-environment-visitor": "^7.18.9",
+ "@babel/helper-function-name": "^7.18.9",
+ "@babel/helper-hoist-variables": "^7.18.6",
+ "@babel/helper-split-export-declaration": "^7.18.6",
+ "@babel/parser": "^7.18.13",
+ "@babel/types": "^7.18.13",
"debug": "^4.1.0",
"globals": "^11.1.0"
},
@@ -640,12 +808,13 @@
}
},
"node_modules/@babel/types": {
- "version": "7.18.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz",
- "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==",
+ "version": "7.18.13",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.13.tgz",
+ "integrity": "sha512-ePqfTihzW0W6XAU+aMw2ykilisStJfDnsejDCXRchCcMJ4O0+8DhPXf2YUbZ6wjBlsEmZwLK/sPweWtu8hcJYQ==",
"dev": true,
"dependencies": {
- "@babel/helper-validator-identifier": "^7.16.7",
+ "@babel/helper-string-parser": "^7.18.10",
+ "@babel/helper-validator-identifier": "^7.18.6",
"to-fast-properties": "^2.0.0"
},
"engines": {
@@ -685,9 +854,9 @@
"dev": true
},
"node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "13.15.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz",
- "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==",
+ "version": "13.17.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+ "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -724,9 +893,9 @@
}
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.9.5",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
- "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==",
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.4.tgz",
+ "integrity": "sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==",
"dev": true,
"dependencies": {
"@humanwhocodes/object-schema": "^1.2.1",
@@ -737,6 +906,16 @@
"node": ">=10.10.0"
}
},
+ "node_modules/@humanwhocodes/gitignore-to-minimatch": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/gitignore-to-minimatch/-/gitignore-to-minimatch-1.0.2.tgz",
+ "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==",
+ "dev": true,
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/nzakas"
+ }
+ },
"node_modules/@humanwhocodes/object-schema": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
@@ -834,18 +1013,18 @@
}
},
"node_modules/@jridgewell/resolve-uri": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz",
- "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
"dev": true,
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz",
- "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
"dev": true,
"engines": {
"node": ">=6.0.0"
@@ -863,13 +1042,13 @@
}
},
"node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz",
- "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==",
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz",
+ "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==",
"dev": true,
"peer": true,
"dependencies": {
- "@jridgewell/set-array": "^1.0.0",
+ "@jridgewell/set-array": "^1.0.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.9"
},
@@ -878,15 +1057,15 @@
}
},
"node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.13",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz",
- "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==",
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
"dev": true
},
"node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.13",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz",
- "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==",
+ "version": "0.3.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz",
+ "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==",
"dev": true,
"dependencies": {
"@jridgewell/resolve-uri": "^3.0.3",
@@ -925,6 +1104,15 @@
"node": ">= 8"
}
},
+ "node_modules/@sindresorhus/tsconfig": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/tsconfig/-/tsconfig-3.0.1.tgz",
+ "integrity": "sha512-0/gtPNTY3++0J2BZM5nHHULg0BIMw886gqdn8vWN+Av6bgF5ZU2qIcHubAn+Z9KNvJhO8WFE+9kDOU3n6OcKtA==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/@sinonjs/commons": {
"version": "1.8.3",
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz",
@@ -955,20 +1143,16 @@
}
},
"node_modules/@sinonjs/text-encoding": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz",
- "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==",
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.2.tgz",
+ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==",
"dev": true
},
"node_modules/@tsd/typescript": {
- "version": "4.6.4",
- "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-4.6.4.tgz",
- "integrity": "sha512-+9o716aWbcjKLbV4bCrGlJKJbS0UZNogfVk9U7ffooYSf/9GOJ6wwahTSrRjW7mWQdywQ/sIg9xxbuPLnkmhwg==",
- "dev": true,
- "bin": {
- "tsc": "typescript/bin/tsc",
- "tsserver": "typescript/bin/tsserver"
- }
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-4.8.3.tgz",
+ "integrity": "sha512-ytRZWmXF0i4VFSG8NQ67NUDQ3NGe3E4oByFrxH8eJyW5uBOM5juIdXCg81OY/IcK81qHCzrvGEo8tujlIQbexw==",
+ "dev": true
},
"node_modules/@types/eslint": {
"version": "7.29.0",
@@ -981,9 +1165,9 @@
}
},
"node_modules/@types/eslint-scope": {
- "version": "3.7.3",
- "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.3.tgz",
- "integrity": "sha512-PB3ldyrcnAicT35TWPs5IcwKD8S333HMaa2VVv4+wdvebJkjWuW/xESoB8IwRcog8HYVYamb1g/R31Qv5Bx03g==",
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
+ "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
"dev": true,
"peer": true,
"dependencies": {
@@ -992,9 +1176,9 @@
}
},
"node_modules/@types/estree": {
- "version": "0.0.51",
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
- "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz",
+ "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==",
"dev": true
},
"node_modules/@types/istanbul-lib-coverage": {
@@ -1022,9 +1206,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "17.0.38",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.38.tgz",
- "integrity": "sha512-5jY9RhV7c0Z4Jy09G+NIDTsCZ5G0L5n+Z+p+Y7t5VJHM30bgwzSjVtlcBxqAj+6L/swIlvtOSzr8rBk/aNyV2g==",
+ "version": "18.7.13",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz",
+ "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==",
"dev": true,
"peer": true
},
@@ -1222,9 +1406,9 @@
"dev": true
},
"node_modules/acorn": {
- "version": "8.7.1",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz",
- "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==",
+ "version": "8.8.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz",
+ "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==",
"bin": {
"acorn": "bin/acorn"
},
@@ -1301,15 +1485,27 @@
}
},
"node_modules/ansi-escapes": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz",
- "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.0.0.tgz",
+ "integrity": "sha512-IG23inYII3dWlU2EyiAiGj6Bwal5GzsgPMwjYGvc1HPE2dgbj4ZB5ToWBKSquKw74nB3TIuOwaI6/jSULzfgrw==",
"dev": true,
"dependencies": {
- "type-fest": "^1.0.2"
+ "type-fest": "^3.0.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=14.16"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/ansi-escapes/node_modules/type-fest": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.0.0.tgz",
+ "integrity": "sha512-MINvUN5ug9u+0hJDzSZNSnuKXI8M4F5Yvb6SQZ2CYqe7SgKXKOosEcU5R7tRgo85I6eAVBbkVF7TCvB4AUK2xQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=14.16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -1327,9 +1523,9 @@
}
},
"node_modules/ansi-styles": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz",
- "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.1.tgz",
+ "integrity": "sha512-qDOv24WjnYuL+wbwHdlsYZFy+cgPtrYw0Tn7GLORicQp9BkQLzrgI3Pm4VyR9ERZ41YTn7KlMPuL1n05WdZvmg==",
"engines": {
"node": ">=12"
},
@@ -1408,6 +1604,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/array.prototype.flat": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz",
@@ -1502,9 +1707,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.20.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz",
- "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==",
+ "version": "4.21.3",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz",
+ "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==",
"dev": true,
"funding": [
{
@@ -1517,11 +1722,10 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001332",
- "electron-to-chromium": "^1.4.118",
- "escalade": "^3.1.1",
- "node-releases": "^2.0.3",
- "picocolors": "^1.0.0"
+ "caniuse-lite": "^1.0.30001370",
+ "electron-to-chromium": "^1.4.202",
+ "node-releases": "^2.0.6",
+ "update-browserslist-db": "^1.0.5"
},
"bin": {
"browserslist": "cli.js"
@@ -1549,18 +1753,18 @@
}
},
"node_modules/builtins": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.1.0.tgz",
- "integrity": "sha512-1bPRZQtmKaO6h7qV1YHXNtr6nCK28k0Zo95KM4dXfILcZZwoHJBN1m3lfLv9LPkcOZlrSr+J1bzMaZFO98Yq0w==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz",
+ "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==",
"dev": true,
"dependencies": {
"semver": "^7.0.0"
}
},
"node_modules/c8": {
- "version": "7.11.3",
- "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.3.tgz",
- "integrity": "sha512-6YBmsaNmqRm9OS3ZbIiL2EZgi1+Xc4O24jL3vMYGE6idixYuGdy76rIfIdltSKDj9DpLNrcXSonUTR1miBD0wA==",
+ "version": "7.12.0",
+ "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz",
+ "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==",
"dev": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
@@ -1729,9 +1933,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001346",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001346.tgz",
- "integrity": "sha512-q6ibZUO2t88QCIPayP/euuDREq+aMAxFE5S70PkrLh0iTDj/zEhgvJRKC2+CvXY6EWc6oQwUR48lL5vCW6jiXQ==",
+ "version": "1.0.30001383",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001383.tgz",
+ "integrity": "sha512-swMpEoTp5vDoGBZsYZX7L7nXHe6dsHxi9o6/LKf/f0LukVtnrxly5GVb/fWdCDTqi/yw6Km6tiJ0pmBacm0gbg==",
"dev": true,
"funding": [
{
@@ -1808,9 +2012,9 @@
"integrity": "sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ=="
},
"node_modules/ci-info": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz",
- "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg=="
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.4.0.tgz",
+ "integrity": "sha512-t5QdPT5jq3o262DOQ8zA6E1tlH2upmUc4Hlvrbx1pGYJuiiHl7O7rvVNI+l8HTVhd/q3Qc9vqimkNk5yiXsAug=="
},
"node_modules/ci-parallel-vars": {
"version": "1.0.1",
@@ -2195,90 +2399,32 @@
}
},
"node_modules/del": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
- "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-7.0.0.tgz",
+ "integrity": "sha512-tQbV/4u5WVB8HMJr08pgw0b6nG4RGt/tj+7Numvq+zqcvUFeMaIWWOUFltiU+6go8BSO2/ogsB4EasDaj0y68Q==",
"dependencies": {
- "globby": "^11.0.1",
- "graceful-fs": "^4.2.4",
- "is-glob": "^4.0.1",
- "is-path-cwd": "^2.2.0",
- "is-path-inside": "^3.0.2",
- "p-map": "^4.0.0",
+ "globby": "^13.1.2",
+ "graceful-fs": "^4.2.10",
+ "is-glob": "^4.0.3",
+ "is-path-cwd": "^3.0.0",
+ "is-path-inside": "^4.0.0",
+ "p-map": "^5.5.0",
"rimraf": "^3.0.2",
- "slash": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/del/node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/del/node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/del/node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/del/node_modules/globby": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
- "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
- "dependencies": {
- "array-union": "^2.1.0",
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.2.9",
- "ignore": "^5.2.0",
- "merge2": "^1.4.1",
- "slash": "^3.0.0"
+ "slash": "^4.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14.16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/del/node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/del/node_modules/p-map": {
+ "node_modules/del/node_modules/slash": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
+ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
+ "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
"engines": {
- "node": ">=10"
+ "node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -2334,17 +2480,17 @@
"integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"node_modules/electron-to-chromium": {
- "version": "1.4.144",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.144.tgz",
- "integrity": "sha512-R3RV3rU1xWwFJlSClVWDvARaOk6VUO/FubHLodIASDB3Mc2dzuWvNdfOgH9bwHUTqT79u92qw60NWfwUdzAqdg==",
+ "version": "1.4.232",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.232.tgz",
+ "integrity": "sha512-nd+FW8xHjM+PxNWG44nKnwHaBDdVpJUZuI2sS2JJPt/QpdombnmoCRWEEQNnzaktdIQhsNWdD+dlqxwO8Bn99g==",
"dev": true
},
"node_modules/emittery": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.11.0.tgz",
- "integrity": "sha512-S/7tzL6v5i+4iJd627Nhv9cLFIo5weAIlGccqJFpnBoDB8U1TF2k5tez4J/QNuxyyhWuFqHg1L84Kd3m7iXg6g==",
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.0.0.tgz",
+ "integrity": "sha512-TD/u5aAn5W2HI2OukSIReNYXf/cH7U0QZHPxM4aIVYy0CmtrLCvf+7E8MuV2BbO02l6wq4sAKuFA8H16l6AHMA==",
"engines": {
- "node": ">=12"
+ "node": ">=14.16"
},
"funding": {
"url": "https://github.com/sindresorhus/emittery?sponsor=1"
@@ -2498,13 +2644,14 @@
}
},
"node_modules/eslint": {
- "version": "8.16.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.16.0.tgz",
- "integrity": "sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==",
+ "version": "8.22.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz",
+ "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==",
"dev": true,
"dependencies": {
"@eslint/eslintrc": "^1.3.0",
- "@humanwhocodes/config-array": "^0.9.2",
+ "@humanwhocodes/config-array": "^0.10.4",
+ "@humanwhocodes/gitignore-to-minimatch": "^1.0.2",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -2514,14 +2661,17 @@
"eslint-scope": "^7.1.1",
"eslint-utils": "^3.0.0",
"eslint-visitor-keys": "^3.3.0",
- "espree": "^9.3.2",
+ "espree": "^9.3.3",
"esquery": "^1.4.0",
"esutils": "^2.0.2",
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
+ "find-up": "^5.0.0",
"functional-red-black-tree": "^1.0.1",
"glob-parent": "^6.0.1",
"globals": "^13.15.0",
+ "globby": "^11.1.0",
+ "grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
@@ -2562,9 +2712,9 @@
}
},
"node_modules/eslint-config-xo": {
- "version": "0.41.0",
- "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.41.0.tgz",
- "integrity": "sha512-cyTc182COQVdalOi5105h0Cw/Qb52IRGyIZLmUICIauANm9Upmv81UEsuFkdKnvwr4NtU95qjdk3g4/kNspA6g==",
+ "version": "0.42.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-xo/-/eslint-config-xo-0.42.0.tgz",
+ "integrity": "sha512-HIfd+AM6tHFoaZ/NXYDV3Mr/CJrAj/DoP6IOYt1/v+90XtCwVYOfW7LXbRDYDmhQMzT16h7eqPRcex72waRqdA==",
"dev": true,
"dependencies": {
"confusing-browser-globals": "1.0.11"
@@ -2806,92 +2956,29 @@
}
},
"node_modules/eslint-module-utils": {
- "version": "2.7.3",
- "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz",
- "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==",
+ "version": "2.7.4",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz",
+ "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==",
"dev": true,
"dependencies": {
- "debug": "^3.2.7",
- "find-up": "^2.1.0"
+ "debug": "^3.2.7"
},
"engines": {
"node": ">=4"
+ },
+ "peerDependenciesMeta": {
+ "eslint": {
+ "optional": true
+ }
}
},
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-module-utils/node_modules/find-up": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
- "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==",
- "dev": true,
- "dependencies": {
- "locate-path": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-module-utils/node_modules/locate-path": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
- "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==",
- "dev": true,
- "dependencies": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-module-utils/node_modules/p-limit": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
- "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
- "dev": true,
- "dependencies": {
- "p-try": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-module-utils/node_modules/p-locate": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
- "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==",
- "dev": true,
- "dependencies": {
- "p-limit": "^1.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-module-utils/node_modules/p-try": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-module-utils/node_modules/path-exists": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"dev": true,
- "engines": {
- "node": ">=4"
+ "dependencies": {
+ "ms": "^2.1.1"
}
},
"node_modules/eslint-plugin-ava": {
@@ -2929,9 +3016,9 @@
}
},
"node_modules/eslint-plugin-es": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz",
- "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-4.1.0.tgz",
+ "integrity": "sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==",
"dev": true,
"dependencies": {
"eslint-utils": "^2.0.0",
@@ -3053,84 +3140,56 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"dev": true
},
- "node_modules/eslint-plugin-no-use-extend-native": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.5.0.tgz",
- "integrity": "sha512-dBNjs8hor8rJgeXLH4HTut5eD3RGWf9JUsadIfuL7UosVQ/dnvOKwxEcRrXrFxrMZ8llUVWT+hOimxJABsAUzQ==",
- "dev": true,
- "dependencies": {
- "is-get-set-prop": "^1.0.0",
- "is-js-type": "^2.0.0",
- "is-obj-prop": "^1.0.0",
- "is-proto-prop": "^2.0.0"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/eslint-plugin-node": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz",
- "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==",
+ "node_modules/eslint-plugin-n": {
+ "version": "15.2.5",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.2.5.tgz",
+ "integrity": "sha512-8+BYsqiyZfpu6NXmdLOXVUfk8IocpCjpd8nMRRH0A9ulrcemhb2VI9RSJMEy5udx++A/YcVPD11zT8hpFq368g==",
"dev": true,
"dependencies": {
- "eslint-plugin-es": "^3.0.0",
- "eslint-utils": "^2.0.0",
+ "builtins": "^5.0.1",
+ "eslint-plugin-es": "^4.1.0",
+ "eslint-utils": "^3.0.0",
"ignore": "^5.1.1",
- "minimatch": "^3.0.4",
- "resolve": "^1.10.1",
- "semver": "^6.1.0"
+ "is-core-module": "^2.10.0",
+ "minimatch": "^3.1.2",
+ "resolve": "^1.22.1",
+ "semver": "^7.3.7"
},
"engines": {
- "node": ">=8.10.0"
+ "node": ">=12.22.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
},
"peerDependencies": {
- "eslint": ">=5.16.0"
+ "eslint": ">=7.0.0"
}
},
- "node_modules/eslint-plugin-node/node_modules/eslint-utils": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz",
- "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==",
+ "node_modules/eslint-plugin-no-use-extend-native": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-no-use-extend-native/-/eslint-plugin-no-use-extend-native-0.5.0.tgz",
+ "integrity": "sha512-dBNjs8hor8rJgeXLH4HTut5eD3RGWf9JUsadIfuL7UosVQ/dnvOKwxEcRrXrFxrMZ8llUVWT+hOimxJABsAUzQ==",
"dev": true,
"dependencies": {
- "eslint-visitor-keys": "^1.1.0"
- },
- "engines": {
- "node": ">=6"
+ "is-get-set-prop": "^1.0.0",
+ "is-js-type": "^2.0.0",
+ "is-obj-prop": "^1.0.0",
+ "is-proto-prop": "^2.0.0"
},
- "funding": {
- "url": "https://github.com/sponsors/mysticatea"
- }
- },
- "node_modules/eslint-plugin-node/node_modules/eslint-visitor-keys": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz",
- "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==",
- "dev": true,
"engines": {
- "node": ">=4"
- }
- },
- "node_modules/eslint-plugin-node/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
+ "node": ">=6.0.0"
}
},
"node_modules/eslint-plugin-prettier": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz",
- "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==",
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz",
+ "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==",
"dev": true,
"dependencies": {
"prettier-linter-helpers": "^1.0.0"
},
"engines": {
- "node": ">=6.0.0"
+ "node": ">=12.0.0"
},
"peerDependencies": {
"eslint": ">=7.28.0",
@@ -3326,9 +3385,9 @@
}
},
"node_modules/eslint/node_modules/globals": {
- "version": "13.15.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.15.0.tgz",
- "integrity": "sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==",
+ "version": "13.17.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.17.0.tgz",
+ "integrity": "sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -3340,6 +3399,26 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/eslint/node_modules/globby": {
+ "version": "11.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
+ "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
+ "dev": true,
+ "dependencies": {
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.2.9",
+ "ignore": "^5.2.0",
+ "merge2": "^1.4.1",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/eslint/node_modules/js-yaml": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
@@ -3377,12 +3456,12 @@
}
},
"node_modules/esm-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/esm-utils/-/esm-utils-4.0.0.tgz",
- "integrity": "sha512-1x5H25/8BQWV94T8+KRb1gcSdVQ3g+8P0NikggAujVaurUa0cOoR+UO8ie3y29iQO70HjNA93c9ie+qqI/8zzw==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/esm-utils/-/esm-utils-4.1.0.tgz",
+ "integrity": "sha512-/oTSIjfeNL/gzVgM7CbRL4bqE8aKU1ANJqr8voBwTXvVMjYYm15PdYG6c6zNSAHNa3s9b6UMRHDosIq26OBdWg==",
"dev": true,
"dependencies": {
- "import-meta-resolve": "1.1.1",
+ "import-meta-resolve": "2.1.0",
"url-or-path": "2.1.0"
},
"funding": {
@@ -3390,17 +3469,20 @@
}
},
"node_modules/espree": {
- "version": "9.3.2",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.2.tgz",
- "integrity": "sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==",
+ "version": "9.3.3",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz",
+ "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==",
"dev": true,
"dependencies": {
- "acorn": "^8.7.1",
+ "acorn": "^8.8.0",
"acorn-jsx": "^5.3.2",
"eslint-visitor-keys": "^3.3.0"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://opencollective.com/eslint"
}
},
"node_modules/esprima": {
@@ -3548,15 +3630,15 @@
}
},
"node_modules/figures": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/figures/-/figures-4.0.1.tgz",
- "integrity": "sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz",
+ "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==",
"dependencies": {
"escape-string-regexp": "^5.0.0",
"is-unicode-supported": "^1.2.0"
},
"engines": {
- "node": ">=12"
+ "node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -3644,9 +3726,9 @@
}
},
"node_modules/flatted": {
- "version": "3.2.5",
- "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
- "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
+ "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
"dev": true
},
"node_modules/foreground-child": {
@@ -3783,14 +3865,14 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz",
+ "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
- "has-symbols": "^1.0.1"
+ "has-symbols": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -3901,9 +3983,9 @@
}
},
"node_modules/globby": {
- "version": "13.1.1",
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz",
- "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==",
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz",
+ "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==",
"dependencies": {
"dir-glob": "^3.0.1",
"fast-glob": "^3.2.11",
@@ -3934,6 +4016,12 @@
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
"integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA=="
},
+ "node_modules/grapheme-splitter": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
+ "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
+ "dev": true
+ },
"node_modules/hard-rejection": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz",
@@ -4118,13 +4206,10 @@
}
},
"node_modules/import-meta-resolve": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-1.1.1.tgz",
- "integrity": "sha512-JiTuIvVyPaUg11eTrNDx5bgQ/yMKMZffc7YSjvQeSMXy58DO2SQ8BtAf3xteZvmzvjYh14wnqNjL8XVeDy2o9A==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-2.1.0.tgz",
+ "integrity": "sha512-yG9pxkWJVTy4cmRsNWE3ztFdtFuYIV8G4N+cbCkO8b+qngkLyIUhxQFuZ0qJm67+0nUOxjMPT7nfksPKza1v2g==",
"dev": true,
- "dependencies": {
- "builtins": "^4.0.0"
- },
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wooorm"
@@ -4265,15 +4350,18 @@
}
},
"node_modules/is-builtin-module": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz",
- "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.0.tgz",
+ "integrity": "sha512-phDA4oSGt7vl1n5tJvTWooWWAsXLY+2xCnxNqvKhGEzujg+A43wPlPOyDg3C8XQHN+6k/JTQWJ/j0dQh/qr+Hw==",
"dev": true,
"dependencies": {
- "builtin-modules": "^3.0.0"
+ "builtin-modules": "^3.3.0"
},
"engines": {
"node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-callable": {
@@ -4289,9 +4377,9 @@
}
},
"node_modules/is-core-module": {
- "version": "2.9.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz",
- "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==",
+ "version": "2.10.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz",
+ "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==",
"dev": true,
"dependencies": {
"has": "^1.0.3"
@@ -4439,19 +4527,25 @@
}
},
"node_modules/is-path-cwd": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
- "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz",
+ "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==",
"engines": {
- "node": ">=6"
+ "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-path-inside": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
- "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz",
+ "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==",
"engines": {
- "node": ">=8"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/is-plain-obj": {
@@ -4688,18 +4782,17 @@
}
},
"node_modules/istanbul-lib-processinfo": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
- "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz",
+ "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==",
"dev": true,
"dependencies": {
"archy": "^1.0.0",
- "cross-spawn": "^7.0.0",
- "istanbul-lib-coverage": "^3.0.0-alpha.1",
- "make-dir": "^3.0.0",
+ "cross-spawn": "^7.0.3",
+ "istanbul-lib-coverage": "^3.2.0",
"p-map": "^3.0.0",
"rimraf": "^3.0.0",
- "uuid": "^3.3.3"
+ "uuid": "^8.3.2"
},
"engines": {
"node": ">=8"
@@ -4777,9 +4870,9 @@
}
},
"node_modules/istanbul-reports": {
- "version": "3.1.4",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.4.tgz",
- "integrity": "sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==",
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz",
+ "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==",
"dev": true,
"dependencies": {
"html-escaper": "^2.0.0",
@@ -5001,9 +5094,9 @@
}
},
"node_modules/line-column-path/node_modules/type-fest": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.13.0.tgz",
- "integrity": "sha512-lPfAm42MxE4/456+QyIaaVBAwgpJb6xZ8PRu09utnhPdWwcyj9vgy6Sq0Z5yNbJ21EdxB5dRU/Qg8bsyAMtlcw==",
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
"dev": true,
"engines": {
"node": ">=12.20"
@@ -5427,9 +5520,9 @@
}
},
"node_modules/minipass": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
- "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
+ "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
"dev": true,
"dependencies": {
"yallist": "^4.0.0"
@@ -5494,9 +5587,9 @@
}
},
"node_modules/node-releases": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz",
- "integrity": "sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz",
+ "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==",
"dev": true
},
"node_modules/nofilter": {
@@ -5885,14 +5978,14 @@
}
},
"node_modules/object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
+ "version": "4.1.4",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
+ "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.4",
+ "has-symbols": "^1.0.3",
"object-keys": "^1.1.1"
},
"engines": {
@@ -6169,9 +6262,9 @@
}
},
"node_modules/p-map": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.4.0.tgz",
- "integrity": "sha512-obHraaWkwl4y1NHR4vW5D5k+33+S5QrkFqsNrrvK0R7lilXdzo/DZgnloDvYUaRT+Sk6vVK47JUQMQY6cjPMXg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz",
+ "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==",
"dependencies": {
"aggregate-error": "^4.0.0"
},
@@ -6257,11 +6350,14 @@
}
},
"node_modules/parse-ms": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz",
- "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz",
+ "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==",
"engines": {
- "node": ">=6"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/path-exists": {
@@ -6361,9 +6457,9 @@
}
},
"node_modules/pkg-conf/node_modules/locate-path": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.0.tgz",
- "integrity": "sha512-HNx5uOnYeK4SxEoid5qnhRfprlJeGMzFRKPLCf/15N3/B4AiofNwC/yq7VBKdVk9dx7m+PiYCJOGg55JYTAqoQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz",
+ "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==",
"dependencies": {
"p-locate": "^6.0.0"
},
@@ -6518,9 +6614,9 @@
}
},
"node_modules/prettier": {
- "version": "2.6.2",
- "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz",
- "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz",
+ "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==",
"dev": true,
"bin": {
"prettier": "bin-prettier.js"
@@ -6545,14 +6641,14 @@
}
},
"node_modules/pretty-ms": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz",
- "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz",
+ "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==",
"dependencies": {
- "parse-ms": "^2.1.0"
+ "parse-ms": "^3.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14.16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
@@ -6829,7 +6925,7 @@
"node_modules/release-zalgo": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
- "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
+ "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==",
"dev": true,
"dependencies": {
"es6-error": "^4.0.1"
@@ -6853,7 +6949,7 @@
"node_modules/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"engines": {
"node": ">=0.10.0"
}
@@ -6865,12 +6961,12 @@
"dev": true
},
"node_modules/resolve": {
- "version": "1.22.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
- "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
"dev": true,
"dependencies": {
- "is-core-module": "^2.8.1",
+ "is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -7031,7 +7127,7 @@
"node_modules/set-blocking": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
"dev": true
},
"node_modules/shebang-command": {
@@ -7075,9 +7171,9 @@
"integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
},
"node_modules/sinon": {
- "version": "13.0.2",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-13.0.2.tgz",
- "integrity": "sha512-KvOrztAVqzSJWMDoxM4vM+GPys1df2VBoXm+YciyB/OLMamfS3VXh3oGh5WtrAGSzrgczNWFFY22oKb7Fi5eeA==",
+ "version": "14.0.0",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.0.tgz",
+ "integrity": "sha512-ugA6BFmE+WrJdh0owRZHToLd32Uw3Lxq6E6LtNRU+xTVBefx632h03Q7apXWRsRdZAJ41LB8aUfn2+O4jsDNMw==",
"dev": true,
"dependencies": {
"@sinonjs/commons": "^1.8.3",
@@ -7178,15 +7274,15 @@
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
- "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
+ "version": "3.0.12",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz",
+ "integrity": "sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==",
"dev": true
},
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
- "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
},
"node_modules/stack-utils": {
"version": "2.0.5",
@@ -7362,9 +7458,9 @@
}
},
"node_modules/tap": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/tap/-/tap-16.2.0.tgz",
- "integrity": "sha512-ikfNLy701p2+sH3R0pAXQ/Aen6ZByaguUY7UsoTLL4AXa2c9gYQL+pI21p13lq54R7/CEoLaViC1sexcWG32ig==",
+ "version": "16.3.0",
+ "resolved": "https://registry.npmjs.org/tap/-/tap-16.3.0.tgz",
+ "integrity": "sha512-J9GffPUAbX6FnWbQ/jj7ktzd9nnDFP1fH44OzidqOmxUfZ1hPLMOvpS99LnDiP0H2mO8GY3kGN5XoY0xIKbNFA==",
"bundleDependencies": [
"ink",
"treport",
@@ -9366,7 +9462,7 @@
"node_modules/tapable": {
"version": "0.1.10",
"resolved": "https://registry.npmjs.org/tapable/-/tapable-0.1.10.tgz",
- "integrity": "sha1-KcNXB8K3DlDQdIK10gLo7URtr9Q=",
+ "integrity": "sha512-jX8Et4hHg57mug1/079yitEKWGB3LCwoxByLsNim89LABq8NqgiX+6iYVOsq0vX8uJHkU+DZ5fnq95f800bEsQ==",
"dev": true,
"engines": {
"node": ">=0.6"
@@ -9431,38 +9527,28 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
- "node_modules/temp-write/node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
"node_modules/tempy": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/tempy/-/tempy-2.0.0.tgz",
- "integrity": "sha512-m+QReZVhpa0Y56fmfoLFRZN4aDFdd3qVd8a9k3RfyTw/1utVYNg+Ar4BY6l4/TlkhYCCJFfhYWt9uy0127buJg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.0.0.tgz",
+ "integrity": "sha512-B2I9X7+o2wOaW4r/CWMkpOO9mdiTRCxXNgob6iGvPmfPWgH/KyUD6Uy5crtWBxIBe3YrNZKR2lSzv1JJKWD4vA==",
"dev": true,
"dependencies": {
- "del": "^6.0.0",
"is-stream": "^3.0.0",
"temp-dir": "^2.0.0",
- "type-fest": "^2.0.0",
+ "type-fest": "^2.12.2",
"unique-string": "^3.0.0"
},
"engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
+ "node": ">=14.16"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/tempy/node_modules/type-fest": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.13.0.tgz",
- "integrity": "sha512-lPfAm42MxE4/456+QyIaaVBAwgpJb6xZ8PRu09utnhPdWwcyj9vgy6Sq0Z5yNbJ21EdxB5dRU/Qg8bsyAMtlcw==",
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz",
+ "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==",
"dev": true,
"engines": {
"node": ">=12.20"
@@ -9472,9 +9558,9 @@
}
},
"node_modules/terser": {
- "version": "5.14.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.0.tgz",
- "integrity": "sha512-JC6qfIEkPBd9j1SMO3Pfn+A6w2kQV54tv+ABQLgZr7dA3k/DL/OBoYSWxzVpZev3J+bUHXfr55L8Mox7AaNo6g==",
+ "version": "5.15.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.0.tgz",
+ "integrity": "sha512-L1BJiXVmheAQQy+as0oF3Pwtlo4s3Wi1X2zNZ2NxOB4wx9bdS9Vk67XQENLFdLYGCK/Z2di53mTj/hBafR+dTA==",
"dev": true,
"peer": true,
"dependencies": {
@@ -9491,17 +9577,17 @@
}
},
"node_modules/terser-webpack-plugin": {
- "version": "5.3.3",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.3.tgz",
- "integrity": "sha512-Fx60G5HNYknNTNQnzQ1VePRuu89ZVYWfjRAeT5rITuCY/1b08s49e5kSQwHDirKZWuoKOBRFS98EUUoZ9kLEwQ==",
+ "version": "5.3.5",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.5.tgz",
+ "integrity": "sha512-AOEDLDxD2zylUGf/wxHxklEkOe2/r+seuyOWujejFrIxHf11brA1/dWQNIgXa1c6/Wkxgu7zvv0JhOWfc2ELEA==",
"dev": true,
"peer": true,
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.7",
+ "@jridgewell/trace-mapping": "^0.3.14",
"jest-worker": "^27.4.5",
"schema-utils": "^3.1.1",
"serialize-javascript": "^6.0.0",
- "terser": "^5.7.2"
+ "terser": "^5.14.1"
},
"engines": {
"node": ">= 10.13.0"
@@ -9542,13 +9628,13 @@
"node_modules/text-table": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
- "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
"dev": true
},
"node_modules/time-zone": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz",
- "integrity": "sha1-mcW/VZWJZq9tBtg73zgA3IL67F0=",
+ "integrity": "sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA==",
"engines": {
"node": ">=4"
}
@@ -9556,7 +9642,7 @@
"node_modules/to-absolute-glob": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
- "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=",
+ "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==",
"dev": true,
"dependencies": {
"is-absolute": "^1.0.0",
@@ -9569,7 +9655,7 @@
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true,
"engines": {
"node": ">=4"
@@ -9610,7 +9696,7 @@
"node_modules/trivial-deferred": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz",
- "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=",
+ "integrity": "sha512-dagAKX7vaesNNAwOc9Np9C2mJ+7YopF4lk+jE2JML9ta4kZ91Y6UruJNH65bLRYoUROD8EY+Pmi44qQWwXR7sw==",
"dev": true
},
"node_modules/tsconfig-paths": {
@@ -9640,19 +9726,19 @@
"node_modules/tsconfig-paths/node_modules/strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==",
"dev": true,
"engines": {
"node": ">=4"
}
},
"node_modules/tsd": {
- "version": "0.20.0",
- "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.20.0.tgz",
- "integrity": "sha512-iba/JlyT3qtnA9t8VrX2Fipu3L31U48oRIf1PNs+lIwQ7n63GTkt9eQlB5bLtfb7nYfy9t8oZzs+K4QEoEIS8Q==",
+ "version": "0.24.1",
+ "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.24.1.tgz",
+ "integrity": "sha512-sD+s81/2aM4RRhimCDttd4xpBNbUFWnoMSHk/o8kC8Ek23jljeRNWjsxFJmOmYLuLTN9swRt1b6iXfUXTcTiIA==",
"dev": true,
"dependencies": {
- "@tsd/typescript": "~4.6.3",
+ "@tsd/typescript": "~4.8.3",
"eslint-formatter-pretty": "^4.1.0",
"globby": "^11.0.1",
"meow": "^9.0.0",
@@ -9663,16 +9749,7 @@
"tsd": "dist/cli.js"
},
"engines": {
- "node": ">=12"
- }
- },
- "node_modules/tsd/node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "engines": {
- "node": ">=8"
+ "node": ">=14.16"
}
},
"node_modules/tsd/node_modules/globby": {
@@ -9738,9 +9815,9 @@
}
},
"node_modules/typescript": {
- "version": "4.7.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.2.tgz",
- "integrity": "sha512-Mamb1iX2FDUpcTRzltPxgWMKy3fhg0TN378ylbktPGPK/99KbDtMQ4W1hwgsbPAsG3a0xKa1vmw4VKZQbkvz5A==",
+ "version": "4.8.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz",
+ "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==",
"dev": true,
"bin": {
"tsc": "bin/tsc",
@@ -9768,41 +9845,19 @@
"node_modules/unc-path-regex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
- "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
+ "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/unicode-length": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.0.2.tgz",
- "integrity": "sha512-Ph/j1VbS3/r77nhoY2WU0GWGjVYOHL3xpKp0y/Eq2e5r0mT/6b649vm7KFO6RdAdrZkYLdxphYVgvODxPB+Ebg==",
- "dev": true,
- "dependencies": {
- "punycode": "^2.0.0",
- "strip-ansi": "^3.0.1"
- }
- },
- "node_modules/unicode-length/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/unicode-length/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-2.1.0.tgz",
+ "integrity": "sha512-4bV582zTV9Q02RXBxSUMiuN/KHo5w4aTojuKTNT96DIKps/SIawFp7cS5Mu25VuY1AioGXrmYyzKZUzh8OqoUw==",
"dev": true,
"dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
+ "punycode": "^2.0.0"
}
},
"node_modules/unique-string": {
@@ -9829,6 +9884,32 @@
"node": ">= 10.0.0"
}
},
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz",
+ "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "browserslist-lint": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
"node_modules/uri-js": {
"version": "4.4.1",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -9848,13 +9929,12 @@
}
},
"node_modules/uuid": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
- "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"dev": true,
"bin": {
- "uuid": "bin/uuid"
+ "uuid": "dist/bin/uuid"
}
},
"node_modules/v8-compile-cache": {
@@ -9864,12 +9944,12 @@
"dev": true
},
"node_modules/v8-to-istanbul": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.0.tgz",
- "integrity": "sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==",
+ "version": "9.0.1",
+ "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz",
+ "integrity": "sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==",
"dev": true,
"dependencies": {
- "@jridgewell/trace-mapping": "^0.3.7",
+ "@jridgewell/trace-mapping": "^0.3.12",
"@types/istanbul-lib-coverage": "^2.0.1",
"convert-source-map": "^1.6.0"
},
@@ -9902,9 +9982,9 @@
}
},
"node_modules/webpack": {
- "version": "5.73.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.73.0.tgz",
- "integrity": "sha512-svjudQRPPa0YiOYa2lM/Gacw0r6PvxptHj4FuEKQ2kX05ZLkjbVc5MnPs6its5j7IZljnIqSVo/OsY2X0IpHGA==",
+ "version": "5.74.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz",
+ "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==",
"dev": true,
"peer": true,
"dependencies": {
@@ -9913,11 +9993,11 @@
"@webassemblyjs/ast": "1.11.1",
"@webassemblyjs/wasm-edit": "1.11.1",
"@webassemblyjs/wasm-parser": "1.11.1",
- "acorn": "^8.4.1",
+ "acorn": "^8.7.1",
"acorn-import-assertions": "^1.7.6",
"browserslist": "^4.14.5",
"chrome-trace-event": "^1.0.2",
- "enhanced-resolve": "^5.9.3",
+ "enhanced-resolve": "^5.10.0",
"es-module-lexer": "^0.9.0",
"eslint-scope": "5.1.1",
"events": "^3.2.0",
@@ -9930,7 +10010,7 @@
"schema-utils": "^3.1.0",
"tapable": "^2.1.1",
"terser-webpack-plugin": "^5.1.3",
- "watchpack": "^2.3.1",
+ "watchpack": "^2.4.0",
"webpack-sources": "^3.2.3"
},
"bin": {
@@ -9959,10 +10039,17 @@
"node": ">=10.13.0"
}
},
+ "node_modules/webpack/node_modules/@types/estree": {
+ "version": "0.0.51",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz",
+ "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/webpack/node_modules/enhanced-resolve": {
- "version": "5.9.3",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.3.tgz",
- "integrity": "sha512-Bq9VSor+kjvW3f9/MiiR4eE3XYgOl7/rS8lnSxbRbF3kS0B2r+Y9w5krBWxZgDxASVZbdYrn5wT4j/Wb0J9qow==",
+ "version": "5.10.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz",
+ "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==",
"dev": true,
"peer": true,
"dependencies": {
@@ -10049,7 +10136,7 @@
"node_modules/which-module": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
- "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==",
"dev": true
},
"node_modules/word-wrap": {
@@ -10155,24 +10242,24 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/write-file-atomic": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz",
- "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz",
+ "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==",
"dependencies": {
"imurmurhash": "^0.1.4",
"signal-exit": "^3.0.7"
},
"engines": {
- "node": "^12.13.0 || ^14.15.0 || >=16"
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
"node_modules/xo": {
- "version": "0.49.0",
- "resolved": "https://registry.npmjs.org/xo/-/xo-0.49.0.tgz",
- "integrity": "sha512-dDj1bYy3LJ/8C2XItw/lFVckZtO68C2YCx9TR8xfSLVcmael3y0SkeFse/3OMUPMvG5jG44bQ2CAI6wFTpRqVg==",
+ "version": "0.52.3",
+ "resolved": "https://registry.npmjs.org/xo/-/xo-0.52.3.tgz",
+ "integrity": "sha512-liCEteZ5z+QRyh3XzsYWQyxedBHBvx8CDlNvvi+BJz74L0E5/ID2v7JtoX3bD541AlMuOy4e/iWif6hhNGBFNw==",
"bundleDependencies": [
"@typescript-eslint/eslint-plugin",
"@typescript-eslint/parser",
@@ -10180,26 +10267,26 @@
],
"dev": true,
"dependencies": {
- "@eslint/eslintrc": "^1.2.3",
+ "@eslint/eslintrc": "^1.3.0",
"@typescript-eslint/eslint-plugin": "*",
"@typescript-eslint/parser": "*",
"arrify": "^3.0.0",
"cosmiconfig": "^7.0.1",
"define-lazy-prop": "^3.0.0",
- "eslint": "^8.15.0",
+ "eslint": "^8.22.0",
"eslint-config-prettier": "^8.5.0",
- "eslint-config-xo": "^0.41.0",
+ "eslint-config-xo": "^0.42.0",
"eslint-config-xo-typescript": "*",
"eslint-formatter-pretty": "^4.1.0",
"eslint-import-resolver-webpack": "^0.13.2",
"eslint-plugin-ava": "^13.2.0",
"eslint-plugin-eslint-comments": "^3.2.0",
"eslint-plugin-import": "^2.26.0",
+ "eslint-plugin-n": "^15.2.5",
"eslint-plugin-no-use-extend-native": "^0.5.0",
- "eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-unicorn": "^42.0.0",
- "esm-utils": "^4.0.0",
+ "esm-utils": "^4.1.0",
"find-cache-dir": "^3.3.2",
"find-up": "^6.3.0",
"get-stdin": "^9.0.0",
@@ -10215,7 +10302,7 @@
"semver": "^7.3.7",
"slash": "^4.0.0",
"to-absolute-glob": "^2.0.2",
- "typescript": "^4.6.4"
+ "typescript": "^4.7.3"
},
"bin": {
"xo": "cli.js"
@@ -10269,14 +10356,14 @@
"license": "MIT"
},
"node_modules/xo/node_modules/@typescript-eslint/eslint-plugin": {
- "version": "5.24.0",
+ "version": "5.36.1",
"dev": true,
"inBundle": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/scope-manager": "5.24.0",
- "@typescript-eslint/type-utils": "5.24.0",
- "@typescript-eslint/utils": "5.24.0",
+ "@typescript-eslint/scope-manager": "5.36.1",
+ "@typescript-eslint/type-utils": "5.36.1",
+ "@typescript-eslint/utils": "5.36.1",
"debug": "^4.3.4",
"functional-red-black-tree": "^1.0.1",
"ignore": "^5.2.0",
@@ -10302,14 +10389,14 @@
}
},
"node_modules/xo/node_modules/@typescript-eslint/parser": {
- "version": "5.24.0",
+ "version": "5.36.1",
"dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/scope-manager": "5.24.0",
- "@typescript-eslint/types": "5.24.0",
- "@typescript-eslint/typescript-estree": "5.24.0",
+ "@typescript-eslint/scope-manager": "5.36.1",
+ "@typescript-eslint/types": "5.36.1",
+ "@typescript-eslint/typescript-estree": "5.36.1",
"debug": "^4.3.4"
},
"engines": {
@@ -10329,13 +10416,13 @@
}
},
"node_modules/xo/node_modules/@typescript-eslint/scope-manager": {
- "version": "5.24.0",
+ "version": "5.36.1",
"dev": true,
"inBundle": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "5.24.0",
- "@typescript-eslint/visitor-keys": "5.24.0"
+ "@typescript-eslint/types": "5.36.1",
+ "@typescript-eslint/visitor-keys": "5.36.1"
},
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -10346,12 +10433,13 @@
}
},
"node_modules/xo/node_modules/@typescript-eslint/type-utils": {
- "version": "5.24.0",
+ "version": "5.36.1",
"dev": true,
"inBundle": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/utils": "5.24.0",
+ "@typescript-eslint/typescript-estree": "5.36.1",
+ "@typescript-eslint/utils": "5.36.1",
"debug": "^4.3.4",
"tsutils": "^3.21.0"
},
@@ -10372,7 +10460,7 @@
}
},
"node_modules/xo/node_modules/@typescript-eslint/types": {
- "version": "5.24.0",
+ "version": "5.36.1",
"dev": true,
"inBundle": true,
"license": "MIT",
@@ -10385,13 +10473,13 @@
}
},
"node_modules/xo/node_modules/@typescript-eslint/typescript-estree": {
- "version": "5.24.0",
+ "version": "5.36.1",
"dev": true,
"inBundle": true,
"license": "BSD-2-Clause",
"dependencies": {
- "@typescript-eslint/types": "5.24.0",
- "@typescript-eslint/visitor-keys": "5.24.0",
+ "@typescript-eslint/types": "5.36.1",
+ "@typescript-eslint/visitor-keys": "5.36.1",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -10441,15 +10529,15 @@
}
},
"node_modules/xo/node_modules/@typescript-eslint/utils": {
- "version": "5.24.0",
+ "version": "5.36.1",
"dev": true,
"inBundle": true,
"license": "MIT",
"dependencies": {
"@types/json-schema": "^7.0.9",
- "@typescript-eslint/scope-manager": "5.24.0",
- "@typescript-eslint/types": "5.24.0",
- "@typescript-eslint/typescript-estree": "5.24.0",
+ "@typescript-eslint/scope-manager": "5.36.1",
+ "@typescript-eslint/types": "5.36.1",
+ "@typescript-eslint/typescript-estree": "5.36.1",
"eslint-scope": "^5.1.1",
"eslint-utils": "^3.0.0"
},
@@ -10465,12 +10553,12 @@
}
},
"node_modules/xo/node_modules/@typescript-eslint/visitor-keys": {
- "version": "5.24.0",
+ "version": "5.36.1",
"dev": true,
"inBundle": true,
"license": "MIT",
"dependencies": {
- "@typescript-eslint/types": "5.24.0",
+ "@typescript-eslint/types": "5.36.1",
"eslint-visitor-keys": "^3.3.0"
},
"engines": {
@@ -10580,7 +10668,7 @@
}
},
"node_modules/xo/node_modules/eslint-config-xo-typescript": {
- "version": "0.51.1",
+ "version": "0.53.0",
"dev": true,
"inBundle": true,
"license": "MIT",
@@ -10591,7 +10679,8 @@
"url": "https://github.com/sponsors/sindresorhus"
},
"peerDependencies": {
- "@typescript-eslint/eslint-plugin": ">=5.22.0",
+ "@typescript-eslint/eslint-plugin": ">=5.31.0",
+ "@typescript-eslint/parser": ">=5.31.0",
"eslint": ">=8.0.0",
"typescript": ">=4.4"
}
@@ -10786,9 +10875,9 @@
}
},
"node_modules/xo/node_modules/locate-path": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.0.tgz",
- "integrity": "sha512-HNx5uOnYeK4SxEoid5qnhRfprlJeGMzFRKPLCf/15N3/B4AiofNwC/yq7VBKdVk9dx7m+PiYCJOGg55JYTAqoQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.1.1.tgz",
+ "integrity": "sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg==",
"dev": true,
"dependencies": {
"p-locate": "^6.0.0"
@@ -10813,9 +10902,9 @@
}
},
"node_modules/xo/node_modules/meow": {
- "version": "10.1.2",
- "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.2.tgz",
- "integrity": "sha512-zbuAlN+V/sXlbGchNS9WTWjUzeamwMt/BApKCJi7B0QyZstZaMx0n4Unll/fg0njGtMdC9UP5SAscvOCLYdM+Q==",
+ "version": "10.1.3",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.3.tgz",
+ "integrity": "sha512-0WL7RMCPPdUTE00+GxJjL4d5Dm6eUbmAzxlzywJWiRUKCW093owmZ7/q74tH9VI91vxw9KJJNxAcvdpxb2G4iA==",
"dev": true,
"dependencies": {
"@types/minimist": "^1.2.2",
@@ -11329,9 +11418,9 @@
}
},
"node_modules/yargs/node_modules/yargs-parser": {
- "version": "21.0.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz",
- "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==",
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"engines": {
"node": ">=12"
}
diff --git a/package.json b/package.json
index 0540bd384..e1f7061c5 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "ava",
- "version": "4.3.3",
+ "version": "5.0.1",
"description": "Node.js test runner that lets you develop with confidence.",
"license": "MIT",
"repository": "avajs/ava",
@@ -11,18 +11,18 @@
"exports": {
".": {
"import": {
- "types": "./index.d.ts",
+ "types": "./entrypoints/main.d.ts",
"default": "./entrypoints/main.mjs"
},
"require": {
- "types": "./entrypoints/index.d.cts",
+ "types": "./entrypoints/main.d.cts",
"default": "./entrypoints/main.cjs"
}
},
"./eslint-plugin-helper": "./entrypoints/eslint-plugin-helper.cjs",
"./plugin": {
"import": {
- "types": "./plugin.d.ts",
+ "types": "./entrypoints/plugin.d.ts",
"default": "./entrypoints/plugin.mjs"
},
"require": {
@@ -33,18 +33,17 @@
},
"type": "module",
"engines": {
- "node": ">=12.22 <13 || >=14.17 <15 || >=16.4 <17 || >=18"
+ "node": ">=14.19 <15 || >=16.15 <17 || >=18"
},
"scripts": {
"cover": "c8 --report=none test-ava && c8 --report=none --no-clean tap && c8 report",
- "test": "xo && tsd && npm run -s cover"
+ "test": "xo && tsc --noEmit && npm run -s cover"
},
"files": [
"entrypoints",
"lib",
"types",
- "index.d.ts",
- "plugin.d.ts"
+ "*.d.ts"
],
"keywords": [
"🦄",
@@ -82,9 +81,9 @@
"typescript"
],
"dependencies": {
- "acorn": "^8.7.1",
+ "acorn": "^8.8.0",
"acorn-walk": "^8.2.0",
- "ansi-styles": "^6.1.0",
+ "ansi-styles": "^6.1.1",
"arrgv": "^1.0.2",
"arrify": "^3.0.0",
"callsites": "^4.0.0",
@@ -92,7 +91,7 @@
"chalk": "^5.0.1",
"chokidar": "^3.5.3",
"chunkd": "^2.0.1",
- "ci-info": "^3.3.1",
+ "ci-info": "^3.4.0",
"ci-parallel-vars": "^1.0.1",
"clean-yaml-object": "^0.1.0",
"cli-truncate": "^3.1.0",
@@ -101,10 +100,10 @@
"concordance": "^5.0.4",
"currently-unhandled": "^0.4.1",
"debug": "^4.3.4",
- "del": "^6.1.1",
- "emittery": "^0.11.0",
- "figures": "^4.0.1",
- "globby": "^13.1.1",
+ "del": "^7.0.0",
+ "emittery": "^1.0.0",
+ "figures": "^5.0.0",
+ "globby": "^13.1.2",
"ignore-by-default": "^2.1.0",
"indent-string": "^5.0.0",
"is-error": "^2.2.2",
@@ -114,39 +113,40 @@
"mem": "^9.0.2",
"ms": "^2.1.3",
"p-event": "^5.0.1",
- "p-map": "^5.4.0",
+ "p-map": "^5.5.0",
"picomatch": "^2.3.1",
"pkg-conf": "^4.0.0",
"plur": "^5.1.0",
- "pretty-ms": "^7.0.1",
+ "pretty-ms": "^8.0.0",
"resolve-cwd": "^3.0.0",
"slash": "^3.0.0",
"stack-utils": "^2.0.5",
"strip-ansi": "^7.0.1",
"supertap": "^3.0.1",
"temp-dir": "^2.0.0",
- "write-file-atomic": "^4.0.1",
+ "write-file-atomic": "^4.0.2",
"yargs": "^17.5.1"
},
"devDependencies": {
"@ava/test": "github:avajs/test",
"@ava/typescript": "^3.0.1",
+ "@sindresorhus/tsconfig": "^3.0.1",
"@sinonjs/fake-timers": "^9.1.2",
- "ansi-escapes": "^5.0.0",
- "c8": "^7.11.3",
+ "ansi-escapes": "^6.0.0",
+ "c8": "^7.12.0",
"delay": "^5.0.0",
"execa": "^6.1.0",
"fs-extra": "^10.1.0",
"get-stream": "^6.0.1",
"replace-string": "^4.0.0",
- "sinon": "^13.0.2",
- "tap": "^16.2.0",
+ "sinon": "^14.0.0",
+ "tap": "^16.3.0",
"temp-write": "^5.0.0",
- "tempy": "^2.0.0",
+ "tempy": "^3.0.0",
"touch": "^3.1.0",
- "tsd": "^0.20.0",
- "typescript": "^4.7.2",
- "xo": "^0.49.0",
+ "tsd": "^0.24.1",
+ "typescript": "^4.8.3",
+ "xo": "^0.52.3",
"zen-observable": "^0.8.15"
},
"peerDependencies": {
@@ -158,7 +158,7 @@
}
},
"volta": {
- "node": "18.3.0",
- "npm": "8.12.0"
+ "node": "18.8.0",
+ "npm": "8.18.0"
}
}
diff --git a/plugin.d.ts b/plugin.d.ts
index a2f68e179..a1524f2cc 100644
--- a/plugin.d.ts
+++ b/plugin.d.ts
@@ -1,77 +1,3 @@
-import {URL} from 'node:url';
+// For compatibility with resolution algorithms other than Node16.
-export namespace SharedWorker {
- export type ProtocolIdentifier = 'ava-4';
-
- export type FactoryOptions = {
- negotiateProtocol (supported: readonly ['ava-4']): Protocol;
- // Add overloads for additional protocols.
- };
-
- export type Factory = (options: FactoryOptions) => void;
-
- export type Protocol = {
- readonly initialData: Data;
- readonly protocol: 'ava-4';
- broadcast: (data: Data) => BroadcastMessage;
- ready: () => Protocol;
- subscribe: () => AsyncIterableIterator>;
- testWorkers: () => AsyncIterableIterator>;
- };
-
- export type BroadcastMessage = {
- readonly id: string;
- replies: () => AsyncIterableIterator>;
- };
-
- export type PublishedMessage = {
- readonly id: string;
- replies: () => AsyncIterableIterator>;
- };
-
- export type ReceivedMessage = {
- readonly data: Data;
- readonly id: string;
- readonly testWorker: TestWorker;
- reply: (data: Data) => PublishedMessage;
- };
-
- export type TestWorker = {
- readonly id: string;
- readonly file: string;
- publish: (data: Data) => PublishedMessage;
- subscribe: () => AsyncIterableIterator>;
- teardown: (fn: (() => Promise) | (() => void)) => () => Promise;
- };
-
- export namespace Plugin {
- export type RegistrationOptions = {
- readonly filename: string | URL;
- readonly initialData?: Data;
- readonly supportedProtocols: readonly Identifier[];
- readonly teardown?: () => void;
- };
-
- export type Protocol = {
- readonly available: Promise;
- readonly currentlyAvailable: boolean;
- readonly protocol: 'ava-4';
- publish: (data: Data) => PublishedMessage;
- subscribe: () => AsyncIterableIterator>;
- };
-
- export type PublishedMessage = {
- readonly id: string;
- replies: () => AsyncIterableIterator>;
- };
-
- export type ReceivedMessage = {
- readonly data: Data;
- readonly id: string;
- reply: (data: Data) => PublishedMessage;
- };
- }
-}
-
-export function registerSharedWorker(options: SharedWorker.Plugin.RegistrationOptions<'ava-4', Data>): SharedWorker.Plugin.Protocol;
-// Add overloads for additional protocols.
+export * from './entrypoints/plugin.cjs';
diff --git a/test-tap/api.js b/test-tap/api.js
index c8c96866b..0d0c271e5 100644
--- a/test-tap/api.js
+++ b/test-tap/api.js
@@ -3,7 +3,7 @@ import path from 'node:path';
import {fileURLToPath} from 'node:url';
import ciInfo from 'ci-info';
-import del from 'del';
+import {deleteSync} from 'del';
import {test} from 'tap';
import Api from '../lib/api.js';
@@ -380,7 +380,7 @@ for (const opt of options) {
});
test(`caching is enabled by default - workerThreads: ${opt.workerThreads}`, async t => {
- del.sync(path.join(__dirname, 'fixture/caching/node_modules'));
+ deleteSync(path.join(__dirname, 'fixture/caching/node_modules'));
const api = await apiCreator({
...opt,
@@ -400,7 +400,7 @@ for (const opt of options) {
});
test(`caching can be disabled - workerThreads: ${opt.workerThreads}`, async t => {
- del.sync(path.join(__dirname, 'fixture/caching/node_modules'));
+ deleteSync(path.join(__dirname, 'fixture/caching/node_modules'));
const api = await apiCreator({
...opt,
diff --git a/test-tap/assert.js b/test-tap/assert.js
index d4c0b369c..48ab73d2b 100644
--- a/test-tap/assert.js
+++ b/test-tap/assert.js
@@ -56,7 +56,7 @@ function assertFailure(t, subset) {
if (subset.values) {
t.equal(lastFailure.values.length, subset.values.length);
for (const [i, s] of lastFailure.values.entries()) {
- t.equal(s.label, subset.values[i].label);
+ t.equal(stripAnsi(s.label), subset.values[i].label);
t.match(stripAnsi(s.formatted), subset.values[i].formatted);
}
} else {
@@ -279,7 +279,7 @@ test('.is()', t => {
message: '',
raw: {actual: 'foo', expected: 'bar'},
values: [
- {label: 'Difference:', formatted: /- 'foo'\n\+ 'bar'/},
+ {label: 'Difference (- actual, + expected):', formatted: /- 'foo'\n\+ 'bar'/},
],
});
@@ -289,7 +289,7 @@ test('.is()', t => {
expected: 42,
message: '',
values: [
- {label: 'Difference:', formatted: /- 'foo'\n\+ 42/},
+ {label: 'Difference (- actual, + expected):', formatted: /- 'foo'\n\+ 42/},
],
});
@@ -297,7 +297,7 @@ test('.is()', t => {
assertion: 'is',
message: 'my message',
values: [
- {label: 'Difference:', formatted: /- 'foo'\n\+ 42/},
+ {label: 'Difference (- actual, + expected):', formatted: /- 'foo'\n\+ 42/},
],
});
@@ -305,7 +305,7 @@ test('.is()', t => {
assertion: 'is',
message: 'my message',
values: [
- {label: 'Difference:', formatted: /- 0\n\+ -0/},
+ {label: 'Difference (- actual, + expected):', formatted: /- 0\n\+ -0/},
],
});
@@ -313,7 +313,7 @@ test('.is()', t => {
assertion: 'is',
message: 'my message',
values: [
- {label: 'Difference:', formatted: /- -0\n\+ 0/},
+ {label: 'Difference (- actual, + expected):', formatted: /- -0\n\+ 0/},
],
});
@@ -535,20 +535,20 @@ test('.deepEqual()', t => {
assertion: 'deepEqual',
message: '',
raw: {actual: 'foo', expected: 'bar'},
- values: [{label: 'Difference:', formatted: /- 'foo'\n\+ 'bar'/}],
+ values: [{label: 'Difference (- actual, + expected):', formatted: /- 'foo'\n\+ 'bar'/}],
});
failsWith(t, () => assertions.deepEqual('foo', 42), {
assertion: 'deepEqual',
message: '',
raw: {actual: 'foo', expected: 42},
- values: [{label: 'Difference:', formatted: /- 'foo'\n\+ 42/}],
+ values: [{label: 'Difference (- actual, + expected):', formatted: /- 'foo'\n\+ 42/}],
});
failsWith(t, () => assertions.deepEqual('foo', 42, 'my message'), {
assertion: 'deepEqual',
message: 'my message',
- values: [{label: 'Difference:', formatted: /- 'foo'\n\+ 42/}],
+ values: [{label: 'Difference (- actual, + expected):', formatted: /- 'foo'\n\+ 42/}],
});
failsWith(t, () => assertions.deepEqual({}, {}, null), {
@@ -758,7 +758,7 @@ test('.like()', t => {
failsWith(t, () => assertions.like({a: 'foo', b: 'irrelevant'}, {a: 'bar'}), {
assertion: 'like',
message: '',
- values: [{label: 'Difference:', formatted: /{\n-\s*a: 'foo',\n\+\s*a: 'bar',\n\s*}/}],
+ values: [{label: 'Difference (- actual, + expected):', formatted: /{\n-\s*a: 'foo',\n\+\s*a: 'bar',\n\s*}/}],
});
t.end();
@@ -1429,7 +1429,7 @@ test('.snapshot()', async t => {
failsWith(t, () => assertions.snapshot({foo: 'not bar'}), {
assertion: 'snapshot',
message: 'Did not match snapshot',
- values: [{label: 'Difference:', formatted: ' {\n- foo: \'not bar\',\n+ foo: \'bar\',\n }'}],
+ values: [{label: 'Difference (- actual, + expected):', formatted: ' {\n- foo: \'not bar\',\n+ foo: \'bar\',\n }'}],
});
}
@@ -1442,7 +1442,7 @@ test('.snapshot()', async t => {
failsWith(t, () => assertions.snapshot({foo: 'not bar'}, 'my message'), {
assertion: 'snapshot',
message: 'my message',
- values: [{label: 'Difference:', formatted: ' {\n- foo: \'not bar\',\n+ foo: \'bar\',\n }'}],
+ values: [{label: 'Difference (- actual, + expected):', formatted: ' {\n- foo: \'not bar\',\n+ foo: \'bar\',\n }'}],
});
}
diff --git a/test-tap/code-excerpt.js b/test-tap/code-excerpt.js
index 57e12fa67..1e06bbd5c 100644
--- a/test-tap/code-excerpt.js
+++ b/test-tap/code-excerpt.js
@@ -22,7 +22,7 @@ test('read code excerpt', t => {
const excerpt = codeExcerpt({file, line: 2, isWithinProject: true, isDependency: false});
const expected = [
` ${chalk.grey('1:')} function a() {`,
- chalk.bgRed(' 2: alert(); '),
+ chalk.bgRed.bold(' 2: alert(); '),
` ${chalk.grey('3:')} } `,
].join('\n');
@@ -40,7 +40,7 @@ test('truncate lines', t => {
const excerpt = codeExcerpt({file, line: 2, isWithinProject: true, isDependency: false}, {maxWidth: 14});
const expected = [
` ${chalk.grey('1:')} functio…`,
- chalk.bgRed(' 2: alert…'),
+ chalk.bgRed.bold(' 2: alert…'),
` ${chalk.grey('3:')} } `,
].join('\n');
@@ -66,7 +66,7 @@ test('format line numbers', t => {
const excerpt = codeExcerpt({file, line: 10, isWithinProject: true, isDependency: false});
const expected = [
` ${chalk.grey(' 9:')} function a() {`,
- chalk.bgRed(' 10: alert(); '),
+ chalk.bgRed.bold(' 10: alert(); '),
` ${chalk.grey('11:')} } `,
].join('\n');
diff --git a/test-tap/fixture/fail-fast/multiple-files/fails.cjs b/test-tap/fixture/fail-fast/multiple-files/fails.cjs
index f405ec691..c43c6c708 100644
--- a/test-tap/fixture/fail-fast/multiple-files/fails.cjs
+++ b/test-tap/fixture/fail-fast/multiple-files/fails.cjs
@@ -1,13 +1,20 @@
const test = require('../../../../entrypoints/main.cjs');
+// Allow some time for all workers to launch.
+const grace = new Promise(resolve => {
+ setTimeout(resolve, 500);
+});
+
test('first pass', t => {
t.pass();
});
-test('second fail', t => {
+test('second fail', async t => {
+ await grace;
t.fail();
});
-test('third pass', t => {
+test('third pass', async t => {
+ await grace;
t.pass();
});
diff --git a/test-tap/fixture/fail-fast/multiple-files/passes-slow.cjs b/test-tap/fixture/fail-fast/multiple-files/passes-slow.cjs
index 97dda564c..a529c2cb3 100644
--- a/test-tap/fixture/fail-fast/multiple-files/passes-slow.cjs
+++ b/test-tap/fixture/fail-fast/multiple-files/passes-slow.cjs
@@ -6,7 +6,7 @@ test.serial('first pass', async t => {
t.pass();
const timer = setTimeout(() => {}, 60_000); // Ensure process stays alive.
const source = parentPort || process;
- const {pEvent} = await import('p-event'); // eslint-disable-line node/no-unsupported-features/es-syntax
+ const {pEvent} = await import('p-event');
await pEvent(source, 'message', message => {
if (message.ava) {
return message.ava.type === 'peer-failed';
diff --git a/test-tap/fixture/process-cwd-default.cjs b/test-tap/fixture/process-cwd-default.cjs
index 1a2bf55d7..a59bc0b87 100644
--- a/test-tap/fixture/process-cwd-default.cjs
+++ b/test-tap/fixture/process-cwd-default.cjs
@@ -3,7 +3,7 @@ const path = require('path');
const test = require('../../entrypoints/main.cjs');
test('test', async t => {
- const {packageConfigSync, packageJsonPath} = await import('pkg-conf'); // eslint-disable-line node/no-unsupported-features/es-syntax
+ const {packageConfigSync, packageJsonPath} = await import('pkg-conf');
const conf = packageConfigSync('ava');
const pkgDir = path.dirname(packageJsonPath(conf));
t.is(process.cwd(), pkgDir);
diff --git a/test-tap/fixture/snapshots/test-sourcemaps/src/feature/__tests__/test.ts b/test-tap/fixture/snapshots/test-sourcemaps/src/feature/__tests__/test.ts
index a35f134f2..859d3890d 100644
--- a/test-tap/fixture/snapshots/test-sourcemaps/src/feature/__tests__/test.ts
+++ b/test-tap/fixture/snapshots/test-sourcemaps/src/feature/__tests__/test.ts
@@ -1,4 +1,3 @@
-/* eslint-disable @typescript-eslint/no-unsafe-call */
import test from '../../../../../../../entrypoints/main.cjs';
test('feature test title', t => {
diff --git a/test-tap/fixture/snapshots/test-sourcemaps/src/test.ts b/test-tap/fixture/snapshots/test-sourcemaps/src/test.ts
index 3927a6496..17d6155d1 100644
--- a/test-tap/fixture/snapshots/test-sourcemaps/src/test.ts
+++ b/test-tap/fixture/snapshots/test-sourcemaps/src/test.ts
@@ -1,4 +1,3 @@
-/* eslint-disable @typescript-eslint/no-unsafe-call */
import test from '../../../../../entrypoints/main.cjs';
test('top level test title', t => {
diff --git a/test-tap/fixture/snapshots/test-sourcemaps/src/test/test.ts b/test-tap/fixture/snapshots/test-sourcemaps/src/test/test.ts
index b4bff440e..d265daf43 100644
--- a/test-tap/fixture/snapshots/test-sourcemaps/src/test/test.ts
+++ b/test-tap/fixture/snapshots/test-sourcemaps/src/test/test.ts
@@ -1,4 +1,3 @@
-/* eslint-disable @typescript-eslint/no-unsafe-call */
import test from '../../../../../../entrypoints/main.cjs';
test('test title', t => {
diff --git a/test-tap/fixture/with-dependencies/require-custom.cjs b/test-tap/fixture/with-dependencies/require-custom.cjs
index ccc22e9dc..6a46d7edb 100644
--- a/test-tap/fixture/with-dependencies/require-custom.cjs
+++ b/test-tap/fixture/with-dependencies/require-custom.cjs
@@ -1,2 +1,2 @@
-/* eslint-disable node/no-deprecated-api */
+/* eslint-disable n/no-deprecated-api */
require.extensions['.custom'] = require.extensions['.js'];
diff --git a/test-tap/helper/report-worker.js b/test-tap/helper/report-worker.js
index 8d1faa4fc..4c14ecd75 100644
--- a/test-tap/helper/report-worker.js
+++ b/test-tap/helper/report-worker.js
@@ -1,4 +1,4 @@
import {onlyColors} from './fix-reporter-env.js';
onlyColors();
-import('../../lib/worker/base.js'); // eslint-disable-line node/no-unsupported-features/es-syntax
+import('../../lib/worker/base.js');
diff --git a/test-tap/helper/report.js b/test-tap/helper/report.js
index 2fe159dd2..3da08b777 100644
--- a/test-tap/helper/report.js
+++ b/test-tap/helper/report.js
@@ -41,6 +41,7 @@ exports.assert = (t, logFile, buffer) => {
const cwdFileUrlPrefix = pathToFileURL(process.cwd());
exports.sanitizers = {
+ acorn: string => string.split('\n').filter(line => !/node_modules.acorn/.test(line)).join('\n'),
cwd: string => replaceString(replaceString(string, cwdFileUrlPrefix, ''), process.cwd(), '~'),
experimentalWarning: string => string.replace(/^\(node:\d+\) ExperimentalWarning.+\n/g, ''),
lineEndings: string => replaceString(string, '\r\n', '\n'),
diff --git a/test-tap/integration/snapshots.js b/test-tap/integration/snapshots.js
index ddd5b9a38..73e311db0 100644
--- a/test-tap/integration/snapshots.js
+++ b/test-tap/integration/snapshots.js
@@ -5,7 +5,7 @@ import {fileURLToPath} from 'node:url';
import {execa} from 'execa';
import {test} from 'tap';
-import tempy from 'tempy';
+import {temporaryDirectory} from 'tempy';
import {execCli} from '../helper/cli.js';
@@ -46,7 +46,7 @@ test('appends to existing snapshots', t => {
const cliPath = fileURLToPath(new URL('../../entrypoints/cli.mjs', import.meta.url));
const avaPath = fileURLToPath(new URL('../../entrypoints/main.cjs', import.meta.url));
- const cwd = tempy.directory();
+ const cwd = temporaryDirectory();
fs.writeFileSync(path.join(cwd, 'package.json'), '{}');
const initial = `const test = require(${JSON.stringify(avaPath)})
diff --git a/test-tap/reporters/default.edgecases.v12.log b/test-tap/reporters/default.edgecases.v12.log
deleted file mode 100644
index 6db3a290b..000000000
--- a/test-tap/reporters/default.edgecases.v12.log
+++ /dev/null
@@ -1,69 +0,0 @@
-
----tty-stream-chunk-separator
- [35m⚠ Could not parse ast-syntax-error.cjs for line number selection[39m
-
- [90mSyntaxError: Unexpected token (3:11)[39m
- [90m at Parser.pp$4.raise (~/node_modules/acorn/dist/acorn.js:3462:15)[39m
- [90m at Parser.pp$9.unexpected (~/node_modules/acorn/dist/acorn.js:756:10)[39m
- [90m at Parser.pp$5.parseExprAtom (~/node_modules/acorn/dist/acorn.js:2837:12)[39m
- [90m at Parser.pp$5.parseExprSubscripts (~/node_modules/acorn/dist/acorn.js:2629:21)[39m
- [90m at Parser.pp$5.parseMaybeUnary (~/node_modules/acorn/dist/acorn.js:2595:19)[39m
- [90m at Parser.pp$5.parseExprOps (~/node_modules/acorn/dist/acorn.js:2522:21)[39m
- [90m at Parser.pp$5.parseMaybeConditional (~/node_modules/acorn/dist/acorn.js:2505:21)[39m
- [90m at Parser.pp$5.parseMaybeAssign (~/node_modules/acorn/dist/acorn.js:2472:21)[39m
- [90m at Parser.pp$8.parseVar (~/node_modules/acorn/dist/acorn.js:1299:26)[39m
- [90m at Parser.pp$8.parseVarStatement (~/node_modules/acorn/dist/acorn.js:1163:10)[39m
-
----tty-stream-chunk-separator
- [1mUncaught exception in ast-syntax-error.cjs[22m
-
- ~/test-tap/fixture/report/edgecases/ast-syntax-error.cjs:3
- const fn = do {
- ^^
-
- SyntaxError: Unexpected token 'do'
-
----tty-stream-chunk-separator
- [31m✖ ast-syntax-error.cjs exited with a non-zero exit code: 1[39m
----tty-stream-chunk-separator
- [31m✖ No tests found in ava-import-no-test-declaration.cjs[39m
----tty-stream-chunk-separator
-
- [1mUncaught exception in import-and-use-test-member.cjs[22m
-
- [90mimport-and-use-test-member.cjs:3[39m
-
- [90m2:[39m
- [41m 3: test('pass', t => t.pass());[49m
- [90m4:[39m
-
- TypeError: test is not a function
-
- [90m› Object. (test-tap/fixture/report/edgecases/import-and-use-test-member.cjs:3:1)[39m
-
----tty-stream-chunk-separator
- [31m✖ import-and-use-test-member.cjs exited with a non-zero exit code: 1[39m
----tty-stream-chunk-separator
- [31m✖ No tests found in no-ava-import.cjs, make sure to import "ava" at the top of your test file[39m
----tty-stream-chunk-separator
- [31m✖ Line numbers for test.cjs did not match any tests[39m
----tty-stream-chunk-separator
-
- [1mUncaught exception in throws.cjs[22m
-
- [90mthrows.cjs:1[39m
-
- [41m 1: throw new Error('throws');[49m
- [90m2:[39m
-
- Error: throws
-
- [90m› Object. (test-tap/fixture/report/edgecases/throws.cjs:1:7)[39m
-
----tty-stream-chunk-separator
- [31m✖ throws.cjs exited with a non-zero exit code: 1[39m
----tty-stream-chunk-separator
- [90m─[39m
-
- [31m3 uncaught exceptions[39m
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/default.edgecases.v14.log b/test-tap/reporters/default.edgecases.v14.log
index 47a58d804..489c5d133 100644
--- a/test-tap/reporters/default.edgecases.v14.log
+++ b/test-tap/reporters/default.edgecases.v14.log
@@ -3,16 +3,6 @@
[35m⚠ Could not parse ast-syntax-error.cjs for line number selection[39m
[90mSyntaxError: Unexpected token (3:11)[39m
- [90m at Parser.pp$4.raise (~/node_modules/acorn/dist/acorn.js:3462:15)[39m
- [90m at Parser.pp$9.unexpected (~/node_modules/acorn/dist/acorn.js:756:10)[39m
- [90m at Parser.pp$5.parseExprAtom (~/node_modules/acorn/dist/acorn.js:2837:12)[39m
- [90m at Parser.pp$5.parseExprSubscripts (~/node_modules/acorn/dist/acorn.js:2629:21)[39m
- [90m at Parser.pp$5.parseMaybeUnary (~/node_modules/acorn/dist/acorn.js:2595:19)[39m
- [90m at Parser.pp$5.parseExprOps (~/node_modules/acorn/dist/acorn.js:2522:21)[39m
- [90m at Parser.pp$5.parseMaybeConditional (~/node_modules/acorn/dist/acorn.js:2505:21)[39m
- [90m at Parser.pp$5.parseMaybeAssign (~/node_modules/acorn/dist/acorn.js:2472:21)[39m
- [90m at Parser.pp$8.parseVar (~/node_modules/acorn/dist/acorn.js:1299:26)[39m
- [90m at Parser.pp$8.parseVarStatement (~/node_modules/acorn/dist/acorn.js:1163:10)[39m
---tty-stream-chunk-separator
[1mUncaught exception in ast-syntax-error.cjs[22m
@@ -20,9 +10,9 @@
SyntaxError: Unexpected token 'do'
---tty-stream-chunk-separator
- [31m✖ ast-syntax-error.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ ast-syntax-error.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
- [31m✖ No tests found in ava-import-no-test-declaration.cjs[39m
+ [31m✘ No tests found in ava-import-no-test-declaration.cjs[39m
---tty-stream-chunk-separator
[1mUncaught exception in import-and-use-test-member.cjs[22m
@@ -30,7 +20,7 @@
[90mimport-and-use-test-member.cjs:3[39m
[90m2:[39m
- [41m 3: test('pass', t => t.pass());[49m
+ [41m[1m 3: test('pass', t => t.pass());[22m[49m
[90m4:[39m
TypeError: test is not a function
@@ -38,18 +28,18 @@
[90m› Object. (test-tap/fixture/report/edgecases/import-and-use-test-member.cjs:3:1)[39m
---tty-stream-chunk-separator
- [31m✖ import-and-use-test-member.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ import-and-use-test-member.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
- [31m✖ No tests found in no-ava-import.cjs, make sure to import "ava" at the top of your test file[39m
+ [31m✘ No tests found in no-ava-import.cjs, make sure to import "ava" at the top of your test file[39m
---tty-stream-chunk-separator
- [31m✖ Line numbers for test.cjs did not match any tests[39m
+ [31m✘ Line numbers for test.cjs did not match any tests[39m
---tty-stream-chunk-separator
[1mUncaught exception in throws.cjs[22m
[90mthrows.cjs:1[39m
- [41m 1: throw new Error('throws');[49m
+ [41m[1m 1: throw new Error('throws');[22m[49m
[90m2:[39m
Error: throws
@@ -57,7 +47,7 @@
[90m› Object. (test-tap/fixture/report/edgecases/throws.cjs:1:7)[39m
---tty-stream-chunk-separator
- [31m✖ throws.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ throws.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
[90m─[39m
diff --git a/test-tap/reporters/default.edgecases.v16.log b/test-tap/reporters/default.edgecases.v16.log
index 47a58d804..489c5d133 100644
--- a/test-tap/reporters/default.edgecases.v16.log
+++ b/test-tap/reporters/default.edgecases.v16.log
@@ -3,16 +3,6 @@
[35m⚠ Could not parse ast-syntax-error.cjs for line number selection[39m
[90mSyntaxError: Unexpected token (3:11)[39m
- [90m at Parser.pp$4.raise (~/node_modules/acorn/dist/acorn.js:3462:15)[39m
- [90m at Parser.pp$9.unexpected (~/node_modules/acorn/dist/acorn.js:756:10)[39m
- [90m at Parser.pp$5.parseExprAtom (~/node_modules/acorn/dist/acorn.js:2837:12)[39m
- [90m at Parser.pp$5.parseExprSubscripts (~/node_modules/acorn/dist/acorn.js:2629:21)[39m
- [90m at Parser.pp$5.parseMaybeUnary (~/node_modules/acorn/dist/acorn.js:2595:19)[39m
- [90m at Parser.pp$5.parseExprOps (~/node_modules/acorn/dist/acorn.js:2522:21)[39m
- [90m at Parser.pp$5.parseMaybeConditional (~/node_modules/acorn/dist/acorn.js:2505:21)[39m
- [90m at Parser.pp$5.parseMaybeAssign (~/node_modules/acorn/dist/acorn.js:2472:21)[39m
- [90m at Parser.pp$8.parseVar (~/node_modules/acorn/dist/acorn.js:1299:26)[39m
- [90m at Parser.pp$8.parseVarStatement (~/node_modules/acorn/dist/acorn.js:1163:10)[39m
---tty-stream-chunk-separator
[1mUncaught exception in ast-syntax-error.cjs[22m
@@ -20,9 +10,9 @@
SyntaxError: Unexpected token 'do'
---tty-stream-chunk-separator
- [31m✖ ast-syntax-error.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ ast-syntax-error.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
- [31m✖ No tests found in ava-import-no-test-declaration.cjs[39m
+ [31m✘ No tests found in ava-import-no-test-declaration.cjs[39m
---tty-stream-chunk-separator
[1mUncaught exception in import-and-use-test-member.cjs[22m
@@ -30,7 +20,7 @@
[90mimport-and-use-test-member.cjs:3[39m
[90m2:[39m
- [41m 3: test('pass', t => t.pass());[49m
+ [41m[1m 3: test('pass', t => t.pass());[22m[49m
[90m4:[39m
TypeError: test is not a function
@@ -38,18 +28,18 @@
[90m› Object. (test-tap/fixture/report/edgecases/import-and-use-test-member.cjs:3:1)[39m
---tty-stream-chunk-separator
- [31m✖ import-and-use-test-member.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ import-and-use-test-member.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
- [31m✖ No tests found in no-ava-import.cjs, make sure to import "ava" at the top of your test file[39m
+ [31m✘ No tests found in no-ava-import.cjs, make sure to import "ava" at the top of your test file[39m
---tty-stream-chunk-separator
- [31m✖ Line numbers for test.cjs did not match any tests[39m
+ [31m✘ Line numbers for test.cjs did not match any tests[39m
---tty-stream-chunk-separator
[1mUncaught exception in throws.cjs[22m
[90mthrows.cjs:1[39m
- [41m 1: throw new Error('throws');[49m
+ [41m[1m 1: throw new Error('throws');[22m[49m
[90m2:[39m
Error: throws
@@ -57,7 +47,7 @@
[90m› Object. (test-tap/fixture/report/edgecases/throws.cjs:1:7)[39m
---tty-stream-chunk-separator
- [31m✖ throws.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ throws.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
[90m─[39m
diff --git a/test-tap/reporters/default.edgecases.v18.log b/test-tap/reporters/default.edgecases.v18.log
index 83bd6a2aa..b3c1b8057 100644
--- a/test-tap/reporters/default.edgecases.v18.log
+++ b/test-tap/reporters/default.edgecases.v18.log
@@ -3,26 +3,20 @@
[35m⚠ Could not parse ast-syntax-error.cjs for line number selection[39m
[90mSyntaxError: Unexpected token (3:11)[39m
- [90m at pp$4.raise (~/node_modules/acorn/dist/acorn.js:3462:15)[39m
- [90m at pp$9.unexpected (~/node_modules/acorn/dist/acorn.js:756:10)[39m
- [90m at pp$5.parseExprAtom (~/node_modules/acorn/dist/acorn.js:2837:12)[39m
- [90m at pp$5.parseExprSubscripts (~/node_modules/acorn/dist/acorn.js:2629:21)[39m
- [90m at pp$5.parseMaybeUnary (~/node_modules/acorn/dist/acorn.js:2595:19)[39m
- [90m at pp$5.parseExprOps (~/node_modules/acorn/dist/acorn.js:2522:21)[39m
- [90m at pp$5.parseMaybeConditional (~/node_modules/acorn/dist/acorn.js:2505:21)[39m
- [90m at pp$5.parseMaybeAssign (~/node_modules/acorn/dist/acorn.js:2472:21)[39m
- [90m at pp$8.parseVar (~/node_modules/acorn/dist/acorn.js:1299:26)[39m
- [90m at pp$8.parseVarStatement (~/node_modules/acorn/dist/acorn.js:1163:10)[39m
---tty-stream-chunk-separator
[1mUncaught exception in ast-syntax-error.cjs[22m
+ ~/test-tap/fixture/report/edgecases/ast-syntax-error.cjs:3
+ const fn = do {
+ ^^
+
SyntaxError: Unexpected token 'do'
---tty-stream-chunk-separator
- [31m✖ ast-syntax-error.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ ast-syntax-error.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
- [31m✖ No tests found in ava-import-no-test-declaration.cjs[39m
+ [31m✘ No tests found in ava-import-no-test-declaration.cjs[39m
---tty-stream-chunk-separator
[1mUncaught exception in import-and-use-test-member.cjs[22m
@@ -30,7 +24,7 @@
[90mimport-and-use-test-member.cjs:3[39m
[90m2:[39m
- [41m 3: test('pass', t => t.pass());[49m
+ [41m[1m 3: test('pass', t => t.pass());[22m[49m
[90m4:[39m
TypeError: test is not a function
@@ -38,18 +32,18 @@
[90m› Object. (test-tap/fixture/report/edgecases/import-and-use-test-member.cjs:3:1)[39m
---tty-stream-chunk-separator
- [31m✖ import-and-use-test-member.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ import-and-use-test-member.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
- [31m✖ No tests found in no-ava-import.cjs, make sure to import "ava" at the top of your test file[39m
+ [31m✘ No tests found in no-ava-import.cjs, make sure to import "ava" at the top of your test file[39m
---tty-stream-chunk-separator
- [31m✖ Line numbers for test.cjs did not match any tests[39m
+ [31m✘ Line numbers for test.cjs did not match any tests[39m
---tty-stream-chunk-separator
[1mUncaught exception in throws.cjs[22m
[90mthrows.cjs:1[39m
- [41m 1: throw new Error('throws');[49m
+ [41m[1m 1: throw new Error('throws');[22m[49m
[90m2:[39m
Error: throws
@@ -57,7 +51,7 @@
[90m› Object. (test-tap/fixture/report/edgecases/throws.cjs:1:7)[39m
---tty-stream-chunk-separator
- [31m✖ throws.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ throws.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
[90m─[39m
diff --git a/test-tap/reporters/default.failfast.v12.log b/test-tap/reporters/default.failfast.v12.log
deleted file mode 100644
index 831e81f6c..000000000
--- a/test-tap/reporters/default.failfast.v12.log
+++ /dev/null
@@ -1,24 +0,0 @@
-
----tty-stream-chunk-separator
- [31m✖[39m a [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
----tty-stream-chunk-separator
- [90m─[39m
-
- [1ma [90m[2m›[22m[1m[39m fails[22m
-
- [90ma.cjs:3[39m
-
- [90m2:[39m
- [41m 3: test('fails', t => t.fail());[49m
- [90m4:[39m
-
- Test failed via `t.fail()`
-
- [90m› test-tap/fixture/report/failfast/a.cjs:3:22[39m
-
- [90m─[39m
-
- [35m`--fail-fast` is on. 1 test file was skipped.[39m
-
- [31m1 test failed[39m
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/default.failfast.v14.log b/test-tap/reporters/default.failfast.v14.log
index 831e81f6c..1822d26dd 100644
--- a/test-tap/reporters/default.failfast.v14.log
+++ b/test-tap/reporters/default.failfast.v14.log
@@ -1,6 +1,6 @@
---tty-stream-chunk-separator
- [31m✖[39m a [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m a [90m[2m›[22m[39m fails [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
[90m─[39m
@@ -9,7 +9,7 @@
[90ma.cjs:3[39m
[90m2:[39m
- [41m 3: test('fails', t => t.fail());[49m
+ [41m[1m 3: test('fails', t => t.fail());[22m[49m
[90m4:[39m
Test failed via `t.fail()`
diff --git a/test-tap/reporters/default.failfast.v16.log b/test-tap/reporters/default.failfast.v16.log
index 831e81f6c..1822d26dd 100644
--- a/test-tap/reporters/default.failfast.v16.log
+++ b/test-tap/reporters/default.failfast.v16.log
@@ -1,6 +1,6 @@
---tty-stream-chunk-separator
- [31m✖[39m a [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m a [90m[2m›[22m[39m fails [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
[90m─[39m
@@ -9,7 +9,7 @@
[90ma.cjs:3[39m
[90m2:[39m
- [41m 3: test('fails', t => t.fail());[49m
+ [41m[1m 3: test('fails', t => t.fail());[22m[49m
[90m4:[39m
Test failed via `t.fail()`
diff --git a/test-tap/reporters/default.failfast.v18.log b/test-tap/reporters/default.failfast.v18.log
index 831e81f6c..1822d26dd 100644
--- a/test-tap/reporters/default.failfast.v18.log
+++ b/test-tap/reporters/default.failfast.v18.log
@@ -1,6 +1,6 @@
---tty-stream-chunk-separator
- [31m✖[39m a [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m a [90m[2m›[22m[39m fails [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
[90m─[39m
@@ -9,7 +9,7 @@
[90ma.cjs:3[39m
[90m2:[39m
- [41m 3: test('fails', t => t.fail());[49m
+ [41m[1m 3: test('fails', t => t.fail());[22m[49m
[90m4:[39m
Test failed via `t.fail()`
diff --git a/test-tap/reporters/default.failfast2.v12.log b/test-tap/reporters/default.failfast2.v12.log
deleted file mode 100644
index 22d9cd398..000000000
--- a/test-tap/reporters/default.failfast2.v12.log
+++ /dev/null
@@ -1,24 +0,0 @@
-
----tty-stream-chunk-separator
- [31m✖[39m a [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
----tty-stream-chunk-separator
- [90m─[39m
-
- [1ma [90m[2m›[22m[1m[39m fails[22m
-
- [90ma.cjs:3[39m
-
- [90m2:[39m
- [41m 3: test('fails', t => t.fail()); [49m
- [90m4:[39m test('passes', t => t.pass());
-
- Test failed via `t.fail()`
-
- [90m› test-tap/fixture/report/failfast2/a.cjs:3:22[39m
-
- [90m─[39m
-
- [35m`--fail-fast` is on. At least 1 test was skipped, as well as 1 test file.[39m
-
- [31m1 test failed[39m
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/default.failfast2.v14.log b/test-tap/reporters/default.failfast2.v14.log
index 22d9cd398..29437d029 100644
--- a/test-tap/reporters/default.failfast2.v14.log
+++ b/test-tap/reporters/default.failfast2.v14.log
@@ -1,6 +1,6 @@
---tty-stream-chunk-separator
- [31m✖[39m a [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m a [90m[2m›[22m[39m fails [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
[90m─[39m
@@ -9,7 +9,7 @@
[90ma.cjs:3[39m
[90m2:[39m
- [41m 3: test('fails', t => t.fail()); [49m
+ [41m[1m 3: test('fails', t => t.fail()); [22m[49m
[90m4:[39m test('passes', t => t.pass());
Test failed via `t.fail()`
diff --git a/test-tap/reporters/default.failfast2.v16.log b/test-tap/reporters/default.failfast2.v16.log
index 22d9cd398..29437d029 100644
--- a/test-tap/reporters/default.failfast2.v16.log
+++ b/test-tap/reporters/default.failfast2.v16.log
@@ -1,6 +1,6 @@
---tty-stream-chunk-separator
- [31m✖[39m a [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m a [90m[2m›[22m[39m fails [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
[90m─[39m
@@ -9,7 +9,7 @@
[90ma.cjs:3[39m
[90m2:[39m
- [41m 3: test('fails', t => t.fail()); [49m
+ [41m[1m 3: test('fails', t => t.fail()); [22m[49m
[90m4:[39m test('passes', t => t.pass());
Test failed via `t.fail()`
diff --git a/test-tap/reporters/default.failfast2.v18.log b/test-tap/reporters/default.failfast2.v18.log
index 22d9cd398..29437d029 100644
--- a/test-tap/reporters/default.failfast2.v18.log
+++ b/test-tap/reporters/default.failfast2.v18.log
@@ -1,6 +1,6 @@
---tty-stream-chunk-separator
- [31m✖[39m a [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m a [90m[2m›[22m[39m fails [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
[90m─[39m
@@ -9,7 +9,7 @@
[90ma.cjs:3[39m
[90m2:[39m
- [41m 3: test('fails', t => t.fail()); [49m
+ [41m[1m 3: test('fails', t => t.fail()); [22m[49m
[90m4:[39m test('passes', t => t.pass());
Test failed via `t.fail()`
diff --git a/test-tap/reporters/default.js b/test-tap/reporters/default.js
index 2d9859473..3ab81d01d 100644
--- a/test-tap/reporters/default.js
+++ b/test-tap/reporters/default.js
@@ -9,7 +9,7 @@ import TTYStream from '../helper/tty-stream.js';
const {restoreClock} = fixReporterEnv();
test(async t => {
- const {default: Reporter} = await import('../../lib/reporters/default.js'); // eslint-disable-line node/no-unsupported-features/es-syntax
+ const {default: Reporter} = await import('../../lib/reporters/default.js');
const run = (type, sanitizers = []) => t => {
t.plan(1);
@@ -43,7 +43,7 @@ test(async t => {
t.test('default reporter - second failFast run', run('failFast2'));
t.test('default reporter - only run', run('only'));
t.test('default reporter - watch mode run', run('watch'));
- t.test('default reporter - edge cases', run('edgeCases'));
+ t.test('default reporter - edge cases', run('edgeCases', [report.sanitizers.acorn]));
t.test('default reporter - timeout', t => {
restoreClock();
diff --git a/test-tap/reporters/default.only.v12.log b/test-tap/reporters/default.only.v12.log
deleted file mode 100644
index f01706e56..000000000
--- a/test-tap/reporters/default.only.v12.log
+++ /dev/null
@@ -1,10 +0,0 @@
-
----tty-stream-chunk-separator
- [32m✔[39m a [90m[2m›[22m[39m only
----tty-stream-chunk-separator
- [32m✔[39m b [90m[2m›[22m[39m passes
----tty-stream-chunk-separator
- [90m─[39m
-
- [32m2 tests passed[39m
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/default.regular.v12.log b/test-tap/reporters/default.regular.v12.log
deleted file mode 100644
index aafc12bfb..000000000
--- a/test-tap/reporters/default.regular.v12.log
+++ /dev/null
@@ -1,357 +0,0 @@
-
----tty-stream-chunk-separator
- [1mUncaught exception in bad-test-chain.cjs[22m
-
- [90mbad-test-chain.cjs:3[39m
-
- [90m2:[39m
- [41m 3: test.serial.test('passes', t => t.pass());[49m
- [90m4:[39m
-
- TypeError: test.serial.test is not a function
-
- [90m› Object. (test-tap/fixture/report/regular/bad-test-chain.cjs:3:13)[39m
-
----tty-stream-chunk-separator
- [31m✖ bad-test-chain.cjs exited with a non-zero exit code: 1[39m
----tty-stream-chunk-separator
- [31m✖[39m nested-objects [90m[2m›[22m[39m format with max depth 4
----tty-stream-chunk-separator
- [31m✖[39m nested-objects [90m[2m›[22m[39m format like with max depth 4
----tty-stream-chunk-separator
- output-in-hook [90m[2m›[22m[39m before hook
- [35mℹ[39m [90mbefore[39m
----tty-stream-chunk-separator
- output-in-hook [90m[2m›[22m[39m beforeEach hook for passing test
- [35mℹ[39m [90mbeforeEach[39m
----tty-stream-chunk-separator
- output-in-hook [90m[2m›[22m[39m beforeEach hook for failing test
- [35mℹ[39m [90mbeforeEach[39m
----tty-stream-chunk-separator
- [32m✔[39m output-in-hook [90m[2m›[22m[39m passing test
----tty-stream-chunk-separator
- [31m✖[39m output-in-hook [90m[2m›[22m[39m failing test [31mTest failed via `t.fail()`[39m
----tty-stream-chunk-separator
- output-in-hook [90m[2m›[22m[39m afterEach hook for passing test
- [35mℹ[39m [90mafterEach[39m
----tty-stream-chunk-separator
- output-in-hook [90m[2m›[22m[39m afterEach.always hook for failing test
- [35mℹ[39m [90mafterEachAlways[39m
----tty-stream-chunk-separator
- output-in-hook [90m[2m›[22m[39m afterEach.always hook for passing test
- [35mℹ[39m [90mafterEachAlways[39m
----tty-stream-chunk-separator
- output-in-hook [90m[2m›[22m[39m cleanup
- [35mℹ[39m [90mafterAlways[39m
----tty-stream-chunk-separator
- [33m- test [90m[2m›[22m[39m[33m skip[39m
----tty-stream-chunk-separator
- [34m- test [90m[2m›[22m[39m[34m todo[39m
----tty-stream-chunk-separator
- [32m✔[39m test [90m[2m›[22m[39m passes
----tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
----tty-stream-chunk-separator
- [31m✔[39m [31mtest [90m[2m›[22m[39m[31m known failure[39m
----tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m no longer failing [31mTest was expected to fail, but succeeded, you should stop marking the test as failing[39m
----tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m logs [31mTest failed via `t.fail()`[39m
- [35mℹ[39m [90mhello[39m
- [35mℹ[39m [90mworld[39m
----tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m formatted
----tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m implementation throws non-error [31mError thrown in test[39m
----tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throws
----tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m notThrows
----tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m notThrowsAsync
----tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync
----tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync different error
----tty-stream-chunk-separator
- [32m✔[39m uncaught-exception [90m[2m›[22m[39m passes
----tty-stream-chunk-separator
-
- [1mUncaught exception in uncaught-exception.cjs[22m
-
- [90muncaught-exception.cjs:5[39m
-
- [90m4:[39m setImmediate(() => {
- [41m 5: throw new Error('Can’t catch me');[49m
- [90m6:[39m });
-
- Error: Can’t catch me
-
- [90m› Immediate. (test-tap/fixture/report/regular/uncaught-exception.cjs:5:9)[39m
-
----tty-stream-chunk-separator
- [31m✖ uncaught-exception.cjs exited with a non-zero exit code: 1[39m
----tty-stream-chunk-separator
- [32m✔[39m unhandled-rejection [90m[2m›[22m[39m passes
----tty-stream-chunk-separator
- [32m✔[39m unhandled-rejection [90m[2m›[22m[39m unhandled non-error rejection
----tty-stream-chunk-separator
-
- [1mUnhandled rejection in unhandled-rejection.cjs[22m
-
- [90munhandled-rejection.cjs:4[39m
-
- [90m3:[39m const passes = t => {
- [41m 4: Promise.reject(new Error('Can’t catch me'));[49m
- [90m5:[39m t.pass();
-
- Error: Can’t catch me
-
- [90m› passes (test-tap/fixture/report/regular/unhandled-rejection.cjs:4:17)[39m
-
----tty-stream-chunk-separator
- [1mUnhandled rejection in unhandled-rejection.cjs[22m
-
- [33mnull[39m
-
----tty-stream-chunk-separator
- [90m─[39m
-
- [1mnested-objects [90m[2m›[22m[1m[39m format with max depth 4[22m
-
- [90mnested-objects.cjs:29[39m
-
- [90m28:[39m };
- [41m 29: t.deepEqual(exp, act);[49m
- [90m30:[39m });
-
- Difference:
-
- [90m{[39m
- a: [90m{[39m
- b: [90m{[39m
- foo: [34m'[39m[34mbar[39m[34m'[39m[90m,[39m
- [90m}[39m[90m,[39m
- [90m}[39m[90m,[39m
- [32m+[39m c: [90m{[39m
- [32m+[39m d: [90m{[39m
- [32m+[39m e: [90m{[39m
- [32m+[39m foo: [34m'[39m[34mbar[39m[34m'[39m[90m,[39m
- [32m+[39m [90m}[39m[90m,[39m
- [32m+[39m [90m}[39m[90m,[39m
- [32m+[39m [90m}[39m[90m,[39m
- [90m}[39m
-
- [90m› test-tap/fixture/report/regular/nested-objects.cjs:29:4[39m
-
-
-
- [1mnested-objects [90m[2m›[22m[1m[39m format like with max depth 4[22m
-
- [90mnested-objects.cjs:55[39m
-
- [90m54:[39m };
- [41m 55: t.like(actual, pattern);[49m
- [90m56:[39m });
-
- Difference:
-
- [90m{[39m
- a: [90m{[39m
- b: [90m{[39m
- [31m-[39m foo: [34m'[39m[31mbar[39m[34m'[39m[90m,[39m
- [32m+[39m foo: [34m'[39m[32mqux[39m[34m'[39m[90m,[39m
- [90m}[39m[90m,[39m
- [90m}[39m[90m,[39m
- [90m}[39m
-
- [90m› test-tap/fixture/report/regular/nested-objects.cjs:55:4[39m
-
-
-
- [1moutput-in-hook [90m[2m›[22m[1m[39m failing test[22m
-
- [90moutput-in-hook.cjs:34[39m
-
- [90m33:[39m test('failing test', t => {
- [41m 34: t.fail(); [49m
- [90m35:[39m });
-
- Test failed via `t.fail()`
-
- [90m› test-tap/fixture/report/regular/output-in-hook.cjs:34:4[39m
-
-
-
- [1mtest [90m[2m›[22m[1m[39m fails[22m
-
- [90mtest.cjs:9[39m
-
- [90m8:[39m
- [41m 9: test('fails', t => t.fail());[49m
- [90m10:[39m
-
- Test failed via `t.fail()`
-
- [90m› test-tap/fixture/report/regular/test.cjs:9:22[39m
-
-
-
- [1mtest [90m[2m›[22m[1m[39m no longer failing[22m
-
- Error: Test was expected to fail, but succeeded, you should stop marking the test as failing
-
-
-
- [1mtest [90m[2m›[22m[1m[39m logs[22m
- [90mtest.cjs:18[39m
-
- [90m17:[39m t.log('world');
- [41m 18: t.fail(); [49m
- [90m19:[39m });
-
- Test failed via `t.fail()`
-
- [90m› test-tap/fixture/report/regular/test.cjs:18:4[39m
-
-
-
- [1mtest [90m[2m›[22m[1m[39m formatted[22m
-
- [90mtest.cjs:22[39m
-
- [90m21:[39m test('formatted', t => {
- [41m 22: t.deepEqual('foo', 'bar');[49m
- [90m23:[39m });
-
- Difference:
-
- [31m-[39m [34m'[39m[31mfoo[39m[34m'[39m
- [32m+[39m [34m'[39m[32mbar[39m[34m'[39m
-
- [90m› test-tap/fixture/report/regular/test.cjs:22:4[39m
-
-
-
- [1mtest [90m[2m›[22m[1m[39m implementation throws non-error[22m
-
- Error thrown in test:
-
- [33mnull[39m
-
-
-
- [1mtraces-in-t-throws [90m[2m›[22m[1m[39m throws[22m
-
- [90mtraces-in-t-throws.cjs:12[39m
-
- [90m11:[39m test('throws', t => {
- [41m 12: t.throws(() => throwError(), {instanceOf: TypeError});[49m
- [90m13:[39m });
-
- Function threw unexpected exception:
-
- [35mError[39m [90m{[39m
- message: [34m'[39m[34muh-oh[39m[34m'[39m[90m,[39m
- [90m}[39m
-
- Expected instance of:
-
- [35mFunction[39m [34mTypeError[39m [90m{[39m[90m}[39m
-
- [90m› throwError (test-tap/fixture/report/regular/traces-in-t-throws.cjs:4:8)[39m
- [90m› t.throws.instanceOf (test-tap/fixture/report/regular/traces-in-t-throws.cjs:12:17)[39m
- [90m› test-tap/fixture/report/regular/traces-in-t-throws.cjs:12:4[39m
-
-
-
- [1mtraces-in-t-throws [90m[2m›[22m[1m[39m notThrows[22m
-
- [90mtraces-in-t-throws.cjs:16[39m
-
- [90m15:[39m test('notThrows', t => {
- [41m 16: t.notThrows(() => throwError());[49m
- [90m17:[39m });
-
- Function threw:
-
- [35mError[39m [90m{[39m
- message: [34m'[39m[34muh-oh[39m[34m'[39m[90m,[39m
- [90m}[39m
-
- [90m› throwError (test-tap/fixture/report/regular/traces-in-t-throws.cjs:4:8)[39m
- [90m› test-tap/fixture/report/regular/traces-in-t-throws.cjs:16:20[39m
- [90m› test-tap/fixture/report/regular/traces-in-t-throws.cjs:16:4[39m
-
-
-
- [1mtraces-in-t-throws [90m[2m›[22m[1m[39m notThrowsAsync[22m
-
- [90mtraces-in-t-throws.cjs:20[39m
-
- [90m19:[39m test('notThrowsAsync', t => {
- [41m 20: t.notThrowsAsync(() => throwError());[49m
- [90m21:[39m });
-
- Function threw:
-
- [35mError[39m [90m{[39m
- message: [34m'[39m[34muh-oh[39m[34m'[39m[90m,[39m
- [90m}[39m
-
- [90m› throwError (test-tap/fixture/report/regular/traces-in-t-throws.cjs:4:8)[39m
- [90m› test-tap/fixture/report/regular/traces-in-t-throws.cjs:20:25[39m
- [90m› test-tap/fixture/report/regular/traces-in-t-throws.cjs:20:4[39m
-
-
-
- [1mtraces-in-t-throws [90m[2m›[22m[1m[39m throwsAsync[22m
-
- [90mtraces-in-t-throws.cjs:24[39m
-
- [90m23:[39m test('throwsAsync', t => {
- [41m 24: t.throwsAsync(() => throwError(), {instanceOf: TypeError});[49m
- [90m25:[39m });
-
- Function threw synchronously. Use `t.throws()` instead:
-
- [35mError[39m [90m{[39m
- message: [34m'[39m[34muh-oh[39m[34m'[39m[90m,[39m
- [90m}[39m
-
- [90m› throwError (test-tap/fixture/report/regular/traces-in-t-throws.cjs:4:8)[39m
- [90m› t.throwsAsync.instanceOf (test-tap/fixture/report/regular/traces-in-t-throws.cjs:24:22)[39m
- [90m› test-tap/fixture/report/regular/traces-in-t-throws.cjs:24:4[39m
-
-
-
- [1mtraces-in-t-throws [90m[2m›[22m[1m[39m throwsAsync different error[22m
-
- [90mtraces-in-t-throws.cjs:27[39m
-
- [90m26:[39m
- [41m 27: test('throwsAsync different error', t => t.throwsAsync(returnRejectedPromise, {instanceOf: TypeError}));[49m
- [90m28:[39m
-
- Returned promise rejected with unexpected exception:
-
- [35mError[39m [90m{[39m
- message: [34m'[39m[34muh-oh[39m[34m'[39m[90m,[39m
- [90m}[39m
-
- Expected instance of:
-
- [35mFunction[39m [34mTypeError[39m [90m{[39m[90m}[39m
-
- [90m› returnRejectedPromise (test-tap/fixture/report/regular/traces-in-t-throws.cjs:8:24)[39m
- [90m› test-tap/fixture/report/regular/traces-in-t-throws.cjs:27:44[39m
-
- [90m─[39m
-
- [31m13 tests failed[39m
- [31m1 known failure[39m
- [33m1 test skipped[39m
- [34m1 test todo[39m
- [31m2 unhandled rejections[39m
- [31m2 uncaught exceptions[39m
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/default.regular.v14.log b/test-tap/reporters/default.regular.v14.log
index aafc12bfb..9b9a969d3 100644
--- a/test-tap/reporters/default.regular.v14.log
+++ b/test-tap/reporters/default.regular.v14.log
@@ -5,7 +5,7 @@
[90mbad-test-chain.cjs:3[39m
[90m2:[39m
- [41m 3: test.serial.test('passes', t => t.pass());[49m
+ [41m[1m 3: test.serial.test('passes', t => t.pass());[22m[49m
[90m4:[39m
TypeError: test.serial.test is not a function
@@ -13,11 +13,11 @@
[90m› Object. (test-tap/fixture/report/regular/bad-test-chain.cjs:3:13)[39m
---tty-stream-chunk-separator
- [31m✖ bad-test-chain.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ bad-test-chain.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
- [31m✖[39m nested-objects [90m[2m›[22m[39m format with max depth 4
+ [31m✘ [fail]:[39m nested-objects [90m[2m›[22m[39m format with max depth 4
---tty-stream-chunk-separator
- [31m✖[39m nested-objects [90m[2m›[22m[39m format like with max depth 4
+ [31m✘ [fail]:[39m nested-objects [90m[2m›[22m[39m format like with max depth 4
---tty-stream-chunk-separator
output-in-hook [90m[2m›[22m[39m before hook
[35mℹ[39m [90mbefore[39m
@@ -30,7 +30,7 @@
---tty-stream-chunk-separator
[32m✔[39m output-in-hook [90m[2m›[22m[39m passing test
---tty-stream-chunk-separator
- [31m✖[39m output-in-hook [90m[2m›[22m[39m failing test [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m output-in-hook [90m[2m›[22m[39m failing test [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
output-in-hook [90m[2m›[22m[39m afterEach hook for passing test
[35mℹ[39m [90mafterEach[39m
@@ -44,35 +44,35 @@
output-in-hook [90m[2m›[22m[39m cleanup
[35mℹ[39m [90mafterAlways[39m
---tty-stream-chunk-separator
- [33m- test [90m[2m›[22m[39m[33m skip[39m
+ [33m- [skip] test [90m[2m›[22m[39m[33m skip[39m
---tty-stream-chunk-separator
- [34m- test [90m[2m›[22m[39m[34m todo[39m
+ [34m- [todo] test [90m[2m›[22m[39m[34m todo[39m
---tty-stream-chunk-separator
[32m✔[39m test [90m[2m›[22m[39m passes
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m fails [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
- [31m✔[39m [31mtest [90m[2m›[22m[39m[31m known failure[39m
+ [31m✔ [expected fail][39m test [90m[2m›[22m[39m known failure
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m no longer failing [31mTest was expected to fail, but succeeded, you should stop marking the test as failing[39m
+ [31m✘ [unexpected pass]:[39m test [90m[2m›[22m[39m no longer failing [3m[31mTest was expected to fail, but succeeded, you should stop marking the test as failing[39m[23m
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m logs [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m logs [3m[31mTest failed via `t.fail()`[39m[23m
[35mℹ[39m [90mhello[39m
[35mℹ[39m [90mworld[39m
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m formatted
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m formatted
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m implementation throws non-error [31mError thrown in test[39m
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m implementation throws non-error [3m[31mError thrown in test[39m[23m
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throws
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m throws
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m notThrows
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m notThrows
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m notThrowsAsync
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m notThrowsAsync
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync different error
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync different error
---tty-stream-chunk-separator
[32m✔[39m uncaught-exception [90m[2m›[22m[39m passes
---tty-stream-chunk-separator
@@ -82,7 +82,7 @@
[90muncaught-exception.cjs:5[39m
[90m4:[39m setImmediate(() => {
- [41m 5: throw new Error('Can’t catch me');[49m
+ [41m[1m 5: throw new Error('Can’t catch me');[22m[49m
[90m6:[39m });
Error: Can’t catch me
@@ -90,7 +90,7 @@
[90m› Immediate. (test-tap/fixture/report/regular/uncaught-exception.cjs:5:9)[39m
---tty-stream-chunk-separator
- [31m✖ uncaught-exception.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ uncaught-exception.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
[32m✔[39m unhandled-rejection [90m[2m›[22m[39m passes
---tty-stream-chunk-separator
@@ -102,7 +102,7 @@
[90munhandled-rejection.cjs:4[39m
[90m3:[39m const passes = t => {
- [41m 4: Promise.reject(new Error('Can’t catch me'));[49m
+ [41m[1m 4: Promise.reject(new Error('Can’t catch me'));[22m[49m
[90m5:[39m t.pass();
Error: Can’t catch me
@@ -122,10 +122,10 @@
[90mnested-objects.cjs:29[39m
[90m28:[39m };
- [41m 29: t.deepEqual(exp, act);[49m
+ [41m[1m 29: t.deepEqual(exp, act);[22m[49m
[90m30:[39m });
- Difference:
+ Difference ([31m-[39m [31mactual[39m, [32m+[39m [32mexpected[39m):
[90m{[39m
a: [90m{[39m
@@ -151,10 +151,10 @@
[90mnested-objects.cjs:55[39m
[90m54:[39m };
- [41m 55: t.like(actual, pattern);[49m
+ [41m[1m 55: t.like(actual, pattern);[22m[49m
[90m56:[39m });
- Difference:
+ Difference ([31m-[39m [31mactual[39m, [32m+[39m [32mexpected[39m):
[90m{[39m
a: [90m{[39m
@@ -174,7 +174,7 @@
[90moutput-in-hook.cjs:34[39m
[90m33:[39m test('failing test', t => {
- [41m 34: t.fail(); [49m
+ [41m[1m 34: t.fail(); [22m[49m
[90m35:[39m });
Test failed via `t.fail()`
@@ -188,7 +188,7 @@
[90mtest.cjs:9[39m
[90m8:[39m
- [41m 9: test('fails', t => t.fail());[49m
+ [41m[1m 9: test('fails', t => t.fail());[22m[49m
[90m10:[39m
Test failed via `t.fail()`
@@ -207,7 +207,7 @@
[90mtest.cjs:18[39m
[90m17:[39m t.log('world');
- [41m 18: t.fail(); [49m
+ [41m[1m 18: t.fail(); [22m[49m
[90m19:[39m });
Test failed via `t.fail()`
@@ -221,10 +221,10 @@
[90mtest.cjs:22[39m
[90m21:[39m test('formatted', t => {
- [41m 22: t.deepEqual('foo', 'bar');[49m
+ [41m[1m 22: t.deepEqual('foo', 'bar');[22m[49m
[90m23:[39m });
- Difference:
+ Difference ([31m-[39m [31mactual[39m, [32m+[39m [32mexpected[39m):
[31m-[39m [34m'[39m[31mfoo[39m[34m'[39m
[32m+[39m [34m'[39m[32mbar[39m[34m'[39m
@@ -246,7 +246,7 @@
[90mtraces-in-t-throws.cjs:12[39m
[90m11:[39m test('throws', t => {
- [41m 12: t.throws(() => throwError(), {instanceOf: TypeError});[49m
+ [41m[1m 12: t.throws(() => throwError(), {instanceOf: TypeError});[22m[49m
[90m13:[39m });
Function threw unexpected exception:
@@ -270,7 +270,7 @@
[90mtraces-in-t-throws.cjs:16[39m
[90m15:[39m test('notThrows', t => {
- [41m 16: t.notThrows(() => throwError());[49m
+ [41m[1m 16: t.notThrows(() => throwError());[22m[49m
[90m17:[39m });
Function threw:
@@ -290,7 +290,7 @@
[90mtraces-in-t-throws.cjs:20[39m
[90m19:[39m test('notThrowsAsync', t => {
- [41m 20: t.notThrowsAsync(() => throwError());[49m
+ [41m[1m 20: t.notThrowsAsync(() => throwError());[22m[49m
[90m21:[39m });
Function threw:
@@ -310,7 +310,7 @@
[90mtraces-in-t-throws.cjs:24[39m
[90m23:[39m test('throwsAsync', t => {
- [41m 24: t.throwsAsync(() => throwError(), {instanceOf: TypeError});[49m
+ [41m[1m 24: t.throwsAsync(() => throwError(), {instanceOf: TypeError});[22m[49m
[90m25:[39m });
Function threw synchronously. Use `t.throws()` instead:
@@ -330,7 +330,7 @@
[90mtraces-in-t-throws.cjs:27[39m
[90m26:[39m
- [41m 27: test('throwsAsync different error', t => t.throwsAsync(returnRejectedPromise, {instanceOf: TypeError}));[49m
+ [41m[1m 27: test('throwsAsync different error', t => t.throwsAsync(returnRejectedPromise, {instanceOf: TypeError}));[22m[49m
[90m28:[39m
Returned promise rejected with unexpected exception:
diff --git a/test-tap/reporters/default.regular.v16.log b/test-tap/reporters/default.regular.v16.log
index aafc12bfb..9b9a969d3 100644
--- a/test-tap/reporters/default.regular.v16.log
+++ b/test-tap/reporters/default.regular.v16.log
@@ -5,7 +5,7 @@
[90mbad-test-chain.cjs:3[39m
[90m2:[39m
- [41m 3: test.serial.test('passes', t => t.pass());[49m
+ [41m[1m 3: test.serial.test('passes', t => t.pass());[22m[49m
[90m4:[39m
TypeError: test.serial.test is not a function
@@ -13,11 +13,11 @@
[90m› Object. (test-tap/fixture/report/regular/bad-test-chain.cjs:3:13)[39m
---tty-stream-chunk-separator
- [31m✖ bad-test-chain.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ bad-test-chain.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
- [31m✖[39m nested-objects [90m[2m›[22m[39m format with max depth 4
+ [31m✘ [fail]:[39m nested-objects [90m[2m›[22m[39m format with max depth 4
---tty-stream-chunk-separator
- [31m✖[39m nested-objects [90m[2m›[22m[39m format like with max depth 4
+ [31m✘ [fail]:[39m nested-objects [90m[2m›[22m[39m format like with max depth 4
---tty-stream-chunk-separator
output-in-hook [90m[2m›[22m[39m before hook
[35mℹ[39m [90mbefore[39m
@@ -30,7 +30,7 @@
---tty-stream-chunk-separator
[32m✔[39m output-in-hook [90m[2m›[22m[39m passing test
---tty-stream-chunk-separator
- [31m✖[39m output-in-hook [90m[2m›[22m[39m failing test [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m output-in-hook [90m[2m›[22m[39m failing test [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
output-in-hook [90m[2m›[22m[39m afterEach hook for passing test
[35mℹ[39m [90mafterEach[39m
@@ -44,35 +44,35 @@
output-in-hook [90m[2m›[22m[39m cleanup
[35mℹ[39m [90mafterAlways[39m
---tty-stream-chunk-separator
- [33m- test [90m[2m›[22m[39m[33m skip[39m
+ [33m- [skip] test [90m[2m›[22m[39m[33m skip[39m
---tty-stream-chunk-separator
- [34m- test [90m[2m›[22m[39m[34m todo[39m
+ [34m- [todo] test [90m[2m›[22m[39m[34m todo[39m
---tty-stream-chunk-separator
[32m✔[39m test [90m[2m›[22m[39m passes
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m fails [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
- [31m✔[39m [31mtest [90m[2m›[22m[39m[31m known failure[39m
+ [31m✔ [expected fail][39m test [90m[2m›[22m[39m known failure
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m no longer failing [31mTest was expected to fail, but succeeded, you should stop marking the test as failing[39m
+ [31m✘ [unexpected pass]:[39m test [90m[2m›[22m[39m no longer failing [3m[31mTest was expected to fail, but succeeded, you should stop marking the test as failing[39m[23m
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m logs [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m logs [3m[31mTest failed via `t.fail()`[39m[23m
[35mℹ[39m [90mhello[39m
[35mℹ[39m [90mworld[39m
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m formatted
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m formatted
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m implementation throws non-error [31mError thrown in test[39m
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m implementation throws non-error [3m[31mError thrown in test[39m[23m
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throws
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m throws
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m notThrows
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m notThrows
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m notThrowsAsync
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m notThrowsAsync
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync different error
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync different error
---tty-stream-chunk-separator
[32m✔[39m uncaught-exception [90m[2m›[22m[39m passes
---tty-stream-chunk-separator
@@ -82,7 +82,7 @@
[90muncaught-exception.cjs:5[39m
[90m4:[39m setImmediate(() => {
- [41m 5: throw new Error('Can’t catch me');[49m
+ [41m[1m 5: throw new Error('Can’t catch me');[22m[49m
[90m6:[39m });
Error: Can’t catch me
@@ -90,7 +90,7 @@
[90m› Immediate. (test-tap/fixture/report/regular/uncaught-exception.cjs:5:9)[39m
---tty-stream-chunk-separator
- [31m✖ uncaught-exception.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ uncaught-exception.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
[32m✔[39m unhandled-rejection [90m[2m›[22m[39m passes
---tty-stream-chunk-separator
@@ -102,7 +102,7 @@
[90munhandled-rejection.cjs:4[39m
[90m3:[39m const passes = t => {
- [41m 4: Promise.reject(new Error('Can’t catch me'));[49m
+ [41m[1m 4: Promise.reject(new Error('Can’t catch me'));[22m[49m
[90m5:[39m t.pass();
Error: Can’t catch me
@@ -122,10 +122,10 @@
[90mnested-objects.cjs:29[39m
[90m28:[39m };
- [41m 29: t.deepEqual(exp, act);[49m
+ [41m[1m 29: t.deepEqual(exp, act);[22m[49m
[90m30:[39m });
- Difference:
+ Difference ([31m-[39m [31mactual[39m, [32m+[39m [32mexpected[39m):
[90m{[39m
a: [90m{[39m
@@ -151,10 +151,10 @@
[90mnested-objects.cjs:55[39m
[90m54:[39m };
- [41m 55: t.like(actual, pattern);[49m
+ [41m[1m 55: t.like(actual, pattern);[22m[49m
[90m56:[39m });
- Difference:
+ Difference ([31m-[39m [31mactual[39m, [32m+[39m [32mexpected[39m):
[90m{[39m
a: [90m{[39m
@@ -174,7 +174,7 @@
[90moutput-in-hook.cjs:34[39m
[90m33:[39m test('failing test', t => {
- [41m 34: t.fail(); [49m
+ [41m[1m 34: t.fail(); [22m[49m
[90m35:[39m });
Test failed via `t.fail()`
@@ -188,7 +188,7 @@
[90mtest.cjs:9[39m
[90m8:[39m
- [41m 9: test('fails', t => t.fail());[49m
+ [41m[1m 9: test('fails', t => t.fail());[22m[49m
[90m10:[39m
Test failed via `t.fail()`
@@ -207,7 +207,7 @@
[90mtest.cjs:18[39m
[90m17:[39m t.log('world');
- [41m 18: t.fail(); [49m
+ [41m[1m 18: t.fail(); [22m[49m
[90m19:[39m });
Test failed via `t.fail()`
@@ -221,10 +221,10 @@
[90mtest.cjs:22[39m
[90m21:[39m test('formatted', t => {
- [41m 22: t.deepEqual('foo', 'bar');[49m
+ [41m[1m 22: t.deepEqual('foo', 'bar');[22m[49m
[90m23:[39m });
- Difference:
+ Difference ([31m-[39m [31mactual[39m, [32m+[39m [32mexpected[39m):
[31m-[39m [34m'[39m[31mfoo[39m[34m'[39m
[32m+[39m [34m'[39m[32mbar[39m[34m'[39m
@@ -246,7 +246,7 @@
[90mtraces-in-t-throws.cjs:12[39m
[90m11:[39m test('throws', t => {
- [41m 12: t.throws(() => throwError(), {instanceOf: TypeError});[49m
+ [41m[1m 12: t.throws(() => throwError(), {instanceOf: TypeError});[22m[49m
[90m13:[39m });
Function threw unexpected exception:
@@ -270,7 +270,7 @@
[90mtraces-in-t-throws.cjs:16[39m
[90m15:[39m test('notThrows', t => {
- [41m 16: t.notThrows(() => throwError());[49m
+ [41m[1m 16: t.notThrows(() => throwError());[22m[49m
[90m17:[39m });
Function threw:
@@ -290,7 +290,7 @@
[90mtraces-in-t-throws.cjs:20[39m
[90m19:[39m test('notThrowsAsync', t => {
- [41m 20: t.notThrowsAsync(() => throwError());[49m
+ [41m[1m 20: t.notThrowsAsync(() => throwError());[22m[49m
[90m21:[39m });
Function threw:
@@ -310,7 +310,7 @@
[90mtraces-in-t-throws.cjs:24[39m
[90m23:[39m test('throwsAsync', t => {
- [41m 24: t.throwsAsync(() => throwError(), {instanceOf: TypeError});[49m
+ [41m[1m 24: t.throwsAsync(() => throwError(), {instanceOf: TypeError});[22m[49m
[90m25:[39m });
Function threw synchronously. Use `t.throws()` instead:
@@ -330,7 +330,7 @@
[90mtraces-in-t-throws.cjs:27[39m
[90m26:[39m
- [41m 27: test('throwsAsync different error', t => t.throwsAsync(returnRejectedPromise, {instanceOf: TypeError}));[49m
+ [41m[1m 27: test('throwsAsync different error', t => t.throwsAsync(returnRejectedPromise, {instanceOf: TypeError}));[22m[49m
[90m28:[39m
Returned promise rejected with unexpected exception:
diff --git a/test-tap/reporters/default.regular.v18.log b/test-tap/reporters/default.regular.v18.log
index aafc12bfb..9b9a969d3 100644
--- a/test-tap/reporters/default.regular.v18.log
+++ b/test-tap/reporters/default.regular.v18.log
@@ -5,7 +5,7 @@
[90mbad-test-chain.cjs:3[39m
[90m2:[39m
- [41m 3: test.serial.test('passes', t => t.pass());[49m
+ [41m[1m 3: test.serial.test('passes', t => t.pass());[22m[49m
[90m4:[39m
TypeError: test.serial.test is not a function
@@ -13,11 +13,11 @@
[90m› Object. (test-tap/fixture/report/regular/bad-test-chain.cjs:3:13)[39m
---tty-stream-chunk-separator
- [31m✖ bad-test-chain.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ bad-test-chain.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
- [31m✖[39m nested-objects [90m[2m›[22m[39m format with max depth 4
+ [31m✘ [fail]:[39m nested-objects [90m[2m›[22m[39m format with max depth 4
---tty-stream-chunk-separator
- [31m✖[39m nested-objects [90m[2m›[22m[39m format like with max depth 4
+ [31m✘ [fail]:[39m nested-objects [90m[2m›[22m[39m format like with max depth 4
---tty-stream-chunk-separator
output-in-hook [90m[2m›[22m[39m before hook
[35mℹ[39m [90mbefore[39m
@@ -30,7 +30,7 @@
---tty-stream-chunk-separator
[32m✔[39m output-in-hook [90m[2m›[22m[39m passing test
---tty-stream-chunk-separator
- [31m✖[39m output-in-hook [90m[2m›[22m[39m failing test [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m output-in-hook [90m[2m›[22m[39m failing test [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
output-in-hook [90m[2m›[22m[39m afterEach hook for passing test
[35mℹ[39m [90mafterEach[39m
@@ -44,35 +44,35 @@
output-in-hook [90m[2m›[22m[39m cleanup
[35mℹ[39m [90mafterAlways[39m
---tty-stream-chunk-separator
- [33m- test [90m[2m›[22m[39m[33m skip[39m
+ [33m- [skip] test [90m[2m›[22m[39m[33m skip[39m
---tty-stream-chunk-separator
- [34m- test [90m[2m›[22m[39m[34m todo[39m
+ [34m- [todo] test [90m[2m›[22m[39m[34m todo[39m
---tty-stream-chunk-separator
[32m✔[39m test [90m[2m›[22m[39m passes
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m fails [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m fails [3m[31mTest failed via `t.fail()`[39m[23m
---tty-stream-chunk-separator
- [31m✔[39m [31mtest [90m[2m›[22m[39m[31m known failure[39m
+ [31m✔ [expected fail][39m test [90m[2m›[22m[39m known failure
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m no longer failing [31mTest was expected to fail, but succeeded, you should stop marking the test as failing[39m
+ [31m✘ [unexpected pass]:[39m test [90m[2m›[22m[39m no longer failing [3m[31mTest was expected to fail, but succeeded, you should stop marking the test as failing[39m[23m
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m logs [31mTest failed via `t.fail()`[39m
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m logs [3m[31mTest failed via `t.fail()`[39m[23m
[35mℹ[39m [90mhello[39m
[35mℹ[39m [90mworld[39m
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m formatted
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m formatted
---tty-stream-chunk-separator
- [31m✖[39m test [90m[2m›[22m[39m implementation throws non-error [31mError thrown in test[39m
+ [31m✘ [fail]:[39m test [90m[2m›[22m[39m implementation throws non-error [3m[31mError thrown in test[39m[23m
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throws
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m throws
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m notThrows
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m notThrows
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m notThrowsAsync
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m notThrowsAsync
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync
---tty-stream-chunk-separator
- [31m✖[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync different error
+ [31m✘ [fail]:[39m traces-in-t-throws [90m[2m›[22m[39m throwsAsync different error
---tty-stream-chunk-separator
[32m✔[39m uncaught-exception [90m[2m›[22m[39m passes
---tty-stream-chunk-separator
@@ -82,7 +82,7 @@
[90muncaught-exception.cjs:5[39m
[90m4:[39m setImmediate(() => {
- [41m 5: throw new Error('Can’t catch me');[49m
+ [41m[1m 5: throw new Error('Can’t catch me');[22m[49m
[90m6:[39m });
Error: Can’t catch me
@@ -90,7 +90,7 @@
[90m› Immediate. (test-tap/fixture/report/regular/uncaught-exception.cjs:5:9)[39m
---tty-stream-chunk-separator
- [31m✖ uncaught-exception.cjs exited with a non-zero exit code: 1[39m
+ [31m✘ uncaught-exception.cjs exited with a non-zero exit code: 1[39m
---tty-stream-chunk-separator
[32m✔[39m unhandled-rejection [90m[2m›[22m[39m passes
---tty-stream-chunk-separator
@@ -102,7 +102,7 @@
[90munhandled-rejection.cjs:4[39m
[90m3:[39m const passes = t => {
- [41m 4: Promise.reject(new Error('Can’t catch me'));[49m
+ [41m[1m 4: Promise.reject(new Error('Can’t catch me'));[22m[49m
[90m5:[39m t.pass();
Error: Can’t catch me
@@ -122,10 +122,10 @@
[90mnested-objects.cjs:29[39m
[90m28:[39m };
- [41m 29: t.deepEqual(exp, act);[49m
+ [41m[1m 29: t.deepEqual(exp, act);[22m[49m
[90m30:[39m });
- Difference:
+ Difference ([31m-[39m [31mactual[39m, [32m+[39m [32mexpected[39m):
[90m{[39m
a: [90m{[39m
@@ -151,10 +151,10 @@
[90mnested-objects.cjs:55[39m
[90m54:[39m };
- [41m 55: t.like(actual, pattern);[49m
+ [41m[1m 55: t.like(actual, pattern);[22m[49m
[90m56:[39m });
- Difference:
+ Difference ([31m-[39m [31mactual[39m, [32m+[39m [32mexpected[39m):
[90m{[39m
a: [90m{[39m
@@ -174,7 +174,7 @@
[90moutput-in-hook.cjs:34[39m
[90m33:[39m test('failing test', t => {
- [41m 34: t.fail(); [49m
+ [41m[1m 34: t.fail(); [22m[49m
[90m35:[39m });
Test failed via `t.fail()`
@@ -188,7 +188,7 @@
[90mtest.cjs:9[39m
[90m8:[39m
- [41m 9: test('fails', t => t.fail());[49m
+ [41m[1m 9: test('fails', t => t.fail());[22m[49m
[90m10:[39m
Test failed via `t.fail()`
@@ -207,7 +207,7 @@
[90mtest.cjs:18[39m
[90m17:[39m t.log('world');
- [41m 18: t.fail(); [49m
+ [41m[1m 18: t.fail(); [22m[49m
[90m19:[39m });
Test failed via `t.fail()`
@@ -221,10 +221,10 @@
[90mtest.cjs:22[39m
[90m21:[39m test('formatted', t => {
- [41m 22: t.deepEqual('foo', 'bar');[49m
+ [41m[1m 22: t.deepEqual('foo', 'bar');[22m[49m
[90m23:[39m });
- Difference:
+ Difference ([31m-[39m [31mactual[39m, [32m+[39m [32mexpected[39m):
[31m-[39m [34m'[39m[31mfoo[39m[34m'[39m
[32m+[39m [34m'[39m[32mbar[39m[34m'[39m
@@ -246,7 +246,7 @@
[90mtraces-in-t-throws.cjs:12[39m
[90m11:[39m test('throws', t => {
- [41m 12: t.throws(() => throwError(), {instanceOf: TypeError});[49m
+ [41m[1m 12: t.throws(() => throwError(), {instanceOf: TypeError});[22m[49m
[90m13:[39m });
Function threw unexpected exception:
@@ -270,7 +270,7 @@
[90mtraces-in-t-throws.cjs:16[39m
[90m15:[39m test('notThrows', t => {
- [41m 16: t.notThrows(() => throwError());[49m
+ [41m[1m 16: t.notThrows(() => throwError());[22m[49m
[90m17:[39m });
Function threw:
@@ -290,7 +290,7 @@
[90mtraces-in-t-throws.cjs:20[39m
[90m19:[39m test('notThrowsAsync', t => {
- [41m 20: t.notThrowsAsync(() => throwError());[49m
+ [41m[1m 20: t.notThrowsAsync(() => throwError());[22m[49m
[90m21:[39m });
Function threw:
@@ -310,7 +310,7 @@
[90mtraces-in-t-throws.cjs:24[39m
[90m23:[39m test('throwsAsync', t => {
- [41m 24: t.throwsAsync(() => throwError(), {instanceOf: TypeError});[49m
+ [41m[1m 24: t.throwsAsync(() => throwError(), {instanceOf: TypeError});[22m[49m
[90m25:[39m });
Function threw synchronously. Use `t.throws()` instead:
@@ -330,7 +330,7 @@
[90mtraces-in-t-throws.cjs:27[39m
[90m26:[39m
- [41m 27: test('throwsAsync different error', t => t.throwsAsync(returnRejectedPromise, {instanceOf: TypeError}));[49m
+ [41m[1m 27: test('throwsAsync different error', t => t.throwsAsync(returnRejectedPromise, {instanceOf: TypeError}));[22m[49m
[90m28:[39m
Returned promise rejected with unexpected exception:
diff --git a/test-tap/reporters/default.timeoutinmultiplefiles.v12.log b/test-tap/reporters/default.timeoutinmultiplefiles.v12.log
deleted file mode 100644
index 16d1ddd6b..000000000
--- a/test-tap/reporters/default.timeoutinmultiplefiles.v12.log
+++ /dev/null
@@ -1,34 +0,0 @@
-
----tty-stream-chunk-separator
- [32m✔[39m a [90m[2m›[22m[39m a passes
----tty-stream-chunk-separator
- [32m✔[39m a [90m[2m›[22m[39m a passes two
----tty-stream-chunk-separator
- [31m[39m
- [31m✖ Timed out while running tests[39m
-
- 2 tests were pending in a.cjs
-
- ◌ a [90m[2m›[22m[39m a slow
- ◌ a [90m[2m›[22m[39m a slow two
-
----tty-stream-chunk-separator
- [32m✔[39m b [90m[2m›[22m[39m b passes
----tty-stream-chunk-separator
- [32m✔[39m b [90m[2m›[22m[39m b passes two
----tty-stream-chunk-separator
- [31m[39m
- [31m✖ Timed out while running tests[39m
-
- 3 tests were pending in b.cjs
-
- ◌ b [90m[2m›[22m[39m b slow
- ◌ b [90m[2m›[22m[39m b slow two
- ◌ b [90m[2m›[22m[39m b slow three
-
----tty-stream-chunk-separator
- [90m─[39m
-
- [32m4 tests passed[39m
- [31m5 tests remained pending after a timeout[39m
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/default.timeoutinmultiplefiles.v14.log b/test-tap/reporters/default.timeoutinmultiplefiles.v14.log
index 16d1ddd6b..f3a678ae2 100644
--- a/test-tap/reporters/default.timeoutinmultiplefiles.v14.log
+++ b/test-tap/reporters/default.timeoutinmultiplefiles.v14.log
@@ -5,7 +5,7 @@
[32m✔[39m a [90m[2m›[22m[39m a passes two
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
2 tests were pending in a.cjs
@@ -18,7 +18,7 @@
[32m✔[39m b [90m[2m›[22m[39m b passes two
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
3 tests were pending in b.cjs
diff --git a/test-tap/reporters/default.timeoutinmultiplefiles.v16.log b/test-tap/reporters/default.timeoutinmultiplefiles.v16.log
index 16d1ddd6b..f3a678ae2 100644
--- a/test-tap/reporters/default.timeoutinmultiplefiles.v16.log
+++ b/test-tap/reporters/default.timeoutinmultiplefiles.v16.log
@@ -5,7 +5,7 @@
[32m✔[39m a [90m[2m›[22m[39m a passes two
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
2 tests were pending in a.cjs
@@ -18,7 +18,7 @@
[32m✔[39m b [90m[2m›[22m[39m b passes two
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
3 tests were pending in b.cjs
diff --git a/test-tap/reporters/default.timeoutinmultiplefiles.v18.log b/test-tap/reporters/default.timeoutinmultiplefiles.v18.log
index 16d1ddd6b..f3a678ae2 100644
--- a/test-tap/reporters/default.timeoutinmultiplefiles.v18.log
+++ b/test-tap/reporters/default.timeoutinmultiplefiles.v18.log
@@ -5,7 +5,7 @@
[32m✔[39m a [90m[2m›[22m[39m a passes two
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
2 tests were pending in a.cjs
@@ -18,7 +18,7 @@
[32m✔[39m b [90m[2m›[22m[39m b passes two
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
3 tests were pending in b.cjs
diff --git a/test-tap/reporters/default.timeoutinsinglefile.v12.log b/test-tap/reporters/default.timeoutinsinglefile.v12.log
deleted file mode 100644
index 3c4830fb5..000000000
--- a/test-tap/reporters/default.timeoutinsinglefile.v12.log
+++ /dev/null
@@ -1,20 +0,0 @@
-
----tty-stream-chunk-separator
- [32m✔[39m passes
----tty-stream-chunk-separator
- [32m✔[39m passes two
----tty-stream-chunk-separator
- [31m[39m
- [31m✖ Timed out while running tests[39m
-
- 2 tests were pending in a.cjs
-
- ◌ slow
- ◌ slow two
-
----tty-stream-chunk-separator
- [90m─[39m
-
- [32m2 tests passed[39m
- [31m2 tests remained pending after a timeout[39m
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/default.timeoutinsinglefile.v14.log b/test-tap/reporters/default.timeoutinsinglefile.v14.log
index 3c4830fb5..a1059e094 100644
--- a/test-tap/reporters/default.timeoutinsinglefile.v14.log
+++ b/test-tap/reporters/default.timeoutinsinglefile.v14.log
@@ -5,7 +5,7 @@
[32m✔[39m passes two
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
2 tests were pending in a.cjs
diff --git a/test-tap/reporters/default.timeoutinsinglefile.v16.log b/test-tap/reporters/default.timeoutinsinglefile.v16.log
index 3c4830fb5..a1059e094 100644
--- a/test-tap/reporters/default.timeoutinsinglefile.v16.log
+++ b/test-tap/reporters/default.timeoutinsinglefile.v16.log
@@ -5,7 +5,7 @@
[32m✔[39m passes two
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
2 tests were pending in a.cjs
diff --git a/test-tap/reporters/default.timeoutinsinglefile.v18.log b/test-tap/reporters/default.timeoutinsinglefile.v18.log
index 3c4830fb5..a1059e094 100644
--- a/test-tap/reporters/default.timeoutinsinglefile.v18.log
+++ b/test-tap/reporters/default.timeoutinsinglefile.v18.log
@@ -5,7 +5,7 @@
[32m✔[39m passes two
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
2 tests were pending in a.cjs
diff --git a/test-tap/reporters/default.timeoutwithmatch.v12.log b/test-tap/reporters/default.timeoutwithmatch.v12.log
deleted file mode 100644
index 2ed31ca03..000000000
--- a/test-tap/reporters/default.timeoutwithmatch.v12.log
+++ /dev/null
@@ -1,18 +0,0 @@
-
----tty-stream-chunk-separator
- [32m✔[39m passes needle
----tty-stream-chunk-separator
- [31m[39m
- [31m✖ Timed out while running tests[39m
-
- 2 tests were pending in a.cjs
-
- ◌ slow needle
- ◌ slow three needle
-
----tty-stream-chunk-separator
- [90m─[39m
-
- [32m1 test passed[39m
- [31m2 tests remained pending after a timeout[39m
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/default.timeoutwithmatch.v14.log b/test-tap/reporters/default.timeoutwithmatch.v14.log
index 2ed31ca03..ae7070c95 100644
--- a/test-tap/reporters/default.timeoutwithmatch.v14.log
+++ b/test-tap/reporters/default.timeoutwithmatch.v14.log
@@ -3,7 +3,7 @@
[32m✔[39m passes needle
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
2 tests were pending in a.cjs
diff --git a/test-tap/reporters/default.timeoutwithmatch.v16.log b/test-tap/reporters/default.timeoutwithmatch.v16.log
index 2ed31ca03..ae7070c95 100644
--- a/test-tap/reporters/default.timeoutwithmatch.v16.log
+++ b/test-tap/reporters/default.timeoutwithmatch.v16.log
@@ -3,7 +3,7 @@
[32m✔[39m passes needle
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
2 tests were pending in a.cjs
diff --git a/test-tap/reporters/default.timeoutwithmatch.v18.log b/test-tap/reporters/default.timeoutwithmatch.v18.log
index 2ed31ca03..ae7070c95 100644
--- a/test-tap/reporters/default.timeoutwithmatch.v18.log
+++ b/test-tap/reporters/default.timeoutwithmatch.v18.log
@@ -3,7 +3,7 @@
[32m✔[39m passes needle
---tty-stream-chunk-separator
[31m[39m
- [31m✖ Timed out while running tests[39m
+ [31m✘ Timed out while running tests[39m
2 tests were pending in a.cjs
diff --git a/test-tap/reporters/default.watch.v12.log b/test-tap/reporters/default.watch.v12.log
deleted file mode 100644
index ae2dea44b..000000000
--- a/test-tap/reporters/default.watch.v12.log
+++ /dev/null
@@ -1,32 +0,0 @@
-
----tty-stream-chunk-separator
- [32m✔[39m test [90m[2m›[22m[39m passes
----tty-stream-chunk-separator
- [90m─[39m
-
- [32m1 test passed[39m [90m[2m[17:19:12][22m[39m
-
----tty-stream-chunk-separator
-[90m[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[22m[39m
----tty-stream-chunk-separator
-
----tty-stream-chunk-separator
- [32m✔[39m test [90m[2m›[22m[39m passes
----tty-stream-chunk-separator
- [90m─[39m
-
- [32m1 test passed[39m [90m[2m[17:19:12][22m[39m
- [31m2 previous failures in test files that were not rerun[39m
-
----tty-stream-chunk-separator
-[90m[2m────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────[22m[39m
----tty-stream-chunk-separator
-
----tty-stream-chunk-separator
- [32m✔[39m test [90m[2m›[22m[39m passes
----tty-stream-chunk-separator
- [90m─[39m
-
- [32m1 test passed[39m [90m[2m[17:19:12][22m[39m
-
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/tap.edgecases.v12.log b/test-tap/reporters/tap.edgecases.v12.log
deleted file mode 100644
index 0b7bcf535..000000000
--- a/test-tap/reporters/tap.edgecases.v12.log
+++ /dev/null
@@ -1,46 +0,0 @@
-TAP version 13
----tty-stream-chunk-separator
-not ok 1 - ~/test-tap/fixture/report/edgecases/ast-syntax-error.cjs:3
-const fn = do {
- ^^
-
-SyntaxError: Unexpected token 'do'
- ---
- name: SyntaxError
- message: Unexpected token 'do'
- at: ''
- ...
----tty-stream-chunk-separator
-not ok 2 - ast-syntax-error.cjs exited with a non-zero exit code: 1
----tty-stream-chunk-separator
-not ok 3 - No tests found in ava-import-no-test-declaration.cjs
----tty-stream-chunk-separator
-not ok 4 - TypeError: test is not a function
- ---
- name: TypeError
- message: test is not a function
- at: >-
- Object.
- (test-tap/fixture/report/edgecases/import-and-use-test-member.cjs:3:1)
- ...
----tty-stream-chunk-separator
-not ok 5 - import-and-use-test-member.cjs exited with a non-zero exit code: 1
----tty-stream-chunk-separator
-not ok 6 - No tests found in no-ava-import.cjs, make sure to import "ava" at the top of your test file
----tty-stream-chunk-separator
-not ok 7 - Error: throws
- ---
- name: Error
- message: throws
- at: 'Object. (test-tap/fixture/report/edgecases/throws.cjs:1:7)'
- ...
----tty-stream-chunk-separator
-not ok 8 - throws.cjs exited with a non-zero exit code: 1
----tty-stream-chunk-separator
-
-1..0
-# tests 0
-# pass 0
-# fail 8
-
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/tap.edgecases.v18.log b/test-tap/reporters/tap.edgecases.v18.log
index ba4f57781..0b7bcf535 100644
--- a/test-tap/reporters/tap.edgecases.v18.log
+++ b/test-tap/reporters/tap.edgecases.v18.log
@@ -1,6 +1,10 @@
TAP version 13
---tty-stream-chunk-separator
-not ok 1 - SyntaxError: Unexpected token 'do'
+not ok 1 - ~/test-tap/fixture/report/edgecases/ast-syntax-error.cjs:3
+const fn = do {
+ ^^
+
+SyntaxError: Unexpected token 'do'
---
name: SyntaxError
message: Unexpected token 'do'
diff --git a/test-tap/reporters/tap.failfast.v12.log b/test-tap/reporters/tap.failfast.v12.log
deleted file mode 100644
index 5b44649f1..000000000
--- a/test-tap/reporters/tap.failfast.v12.log
+++ /dev/null
@@ -1,17 +0,0 @@
-TAP version 13
----tty-stream-chunk-separator
-not ok 1 - a › fails
- ---
- name: AssertionError
- message: Test failed via `t.fail()`
- assertion: fail
- at: 'test-tap/fixture/report/failfast/a.cjs:3:22'
- ...
----tty-stream-chunk-separator
-
-1..1
-# tests 1
-# pass 0
-# fail 1
-
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/tap.failfast2.v12.log b/test-tap/reporters/tap.failfast2.v12.log
deleted file mode 100644
index c10c8cd9f..000000000
--- a/test-tap/reporters/tap.failfast2.v12.log
+++ /dev/null
@@ -1,19 +0,0 @@
-TAP version 13
----tty-stream-chunk-separator
-not ok 1 - a › fails
- ---
- name: AssertionError
- message: Test failed via `t.fail()`
- assertion: fail
- at: 'test-tap/fixture/report/failfast2/a.cjs:3:22'
- ...
----tty-stream-chunk-separator
-# 1 test remaining in a.cjs
----tty-stream-chunk-separator
-
-1..2
-# tests 2
-# pass 0
-# fail 2
-
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/tap.js b/test-tap/reporters/tap.js
index 738e4cb6c..47050fad8 100644
--- a/test-tap/reporters/tap.js
+++ b/test-tap/reporters/tap.js
@@ -9,7 +9,7 @@ import TTYStream from '../helper/tty-stream.js';
fixReporterEnv();
test(async t => {
- const {default: TapReporter} = await import('../../lib/reporters/tap.js'); // eslint-disable-line node/no-unsupported-features/es-syntax
+ const {default: TapReporter} = await import('../../lib/reporters/tap.js');
const run = (type, sanitizers = []) => t => {
t.plan(1);
diff --git a/test-tap/reporters/tap.only.v12.log b/test-tap/reporters/tap.only.v12.log
deleted file mode 100644
index 36f42b988..000000000
--- a/test-tap/reporters/tap.only.v12.log
+++ /dev/null
@@ -1,13 +0,0 @@
-TAP version 13
----tty-stream-chunk-separator
-ok 1 - a › only
----tty-stream-chunk-separator
-ok 2 - b › passes
----tty-stream-chunk-separator
-
-1..2
-# tests 2
-# pass 2
-# fail 0
-
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/tap.regular.v12.log b/test-tap/reporters/tap.regular.v12.log
deleted file mode 100644
index c0379a149..000000000
--- a/test-tap/reporters/tap.regular.v12.log
+++ /dev/null
@@ -1,268 +0,0 @@
-TAP version 13
----tty-stream-chunk-separator
-not ok 1 - TypeError: test.serial.test is not a function
- ---
- name: TypeError
- message: test.serial.test is not a function
- at: 'Object. (test-tap/fixture/report/regular/bad-test-chain.cjs:3:13)'
- ...
----tty-stream-chunk-separator
-not ok 2 - bad-test-chain.cjs exited with a non-zero exit code: 1
----tty-stream-chunk-separator
-not ok 3 - nested-objects › format with max depth 4
- ---
- name: AssertionError
- assertion: deepEqual
- values:
- 'Difference:': |2-
- {
- a: {
- b: {
- foo: 'bar',
- },
- },
- + c: {
- + d: {
- + e: {
- + foo: 'bar',
- + },
- + },
- + },
- }
- at: 'test-tap/fixture/report/regular/nested-objects.cjs:29:4'
- ...
----tty-stream-chunk-separator
-not ok 4 - nested-objects › format like with max depth 4
- ---
- name: AssertionError
- assertion: like
- values:
- 'Difference:': |2-
- {
- a: {
- b: {
- - foo: 'bar',
- + foo: 'qux',
- },
- },
- }
- at: 'test-tap/fixture/report/regular/nested-objects.cjs:55:4'
- ...
----tty-stream-chunk-separator
-# output-in-hook › before hook
----tty-stream-chunk-separator
-# output-in-hook › before hook
----tty-stream-chunk-separator
-# before
----tty-stream-chunk-separator
-# output-in-hook › beforeEach hook for passing test
----tty-stream-chunk-separator
-# beforeEach
----tty-stream-chunk-separator
-# output-in-hook › beforeEach hook for failing test
----tty-stream-chunk-separator
-# beforeEach
----tty-stream-chunk-separator
-ok 5 - output-in-hook › passing test
----tty-stream-chunk-separator
-not ok 6 - output-in-hook › failing test
- ---
- name: AssertionError
- message: Test failed via `t.fail()`
- assertion: fail
- at: 'test-tap/fixture/report/regular/output-in-hook.cjs:34:4'
- ...
----tty-stream-chunk-separator
-# output-in-hook › afterEach hook for passing test
----tty-stream-chunk-separator
-# afterEach
----tty-stream-chunk-separator
-# output-in-hook › afterEach.always hook for failing test
----tty-stream-chunk-separator
-# afterEachAlways
----tty-stream-chunk-separator
-# output-in-hook › afterEach.always hook for passing test
----tty-stream-chunk-separator
-# afterEachAlways
----tty-stream-chunk-separator
-# output-in-hook › cleanup
----tty-stream-chunk-separator
-# afterAlways
----tty-stream-chunk-separator
-ok 7 - test › skip # SKIP
----tty-stream-chunk-separator
-not ok 8 - test › todo # TODO
----tty-stream-chunk-separator
-ok 9 - test › passes
----tty-stream-chunk-separator
-not ok 10 - test › fails
- ---
- name: AssertionError
- message: Test failed via `t.fail()`
- assertion: fail
- at: 'test-tap/fixture/report/regular/test.cjs:9:22'
- ...
----tty-stream-chunk-separator
-ok 11 - test › known failure
----tty-stream-chunk-separator
-not ok 12 - test › no longer failing
- ---
- name: Error
- message: >-
- Test was expected to fail, but succeeded, you should stop marking the test as
- failing
- at: ''
- ...
----tty-stream-chunk-separator
-not ok 13 - test › logs
-# hello
-# world
- ---
- name: AssertionError
- message: Test failed via `t.fail()`
- assertion: fail
- at: 'test-tap/fixture/report/regular/test.cjs:18:4'
- ...
----tty-stream-chunk-separator
-not ok 14 - test › formatted
- ---
- name: AssertionError
- assertion: deepEqual
- values:
- 'Difference:': |-
- - 'foo'
- + 'bar'
- at: 'test-tap/fixture/report/regular/test.cjs:22:4'
- ...
----tty-stream-chunk-separator
-not ok 15 - test › implementation throws non-error
- ---
- name: AssertionError
- message: Error thrown in test
- values:
- 'Error thrown in test:': 'null'
- at: ''
- ...
----tty-stream-chunk-separator
-not ok 16 - traces-in-t-throws › throws
- ---
- name: AssertionError
- assertion: throws
- values:
- 'Function threw unexpected exception:': |-
- Error {
- message: 'uh-oh',
- }
- 'Expected instance of:': 'Function TypeError {}'
- at: >-
- throwError (test-tap/fixture/report/regular/traces-in-t-throws.cjs:4:8)
-
- t.throws.instanceOf
- (test-tap/fixture/report/regular/traces-in-t-throws.cjs:12:17)
-
- test-tap/fixture/report/regular/traces-in-t-throws.cjs:12:4
- ...
----tty-stream-chunk-separator
-not ok 17 - traces-in-t-throws › notThrows
- ---
- name: AssertionError
- assertion: notThrows
- values:
- 'Function threw:': |-
- Error {
- message: 'uh-oh',
- }
- at: |-
- throwError (test-tap/fixture/report/regular/traces-in-t-throws.cjs:4:8)
- test-tap/fixture/report/regular/traces-in-t-throws.cjs:16:20
- test-tap/fixture/report/regular/traces-in-t-throws.cjs:16:4
- ...
----tty-stream-chunk-separator
-not ok 18 - traces-in-t-throws › notThrowsAsync
- ---
- name: AssertionError
- assertion: notThrowsAsync
- values:
- 'Function threw:': |-
- Error {
- message: 'uh-oh',
- }
- at: |-
- throwError (test-tap/fixture/report/regular/traces-in-t-throws.cjs:4:8)
- test-tap/fixture/report/regular/traces-in-t-throws.cjs:20:25
- test-tap/fixture/report/regular/traces-in-t-throws.cjs:20:4
- ...
----tty-stream-chunk-separator
-not ok 19 - traces-in-t-throws › throwsAsync
- ---
- name: AssertionError
- assertion: throwsAsync
- values:
- 'Function threw synchronously. Use `t.throws()` instead:': |-
- Error {
- message: 'uh-oh',
- }
- at: >-
- throwError (test-tap/fixture/report/regular/traces-in-t-throws.cjs:4:8)
-
- t.throwsAsync.instanceOf
- (test-tap/fixture/report/regular/traces-in-t-throws.cjs:24:22)
-
- test-tap/fixture/report/regular/traces-in-t-throws.cjs:24:4
- ...
----tty-stream-chunk-separator
-not ok 20 - traces-in-t-throws › throwsAsync different error
- ---
- name: AssertionError
- assertion: throwsAsync
- values:
- 'Returned promise rejected with unexpected exception:': |-
- Error {
- message: 'uh-oh',
- }
- 'Expected instance of:': 'Function TypeError {}'
- at: >-
- returnRejectedPromise
- (test-tap/fixture/report/regular/traces-in-t-throws.cjs:8:24)
-
- test-tap/fixture/report/regular/traces-in-t-throws.cjs:27:44
- ...
----tty-stream-chunk-separator
-ok 21 - uncaught-exception › passes
----tty-stream-chunk-separator
-not ok 22 - Error: Can’t catch me
- ---
- name: Error
- message: Can’t catch me
- at: >-
- Immediate.
- (test-tap/fixture/report/regular/uncaught-exception.cjs:5:9)
- ...
----tty-stream-chunk-separator
-not ok 23 - uncaught-exception.cjs exited with a non-zero exit code: 1
----tty-stream-chunk-separator
-ok 24 - unhandled-rejection › passes
----tty-stream-chunk-separator
-ok 25 - unhandled-rejection › unhandled non-error rejection
----tty-stream-chunk-separator
-not ok 26 - Error: Can’t catch me
- ---
- name: Error
- message: Can’t catch me
- at: 'passes (test-tap/fixture/report/regular/unhandled-rejection.cjs:4:17)'
- ...
----tty-stream-chunk-separator
-not ok 27 - unhandled-rejection
- ---
- message: Non-error object
- formatted: 'null'
- ...
----tty-stream-chunk-separator
-
-1..21
-# tests 20
-# pass 6
-# skip 1
-# fail 20
-
----tty-stream-chunk-separator
diff --git a/test-tap/reporters/tap.regular.v14.log b/test-tap/reporters/tap.regular.v14.log
index c0379a149..3fd8b13c2 100644
--- a/test-tap/reporters/tap.regular.v14.log
+++ b/test-tap/reporters/tap.regular.v14.log
@@ -14,7 +14,7 @@ not ok 3 - nested-objects › format with max depth 4
name: AssertionError
assertion: deepEqual
values:
- 'Difference:': |2-
+ 'Difference (- actual, + expected):': |2-
{
a: {
b: {
@@ -37,7 +37,7 @@ not ok 4 - nested-objects › format like with max depth 4
name: AssertionError
assertion: like
values:
- 'Difference:': |2-
+ 'Difference (- actual, + expected):': |2-
{
a: {
b: {
@@ -129,7 +129,7 @@ not ok 14 - test › formatted
name: AssertionError
assertion: deepEqual
values:
- 'Difference:': |-
+ 'Difference (- actual, + expected):': |-
- 'foo'
+ 'bar'
at: 'test-tap/fixture/report/regular/test.cjs:22:4'
diff --git a/test-tap/reporters/tap.regular.v16.log b/test-tap/reporters/tap.regular.v16.log
index c0379a149..3fd8b13c2 100644
--- a/test-tap/reporters/tap.regular.v16.log
+++ b/test-tap/reporters/tap.regular.v16.log
@@ -14,7 +14,7 @@ not ok 3 - nested-objects › format with max depth 4
name: AssertionError
assertion: deepEqual
values:
- 'Difference:': |2-
+ 'Difference (- actual, + expected):': |2-
{
a: {
b: {
@@ -37,7 +37,7 @@ not ok 4 - nested-objects › format like with max depth 4
name: AssertionError
assertion: like
values:
- 'Difference:': |2-
+ 'Difference (- actual, + expected):': |2-
{
a: {
b: {
@@ -129,7 +129,7 @@ not ok 14 - test › formatted
name: AssertionError
assertion: deepEqual
values:
- 'Difference:': |-
+ 'Difference (- actual, + expected):': |-
- 'foo'
+ 'bar'
at: 'test-tap/fixture/report/regular/test.cjs:22:4'
diff --git a/test-tap/reporters/tap.regular.v18.log b/test-tap/reporters/tap.regular.v18.log
index c0379a149..3fd8b13c2 100644
--- a/test-tap/reporters/tap.regular.v18.log
+++ b/test-tap/reporters/tap.regular.v18.log
@@ -14,7 +14,7 @@ not ok 3 - nested-objects › format with max depth 4
name: AssertionError
assertion: deepEqual
values:
- 'Difference:': |2-
+ 'Difference (- actual, + expected):': |2-
{
a: {
b: {
@@ -37,7 +37,7 @@ not ok 4 - nested-objects › format like with max depth 4
name: AssertionError
assertion: like
values:
- 'Difference:': |2-
+ 'Difference (- actual, + expected):': |2-
{
a: {
b: {
@@ -129,7 +129,7 @@ not ok 14 - test › formatted
name: AssertionError
assertion: deepEqual
values:
- 'Difference:': |-
+ 'Difference (- actual, + expected):': |-
- 'foo'
+ 'bar'
at: 'test-tap/fixture/report/regular/test.cjs:22:4'
diff --git a/test-tap/test.js b/test-tap/test.js
index c1c89b457..e5014dbfe 100644
--- a/test-tap/test.js
+++ b/test-tap/test.js
@@ -213,7 +213,7 @@ test('fails with the first assertError', t => ava(a => {
t.equal(result.passed, false);
t.equal(result.error.name, 'AssertionError');
t.equal(result.error.values.length, 1);
- t.equal(result.error.values[0].label, 'Difference:');
+ t.equal(result.error.values[0].label, 'Difference (- actual, + expected):');
t.match(result.error.values[0].formatted, /- 1\n\+ 2/);
}));
diff --git a/test-d/.gitignore b/test-types/.gitignore
similarity index 100%
rename from test-d/.gitignore
rename to test-types/.gitignore
diff --git a/test-types/import-in-cts/assertions-as-type-guards.cts b/test-types/import-in-cts/assertions-as-type-guards.cts
new file mode 100644
index 000000000..45f2518a5
--- /dev/null
+++ b/test-types/import-in-cts/assertions-as-type-guards.cts
@@ -0,0 +1,40 @@
+import test from 'ava';
+import {expectType} from 'tsd';
+
+type Expected = {foo: 'bar'};
+const expected: Expected = {foo: 'bar'};
+
+test('deepEqual', t => {
+ const actual: unknown = {};
+ if (t.deepEqual(actual, expected)) {
+ expectType(actual);
+ }
+});
+
+test('like', t => {
+ const actual: unknown = {};
+ if (t.like(actual, expected)) {
+ expectType(actual);
+ }
+});
+
+test('is', t => {
+ const actual: unknown = 2;
+ if (t.is(actual, 3 as const)) {
+ expectType<3>(actual);
+ }
+});
+
+test('false', t => {
+ const actual: unknown = true;
+ if (t.false(actual)) {
+ expectType(actual);
+ }
+});
+
+test('true', t => {
+ const actual: unknown = false;
+ if (t.true(actual)) {
+ expectType(actual);
+ }
+});
diff --git a/test-d/context.ts b/test-types/import-in-cts/context.cts
similarity index 77%
rename from test-d/context.ts
rename to test-types/import-in-cts/context.cts
index 476cddf0a..f2901be88 100644
--- a/test-d/context.ts
+++ b/test-types/import-in-cts/context.cts
@@ -1,15 +1,14 @@
/* eslint-disable @typescript-eslint/no-empty-function */
+import anyTest, {ExecutionContext, TestFn} from 'ava';
import {expectError, expectType} from 'tsd';
-import anyTest, {ExecutionContext, TestFn} from '..';
-
interface Context {
foo: string;
}
const test = anyTest as TestFn;
-const macro = test.macro((t, expected: number) => {
+const macro = test.macro((t, _expected: number) => {
expectType(t.context.foo);
});
@@ -17,6 +16,7 @@ test.beforeEach(t => {
expectType(t.context);
});
+// @ts-expect-error TS2769
expectError(test('foo is bar', macro, 'bar')); // eslint-disable-line @typescript-eslint/no-confusing-void-expression
anyTest('default context is unknown', t => {
@@ -29,5 +29,5 @@ interface Covariant extends Context {
}
const test2 = anyTest as TestFn;
-const hook = (t: ExecutionContext) => {};
+const hook = (_t: ExecutionContext) => {};
test2.beforeEach(hook);
diff --git a/test-types/import-in-cts/deep-equal.cts b/test-types/import-in-cts/deep-equal.cts
new file mode 100644
index 000000000..acb850262
--- /dev/null
+++ b/test-types/import-in-cts/deep-equal.cts
@@ -0,0 +1,29 @@
+import test from 'ava';
+import {expectType} from 'tsd';
+
+test('actual extends expected', t => {
+ type Expected = {foo: [1, 2, 3]};
+ const expected: Expected = {foo: [1, 2, 3]};
+ const actual = {foo: [1, 2, 3]};
+ if (t.deepEqual(actual, expected)) {
+ expectType(actual);
+ }
+});
+
+test('expected extends actual', t => {
+ type Expected = {foo: Array};
+ type Actual = {foo: number[]};
+ const expected: Expected = {foo: [1, 2, 3]};
+ const actual: Actual = {foo: [1, 2, 3]};
+ if (t.deepEqual(actual, expected)) {
+ expectType(expected);
+ }
+});
+
+test('neither extends the each other', t => {
+ type Expected = {readonly foo: readonly [1, 2, 3]};
+ type Actual = {foo: number[]};
+ const expected: Expected = {foo: [1, 2, 3]};
+ const actual: Actual = {foo: [1, 2, 3]};
+ t.deepEqual(actual, expected);
+});
diff --git a/test-types/import-in-cts/implementation-result.cts b/test-types/import-in-cts/implementation-result.cts
new file mode 100644
index 000000000..ea3ccfcda
--- /dev/null
+++ b/test-types/import-in-cts/implementation-result.cts
@@ -0,0 +1,20 @@
+/* eslint-disable @typescript-eslint/no-empty-function */
+import test from 'ava';
+
+test.after('return anything else', _t => ({
+ foo: 'bar',
+ subscribe() {},
+ then() {}, // eslint-disable-line unicorn/no-thenable
+}));
+
+test('return a promise-like', _t => ({
+ then(resolve) { // eslint-disable-line unicorn/no-thenable
+ resolve?.(); // eslint-disable-line @typescript-eslint/no-floating-promises
+ },
+}));
+
+test('return a subscribable', _t => ({
+ subscribe({complete}) {
+ complete();
+ },
+}));
diff --git a/test-types/import-in-cts/like.cts b/test-types/import-in-cts/like.cts
new file mode 100644
index 000000000..ecc641097
--- /dev/null
+++ b/test-types/import-in-cts/like.cts
@@ -0,0 +1,25 @@
+import test from 'ava';
+
+test('like', t => {
+ t.like({
+ map: new Map([['foo', 'bar']]),
+ nested: {
+ baz: 'thud',
+ qux: 'quux',
+ },
+ }, {
+ map: new Map([['foo', 'bar']]),
+ nested: {
+ baz: 'thud',
+ },
+ });
+
+ type Foo = {
+ foo?: 'foo';
+ bar?: 'bar';
+ };
+
+ const foo: Foo = {bar: 'bar'};
+ const {foo: _, ...expected} = foo;
+ t.like(expected, {bar: 'bar'});
+});
diff --git a/test-d/macros.ts b/test-types/import-in-cts/macros.cts
similarity index 74%
rename from test-d/macros.ts
rename to test-types/import-in-cts/macros.cts
index 26cf2780c..b8b8a8f47 100644
--- a/test-d/macros.ts
+++ b/test-types/import-in-cts/macros.cts
@@ -1,13 +1,14 @@
-/* eslint-disable no-lone-blocks, @typescript-eslint/no-empty-function */
+/* eslint-disable no-lone-blocks */
+import test, {ExecutionContext} from 'ava';
import {expectType} from 'tsd';
-import test, {ExecutionContext} from '..';
-
// Typed arguments through generics.
{
const hasLength = test.macro<[string, number]>((t, input, expected) => {
expectType(input);
expectType(expected);
+ // @ts-expect-error TS2345
+ t.is(input, expected);
});
test('bar has length 3', hasLength, 'bar', 3);
@@ -18,8 +19,10 @@ import test, {ExecutionContext} from '..';
exec(t, input, expected) {
expectType(input);
expectType(expected);
+ // @ts-expect-error TS2345
+ t.is(input, expected);
},
- title(providedTitle, input, expected) {
+ title(_providedTitle, input, expected) {
expectType(input);
expectType(expected);
return 'title';
@@ -31,15 +34,21 @@ import test, {ExecutionContext} from '..';
// Typed arguments in execution function.
{
- const hasLength = test.macro((t, input: string, expected: number) => {});
+ const hasLength = test.macro((t, input: string, expected: number) => {
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+ });
test('bar has length 3', hasLength, 'bar', 3);
}
{
const hasLength = test.macro({
- exec(t, input: string, expected: number) {},
- title(providedTitle, input, expected) {
+ exec(t, input: string, expected: number) {
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+ },
+ title(_providedTitle, input: string, expected: number) {
expectType(input);
expectType(expected);
return 'title';
@@ -54,6 +63,7 @@ import test, {ExecutionContext} from '..';
const hasLength = test.macro((t, input, expected) => {
expectType(input);
expectType(expected);
+ t.is(input, expected);
});
test('bar has length 3', hasLength, 'bar', 3);
@@ -61,7 +71,10 @@ import test, {ExecutionContext} from '..';
// Usable without title, even if the macro lacks a title function.
{
- const hasLength = test.macro<[string, number]>((t, input, expected) => {});
+ const hasLength = test.macro<[string, number]>((t, input, expected) => {
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+ });
test(hasLength, 'bar', 3);
}
@@ -69,7 +82,7 @@ import test, {ExecutionContext} from '..';
// No arguments
{
const pass = test.macro<[]>({ // eslint-disable-line @typescript-eslint/ban-types
- exec(t, ...args) {
+ exec(_t, ...args) {
expectType<[]>(args); // eslint-disable-line @typescript-eslint/ban-types
},
title(providedTitle, ...args) {
@@ -92,15 +105,22 @@ import test, {ExecutionContext} from '..';
}
// Inline function with explicit argument types.
-test('has length 3', (t: ExecutionContext, input: string, expected: number) => {}, 'bar', 3);
+test('has length 3', (t: ExecutionContext, input: string, expected: number) => {
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+}, 'bar', 3);
// Completely inferred arguments for inline functions.
test('has length 3', (t, input, expected) => {
expectType(input);
expectType(expected);
+ // @ts-expect-error TS2345
+ t.is(input, expected);
}, 'foo', 3);
test.skip('skip', (t, input, expected) => {
expectType(input);
expectType(expected);
+ // @ts-expect-error TS2345
+ t.is(input, expected);
}, 'foo', 3);
diff --git a/test-types/import-in-cts/plugin.cts b/test-types/import-in-cts/plugin.cts
new file mode 100644
index 000000000..f6ad0f19b
--- /dev/null
+++ b/test-types/import-in-cts/plugin.cts
@@ -0,0 +1,18 @@
+import plugin from 'ava/plugin';
+import {expectType} from 'tsd';
+
+expectType(plugin.registerSharedWorker({filename: '', supportedProtocols: ['ava-4']}));
+
+const factory: plugin.SharedWorker.Factory = ({negotiateProtocol}) => {
+ const protocol = negotiateProtocol(['ava-4']);
+ expectType(protocol);
+
+ (async () => {
+ for await (const w of protocol.testWorkers()) {
+ expectType<() => Promise>(w.teardown(() => {})); // eslint-disable-line @typescript-eslint/no-empty-function
+ expectType<() => Promise>(w.teardown(async () => {})); // eslint-disable-line @typescript-eslint/no-empty-function
+ }
+ })();
+};
+
+export default factory;
diff --git a/test-types/import-in-cts/snapshot.cts b/test-types/import-in-cts/snapshot.cts
new file mode 100644
index 000000000..ab166b253
--- /dev/null
+++ b/test-types/import-in-cts/snapshot.cts
@@ -0,0 +1,16 @@
+import test from 'ava';
+import {expectError} from 'tsd';
+
+test('snapshot', t => {
+ t.snapshot({foo: 'bar'});
+ t.snapshot(null, 'a snapshot with a message');
+ // @ts-expect-error TS2345
+ expectError(t.snapshot('hello world', null)); // eslint-disable-line @typescript-eslint/no-confusing-void-expression
+});
+
+test('snapshot.skip', t => {
+ t.snapshot.skip({foo: 'bar'});
+ t.snapshot.skip(null, 'a snapshot with a message');
+ // @ts-expect-error TS2345
+ expectError(t.snapshot.skip('hello world', null)); // eslint-disable-line @typescript-eslint/no-confusing-void-expression
+});
diff --git a/test-types/import-in-cts/teardown.cts b/test-types/import-in-cts/teardown.cts
new file mode 100644
index 000000000..baaa4628e
--- /dev/null
+++ b/test-types/import-in-cts/teardown.cts
@@ -0,0 +1,6 @@
+import test from 'ava';
+
+test('test', t => {
+ t.teardown(() => {}); // eslint-disable-line @typescript-eslint/no-empty-function
+ t.teardown(async () => {}); // eslint-disable-line @typescript-eslint/no-empty-function
+});
diff --git a/test-types/import-in-cts/throws.cts b/test-types/import-in-cts/throws.cts
new file mode 100644
index 000000000..126dd174b
--- /dev/null
+++ b/test-types/import-in-cts/throws.cts
@@ -0,0 +1,26 @@
+/* eslint-disable @typescript-eslint/no-empty-function */
+import test from 'ava';
+import {expectType} from 'tsd';
+
+class CustomError extends Error {
+ foo: string;
+
+ constructor() {
+ super();
+ this.foo = 'foo';
+ }
+}
+
+test('throws', t => {
+ expectType(t.throws(() => {}));
+ const error2: CustomError | undefined = t.throws(() => {});
+ expectType(error2);
+ expectType(t.throws(() => {}));
+});
+
+test('throwsAsync', async t => {
+ expectType(await t.throwsAsync(async () => {}));
+ expectType(await t.throwsAsync(async () => {}));
+ expectType(await t.throwsAsync(Promise.reject()));
+ expectType(await t.throwsAsync(Promise.reject()));
+});
diff --git a/test-types/import-in-cts/try-commit.cts b/test-types/import-in-cts/try-commit.cts
new file mode 100644
index 000000000..c207a050b
--- /dev/null
+++ b/test-types/import-in-cts/try-commit.cts
@@ -0,0 +1,67 @@
+import test, {ExecutionContext} from 'ava';
+import {expectType} from 'tsd';
+
+test('attempt', async t => {
+ const attempt = await t.try(
+ (u, a, b) => {
+ expectType(u);
+ expectType(a);
+ expectType(b);
+ },
+ 'string',
+ 6,
+ );
+ attempt.commit();
+});
+
+test('attempt with title', async t => {
+ const attempt = await t.try(
+ 'attempt title',
+ (u, a, b) => {
+ expectType(u);
+ expectType(a);
+ expectType(b);
+ },
+ 'string',
+ 6,
+ );
+ attempt.commit();
+});
+
+const lengthCheck = (t: ExecutionContext, a: string, b: number): void => {
+ t.is(a.length, b);
+};
+
+test('attempt with helper', async t => {
+ const attempt = await t.try(lengthCheck, 'string', 6);
+ attempt.commit();
+});
+
+test('attempt with title', async t => {
+ const attempt = await t.try('title', lengthCheck, 'string', 6);
+ attempt.commit();
+});
+
+test('all possible variants to pass to t.try', async t => {
+ // No params
+ void t.try(tt => tt.pass());
+
+ void t.try('test', tt => tt.pass());
+
+ // Some params
+ void t.try((tt, a, b) => tt.is(a.length, b), 'hello', 5);
+
+ void t.try('test', (tt, a, b) => tt.is(a.length, b), 'hello', 5);
+
+ // Macro with title
+ const macro1 = test.macro<[string, number]>({
+ exec: (tt, a, b) => tt.is(a.length, b),
+ title: (title, a, b) => `${title ? `${String(title)} ` : ''}str: "${String(a)}" with len: "${String(b)}"`,
+ });
+ const macro2 = test.macro<[string, number]>((tt, a, b) => tt.is(a.slice(b), ''));
+
+ void t.try(macro1, 'hello', 5);
+ void t.try(macro2, 'hello', 5);
+ void t.try('title', macro1, 'hello', 5);
+ void t.try('title', macro2, 'hello', 5);
+});
diff --git a/test-d/assertions-as-type-guards.ts b/test-types/module/assertions-as-type-guards.ts
similarity index 96%
rename from test-d/assertions-as-type-guards.ts
rename to test-types/module/assertions-as-type-guards.ts
index 364189b95..45f2518a5 100644
--- a/test-d/assertions-as-type-guards.ts
+++ b/test-types/module/assertions-as-type-guards.ts
@@ -1,7 +1,6 @@
+import test from 'ava';
import {expectType} from 'tsd';
-import test from '..';
-
type Expected = {foo: 'bar'};
const expected: Expected = {foo: 'bar'};
diff --git a/test-types/module/context.ts b/test-types/module/context.ts
new file mode 100644
index 000000000..b8d516a1f
--- /dev/null
+++ b/test-types/module/context.ts
@@ -0,0 +1,34 @@
+/* eslint-disable @typescript-eslint/no-empty-function */
+import type {ExecutionContext, TestFn} from 'ava';
+import anyTest from 'ava';
+import {expectError, expectType} from 'tsd';
+
+type Context = {
+ foo: string;
+};
+
+const test = anyTest as TestFn;
+
+const macro = test.macro((t, _expected: number) => {
+ expectType(t.context.foo);
+});
+
+test.beforeEach(t => {
+ expectType(t.context);
+});
+
+// @ts-expect-error TS2769
+expectError(test('foo is bar', macro, 'bar')); // eslint-disable-line @typescript-eslint/no-confusing-void-expression
+
+anyTest('default context is unknown', t => {
+ expectType(t.context);
+});
+
+// See https://github.com/avajs/ava/issues/2253
+type Covariant = {
+ bar: number;
+} & Context;
+
+const test2 = anyTest as TestFn;
+const hook = (_t: ExecutionContext) => {};
+test2.beforeEach(hook);
diff --git a/test-d/deep-equal.ts b/test-types/module/deep-equal.ts
similarity index 97%
rename from test-d/deep-equal.ts
rename to test-types/module/deep-equal.ts
index 7cc0f1b72..acb850262 100644
--- a/test-d/deep-equal.ts
+++ b/test-types/module/deep-equal.ts
@@ -1,7 +1,6 @@
+import test from 'ava';
import {expectType} from 'tsd';
-import test from '..';
-
test('actual extends expected', t => {
type Expected = {foo: [1, 2, 3]};
const expected: Expected = {foo: [1, 2, 3]};
diff --git a/test-d/implementation-result.ts b/test-types/module/implementation-result.ts
similarity index 70%
rename from test-d/implementation-result.ts
rename to test-types/module/implementation-result.ts
index e7a21ad52..ea3ccfcda 100644
--- a/test-d/implementation-result.ts
+++ b/test-types/module/implementation-result.ts
@@ -1,20 +1,20 @@
/* eslint-disable @typescript-eslint/no-empty-function */
-import test from '..';
+import test from 'ava';
-test('return a promise-like', t => ({
+test.after('return anything else', _t => ({
+ foo: 'bar',
+ subscribe() {},
+ then() {}, // eslint-disable-line unicorn/no-thenable
+}));
+
+test('return a promise-like', _t => ({
then(resolve) { // eslint-disable-line unicorn/no-thenable
resolve?.(); // eslint-disable-line @typescript-eslint/no-floating-promises
},
}));
-test('return a subscribable', t => ({
+test('return a subscribable', _t => ({
subscribe({complete}) {
complete();
},
}));
-
-test.after('return anything else', t => ({
- foo: 'bar',
- subscribe() {},
- then() {}, // eslint-disable-line unicorn/no-thenable
-}));
diff --git a/test-d/like.ts b/test-types/module/like.ts
similarity index 84%
rename from test-d/like.ts
rename to test-types/module/like.ts
index 47bfaf427..ecc641097 100644
--- a/test-d/like.ts
+++ b/test-types/module/like.ts
@@ -1,4 +1,4 @@
-import test from '..';
+import test from 'ava';
test('like', t => {
t.like({
@@ -21,5 +21,5 @@ test('like', t => {
const foo: Foo = {bar: 'bar'};
const {foo: _, ...expected} = foo;
- t.like({bar: 'bar'}, expected);
+ t.like(expected, {bar: 'bar'});
});
diff --git a/test-types/module/macros.ts b/test-types/module/macros.ts
new file mode 100644
index 000000000..f4fe2d667
--- /dev/null
+++ b/test-types/module/macros.ts
@@ -0,0 +1,127 @@
+/* eslint-disable no-lone-blocks */
+import type {ExecutionContext} from 'ava';
+import test from 'ava';
+import {expectType} from 'tsd';
+
+// Typed arguments through generics.
+{
+ const hasLength = test.macro<[string, number]>((t, input, expected) => {
+ expectType(input);
+ expectType(expected);
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+ });
+
+ test('bar has length 3', hasLength, 'bar', 3);
+}
+
+{
+ const hasLength = test.macro<[string, number]>({
+ exec(t, input, expected) {
+ expectType(input);
+ expectType(expected);
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+ },
+ title(_providedTitle, input, expected) {
+ expectType(input);
+ expectType(expected);
+ return 'title';
+ },
+ });
+
+ test('bar has length 3', hasLength, 'bar', 3);
+}
+
+// Typed arguments in execution function.
+{
+ const hasLength = test.macro((t, input: string, expected: number) => {
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+ });
+
+ test('bar has length 3', hasLength, 'bar', 3);
+}
+
+{
+ const hasLength = test.macro({
+ exec(t, input: string, expected: number) {
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+ },
+ title(_providedTitle, input: string, expected: number) {
+ expectType(input);
+ expectType(expected);
+ return 'title';
+ },
+ });
+
+ test('bar has length 3', hasLength, 'bar', 3);
+}
+
+// Untyped arguments
+{
+ const hasLength = test.macro((t, input, expected) => {
+ expectType(input);
+ expectType(expected);
+ t.is(input, expected);
+ });
+
+ test('bar has length 3', hasLength, 'bar', 3);
+}
+
+// Usable without title, even if the macro lacks a title function.
+{
+ const hasLength = test.macro<[string, number]>((t, input, expected) => {
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+ });
+
+ test(hasLength, 'bar', 3);
+}
+
+// No arguments
+{
+ const pass = test.macro<[]>({ // eslint-disable-line @typescript-eslint/ban-types
+ exec(_t, ...args) {
+ expectType<[]>(args); // eslint-disable-line @typescript-eslint/ban-types
+ },
+ title(providedTitle, ...args) {
+ expectType(providedTitle);
+ expectType<[]>(args); // eslint-disable-line @typescript-eslint/ban-types
+ return '';
+ },
+ });
+
+ test(pass);
+}
+
+// Without test.macro()
+{
+ const hasLength = (t: ExecutionContext, input: string, expected: number) => {
+ t.is(input.length, expected);
+ };
+
+ test('bar has length 3', hasLength, 'bar', 3);
+}
+
+// Inline function with explicit argument types.
+test('has length 3 (explicit)', (t: ExecutionContext, input: string, expected: number) => {
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+}, 'bar', 3);
+
+// Completely inferred arguments for inline functions.
+test('has length 3 (inferred)', (t, input, expected) => {
+ expectType(input);
+ expectType(expected);
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+}, 'foo', 3);
+
+test.skip('skip', (t, input, expected) => { // eslint-disable-line ava/no-skip-test
+ expectType(input);
+ expectType(expected);
+ // @ts-expect-error TS2345
+ t.is(input, expected);
+}, 'foo', 3);
diff --git a/test-d/plugin.ts b/test-types/module/plugin.ts
similarity index 89%
rename from test-d/plugin.ts
rename to test-types/module/plugin.ts
index cd6fd4413..c85f6fa35 100644
--- a/test-d/plugin.ts
+++ b/test-types/module/plugin.ts
@@ -1,7 +1,6 @@
+import * as plugin from 'ava/plugin';
import {expectType} from 'tsd';
-import * as plugin from '../plugin'; // eslint-disable-line import/extensions
-
expectType(plugin.registerSharedWorker({filename: '', supportedProtocols: ['ava-4']}));
const factory: plugin.SharedWorker.Factory = ({negotiateProtocol}) => {
@@ -15,3 +14,5 @@ const factory: plugin.SharedWorker.Factory = ({negotiateProtocol}) => {
}
})();
};
+
+export default factory;
diff --git a/test-d/snapshot.ts b/test-types/module/snapshot.ts
similarity index 86%
rename from test-d/snapshot.ts
rename to test-types/module/snapshot.ts
index 87e025aa8..ab166b253 100644
--- a/test-d/snapshot.ts
+++ b/test-types/module/snapshot.ts
@@ -1,15 +1,16 @@
+import test from 'ava';
import {expectError} from 'tsd';
-import test from '..';
-
test('snapshot', t => {
t.snapshot({foo: 'bar'});
t.snapshot(null, 'a snapshot with a message');
+ // @ts-expect-error TS2345
expectError(t.snapshot('hello world', null)); // eslint-disable-line @typescript-eslint/no-confusing-void-expression
});
test('snapshot.skip', t => {
t.snapshot.skip({foo: 'bar'});
t.snapshot.skip(null, 'a snapshot with a message');
+ // @ts-expect-error TS2345
expectError(t.snapshot.skip('hello world', null)); // eslint-disable-line @typescript-eslint/no-confusing-void-expression
});
diff --git a/test-d/teardown.ts b/test-types/module/teardown.ts
similarity index 89%
rename from test-d/teardown.ts
rename to test-types/module/teardown.ts
index 4627d1798..baaa4628e 100644
--- a/test-d/teardown.ts
+++ b/test-types/module/teardown.ts
@@ -1,4 +1,4 @@
-import test from '..';
+import test from 'ava';
test('test', t => {
t.teardown(() => {}); // eslint-disable-line @typescript-eslint/no-empty-function
diff --git a/test-d/throws.ts b/test-types/module/throws.ts
similarity index 97%
rename from test-d/throws.ts
rename to test-types/module/throws.ts
index 3e7addb45..126dd174b 100644
--- a/test-d/throws.ts
+++ b/test-types/module/throws.ts
@@ -1,8 +1,7 @@
/* eslint-disable @typescript-eslint/no-empty-function */
+import test from 'ava';
import {expectType} from 'tsd';
-import test from '..';
-
class CustomError extends Error {
foo: string;
diff --git a/test-d/try-commit.ts b/test-types/module/try-commit.ts
similarity index 80%
rename from test-d/try-commit.ts
rename to test-types/module/try-commit.ts
index adc7bde69..e726ce2c7 100644
--- a/test-d/try-commit.ts
+++ b/test-types/module/try-commit.ts
@@ -1,7 +1,7 @@
+import type {ExecutionContext} from 'ava';
+import test from 'ava';
import {expectType} from 'tsd';
-import test, {ExecutionContext} from '..';
-
test('attempt', async t => {
const attempt = await t.try(
(u, a, b) => {
@@ -38,7 +38,7 @@ test('attempt with helper', async t => {
attempt.commit();
});
-test('attempt with title', async t => {
+test('attempt with title and helper', async t => {
const attempt = await t.try('title', lengthCheck, 'string', 6);
attempt.commit();
});
@@ -55,11 +55,13 @@ test('all possible variants to pass to t.try', async t => {
void t.try('test', (tt, a, b) => tt.is(a.length, b), 'hello', 5);
// Macro with title
- const macro1 = test.macro<[string, number]>({
+ const macro1 = test.macro<[string, number]>({ // eslint-disable-line ava/no-nested-tests
exec: (tt, a, b) => tt.is(a.length, b),
title: (title, a, b) => `${title ? `${String(title)} ` : ''}str: "${String(a)}" with len: "${String(b)}"`,
});
- const macro2 = test.macro<[string, number]>((tt, a, b) => tt.is(a.slice(b), ''));
+ const macro2 = test.macro<[string, number]>((tt, a, b) => { // eslint-disable-line ava/no-nested-tests
+ tt.is(a.slice(b), '');
+ });
void t.try(macro1, 'hello', 5);
void t.try(macro2, 'hello', 5);
diff --git a/test/cjs-default/fixtures/test.cjs b/test/cjs-default/fixtures/test.cjs
index 1482fcef6..597f7d610 100644
--- a/test/cjs-default/fixtures/test.cjs
+++ b/test/cjs-default/fixtures/test.cjs
@@ -15,6 +15,6 @@ test('not enumerable', t => {
});
test('main export equals the ESM export', async t => {
- const {default: exported} = await import('ava'); // eslint-disable-line node/no-unsupported-features/es-syntax
+ const {default: exported} = await import('ava');
t.is(test, exported);
});
diff --git a/test/config/integration.js b/test/config/integration.js
index 0e97f96cb..a36676e9a 100644
--- a/test/config/integration.js
+++ b/test/config/integration.js
@@ -2,7 +2,7 @@ import fs from 'node:fs';
import path from 'node:path';
import test from '@ava/test';
-import tempy from 'tempy';
+import {temporaryDirectory} from 'tempy';
import {cwd, fixture} from '../helpers/exec.js';
@@ -64,7 +64,7 @@ test('looks for config files outside of project directory', async t => {
});
test('use current working directory if `package.json` is not found', async t => {
- const cwd = tempy.directory();
+ const cwd = temporaryDirectory();
const testFilePath = path.join(cwd, 'test.js');
fs.writeFileSync(testFilePath, 'const test = require(process.env.TEST_AVA_IMPORT_FROM);\ntest(\'test name\', t => { t.pass(); });');
diff --git a/test/configurable-module-format/custom.js b/test/configurable-module-format/custom.js
index 9c6f461c1..aa99fff81 100644
--- a/test/configurable-module-format/custom.js
+++ b/test/configurable-module-format/custom.js
@@ -2,16 +2,16 @@ import test from '@ava/test';
import {fixture} from '../helpers/exec.js';
-test('load ts as commonjs (using an extensions array)', async t => {
- const result = await fixture(['*.ts', '--config', 'array-custom.config.js']);
+test('load cts as commonjs (using an extensions array)', async t => {
+ const result = await fixture(['*.cts', '--config', 'array-custom.config.js']);
const files = new Set(result.stats.passed.map(({file}) => file));
t.is(files.size, 1);
- t.true(files.has('test.ts'));
+ t.true(files.has('test.cts'));
});
-test('load ts as commonjs (using an extensions object)', async t => {
- const result = await fixture(['*.ts', '--config', 'object-custom.config.js']);
+test('load cts as commonjs (using an extensions object)', async t => {
+ const result = await fixture(['*.cts', '--config', 'object-custom.config.js']);
const files = new Set(result.stats.passed.map(({file}) => file));
t.is(files.size, 1);
- t.true(files.has('test.ts'));
+ t.true(files.has('test.cts'));
});
diff --git a/test/configurable-module-format/fixtures/array-custom.config.js b/test/configurable-module-format/fixtures/array-custom.config.js
index 7257e6860..2e2a5fd57 100644
--- a/test/configurable-module-format/fixtures/array-custom.config.js
+++ b/test/configurable-module-format/fixtures/array-custom.config.js
@@ -1,3 +1,3 @@
export default {
- extensions: ['js', 'ts'],
+ extensions: ['js', 'cts'],
};
diff --git a/test/configurable-module-format/fixtures/object-custom.config.js b/test/configurable-module-format/fixtures/object-custom.config.js
index 14fc59704..a859b9d69 100644
--- a/test/configurable-module-format/fixtures/object-custom.config.js
+++ b/test/configurable-module-format/fixtures/object-custom.config.js
@@ -1,6 +1,6 @@
export default {
extensions: {
js: true,
- ts: 'commonjs',
+ cts: 'commonjs',
},
};
diff --git a/test/configurable-module-format/fixtures/test.cts b/test/configurable-module-format/fixtures/test.cts
new file mode 100644
index 000000000..12216fccf
--- /dev/null
+++ b/test/configurable-module-format/fixtures/test.cts
@@ -0,0 +1,8 @@
+const test = require('ava'); // eslint-disable-line ava/no-ignored-test-files
+
+// @ts-expect-error TS2345
+test('always passing test', t => {
+ const numberWithTypes = 0;
+
+ t.is(numberWithTypes, 0);
+});
diff --git a/test/configurable-module-format/fixtures/test.ts b/test/configurable-module-format/fixtures/test.ts
deleted file mode 100644
index d206a854b..000000000
--- a/test/configurable-module-format/fixtures/test.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-/* eslint-disable @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call */
-const test = require('ava'); // eslint-disable-line @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires, ava/no-ignored-test-files, unicorn/prefer-module
-
-test('always passing test', t => {
- const numberWithTypes = 0;
-
- t.is(numberWithTypes, 0);
-});
diff --git a/test/helpers/exec.js b/test/helpers/exec.js
index 01c1300a5..4e4dbd7ec 100644
--- a/test/helpers/exec.js
+++ b/test/helpers/exec.js
@@ -69,7 +69,10 @@ export const fixture = async (args, options = {}) => {
const stats = {
failed: [],
failedHooks: [],
+ internalErrors: [],
+ processExits: [],
passed: [],
+ selectedTestCount: 0,
sharedWorkerErrors: [],
skipped: [],
todo: [],
@@ -92,7 +95,23 @@ export const fixture = async (args, options = {}) => {
break;
}
+ case 'internal-error': {
+ const {testFile} = statusEvent;
+ const statObject = {file: normalizePath(workingDir, testFile)};
+ errors.set(statObject, statusEvent.err);
+ stats.internalErrors.push(statObject);
+ break;
+ }
+
+ case 'process-exit': {
+ const {testFile} = statusEvent;
+ const statObject = {file: normalizePath(workingDir, testFile)};
+ stats.processExits.push(statObject);
+ break;
+ }
+
case 'selected-test': {
+ stats.selectedTestCount++;
if (statusEvent.skip) {
const {title, testFile} = statusEvent;
stats.skipped.push({title, file: normalizePath(workingDir, testFile)});
diff --git a/test/helpers/with-temporary-fixture.js b/test/helpers/with-temporary-fixture.js
index ee2ec4443..f92d8382e 100644
--- a/test/helpers/with-temporary-fixture.js
+++ b/test/helpers/with-temporary-fixture.js
@@ -1,9 +1,9 @@
import fse from 'fs-extra';
-import tempy from 'tempy';
+import {temporaryDirectoryTask} from 'tempy';
export async function withTemporaryFixture(cwd, task) {
let result;
- await tempy.directory.task(async temporary => {
+ await temporaryDirectoryTask(async temporary => {
await fse.copy(cwd, temporary);
result = await task(temporary);
});
diff --git a/test/test-process-exit/fixtures/ava.config.js b/test/test-process-exit/fixtures/ava.config.js
new file mode 100644
index 000000000..1669aaefe
--- /dev/null
+++ b/test/test-process-exit/fixtures/ava.config.js
@@ -0,0 +1,3 @@
+export default {
+ files: ['*.js'],
+};
diff --git a/test/test-process-exit/fixtures/package.json b/test/test-process-exit/fixtures/package.json
new file mode 100644
index 000000000..bedb411a9
--- /dev/null
+++ b/test/test-process-exit/fixtures/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/test/test-process-exit/fixtures/process-exit.js b/test/test-process-exit/fixtures/process-exit.js
new file mode 100644
index 000000000..dd9e77b7a
--- /dev/null
+++ b/test/test-process-exit/fixtures/process-exit.js
@@ -0,0 +1,17 @@
+import test from 'ava';
+
+test('good', t => {
+ t.pass();
+});
+
+test('process.exit', async t => {
+ t.pass();
+ await new Promise(resolve => {
+ setImmediate(resolve);
+ });
+ process.exit(0); // eslint-disable-line unicorn/no-process-exit
+});
+
+test('still good', t => {
+ t.pass();
+});
diff --git a/test/test-process-exit/test.js b/test/test-process-exit/test.js
new file mode 100644
index 000000000..46cf741e9
--- /dev/null
+++ b/test/test-process-exit/test.js
@@ -0,0 +1,12 @@
+import test from '@ava/test';
+
+import {fixture} from '../helpers/exec.js';
+
+test('process.exit is intercepted', async t => {
+ const result = await t.throwsAsync(fixture(['process-exit.js']));
+ t.true(result.failed);
+ t.like(result, {timedOut: false, isCanceled: false, killed: false});
+ t.is(result.stats.selectedTestCount, 3);
+ t.is(result.stats.passed.length, 2);
+ t.is(result.stats.processExits.length, 1);
+});
diff --git a/tsconfig.json b/tsconfig.json
index 4880954bb..d59b5984c 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,7 +1,13 @@
{
+ "extends": "@sindresorhus/tsconfig",
+ "compilerOptions": {
+ // See . This does not
+ // seem solved with 4.8.3.
+ "forceConsistentCasingInFileNames": false,
+ },
"include": [
"test",
- "test-d",
- "test-tap"
+ "test-tap",
+ "test-types"
]
}
diff --git a/types/assertions.d.ts b/types/assertions.d.cts
similarity index 93%
rename from types/assertions.d.ts
rename to types/assertions.d.cts
index 68fd8d85b..08c3e05f1 100644
--- a/types/assertions.d.ts
+++ b/types/assertions.d.cts
@@ -18,7 +18,7 @@ export type ThrowsExpectation = {
name?: string;
};
-export interface Assertions {
+export type Assertions = {
/**
* Assert that `actual` is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy), returning a boolean
* indicating whether the assertion passed.
@@ -118,9 +118,9 @@ export interface Assertions {
* indicating whether the assertion passed.
*/
truthy: TruthyAssertion;
-}
+};
-export interface AssertAssertion {
+export type AssertAssertion = {
/**
* Assert that `actual` is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy), returning a boolean
* indicating whether the assertion passed.
@@ -129,9 +129,9 @@ export interface AssertAssertion {
/** Skip this assertion. */
skip(actual: any, message?: string): void;
-}
+};
-export interface DeepEqualAssertion {
+export type DeepEqualAssertion = {
/**
* Assert that `actual` is [deeply equal](https://github.com/concordancejs/concordance#comparison-details) to
* `expected`, returning a boolean indicating whether the assertion passed.
@@ -152,9 +152,9 @@ export interface DeepEqualAssertion {
/** Skip this assertion. */
skip(actual: any, expected: any, message?: string): void;
-}
+};
-export interface LikeAssertion {
+export type LikeAssertion = {
/**
* Assert that `value` is like `selector`, returning a boolean indicating whether the assertion passed.
*/
@@ -162,17 +162,17 @@ export interface LikeAssertion {
/** Skip this assertion. */
skip(value: any, selector: any, message?: string): void;
-}
+};
-export interface FailAssertion {
+export type FailAssertion = {
/** Fail the test, always returning `false`. */
(message?: string): boolean;
/** Skip this assertion. */
skip(message?: string): void;
-}
+};
-export interface FalseAssertion {
+export type FalseAssertion = {
/**
* Assert that `actual` is strictly false, returning a boolean indicating whether the assertion passed.
*/
@@ -180,9 +180,9 @@ export interface FalseAssertion {
/** Skip this assertion. */
skip(actual: any, message?: string): void;
-}
+};
-export interface FalsyAssertion {
+export type FalsyAssertion = {
/**
* Assert that `actual` is [falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy), returning a boolean
* indicating whether the assertion passed.
@@ -191,9 +191,9 @@ export interface FalsyAssertion {
/** Skip this assertion. */
skip(actual: any, message?: string): void;
-}
+};
-export interface IsAssertion {
+export type IsAssertion = {
/**
* Assert that `actual` is [the same
* value](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is) as `expected`,
@@ -203,9 +203,9 @@ export interface IsAssertion {
/** Skip this assertion. */
skip(actual: any, expected: any, message?: string): void;
-}
+};
-export interface NotAssertion {
+export type NotAssertion = {
/**
* Assert that `actual` is not [the same
* value](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is) as `expected`,
@@ -215,9 +215,9 @@ export interface NotAssertion {
/** Skip this assertion. */
skip(actual: any, expected: any, message?: string): void;
-}
+};
-export interface NotDeepEqualAssertion {
+export type NotDeepEqualAssertion = {
/**
* Assert that `actual` is not [deeply equal](https://github.com/concordancejs/concordance#comparison-details) to
* `expected`, returning a boolean indicating whether the assertion passed.
@@ -226,9 +226,9 @@ export interface NotDeepEqualAssertion {
/** Skip this assertion. */
skip(actual: any, expected: any, message?: string): void;
-}
+};
-export interface NotRegexAssertion {
+export type NotRegexAssertion = {
/**
* Assert that `string` does not match the regular expression, returning a boolean indicating whether the assertion
* passed.
@@ -237,17 +237,17 @@ export interface NotRegexAssertion {
/** Skip this assertion. */
skip(string: string, regex: RegExp, message?: string): void;
-}
+};
-export interface NotThrowsAssertion {
+export type NotThrowsAssertion = {
/** Assert that the function does not throw. */
(fn: () => any, message?: string): void;
/** Skip this assertion. */
skip(fn: () => any, message?: string): void;
-}
+};
-export interface NotThrowsAsyncAssertion {
+export type NotThrowsAsyncAssertion = {
/** Assert that the async function does not throw. You must await the result. */
(fn: () => PromiseLike, message?: string): Promise;
@@ -256,17 +256,17 @@ export interface NotThrowsAsyncAssertion {
/** Skip this assertion. */
skip(nonThrower: any, message?: string): void;
-}
+};
-export interface PassAssertion {
+export type PassAssertion = {
/** Count a passing assertion, always returning `true`. */
(message?: string): boolean;
/** Skip this assertion. */
skip(message?: string): void;
-}
+};
-export interface RegexAssertion {
+export type RegexAssertion = {
/**
* Assert that `string` matches the regular expression, returning a boolean indicating whether the assertion passed.
*/
@@ -274,9 +274,9 @@ export interface RegexAssertion {
/** Skip this assertion. */
skip(string: string, regex: RegExp, message?: string): void;
-}
+};
-export interface SnapshotAssertion {
+export type SnapshotAssertion = {
/**
* Assert that `expected` is [deeply equal](https://github.com/concordancejs/concordance#comparison-details) to a
* previously recorded [snapshot](https://github.com/concordancejs/concordance#serialization-details), or if
@@ -286,9 +286,9 @@ export interface SnapshotAssertion {
/** Skip this assertion. */
skip(expected: any, message?: string): void;
-}
+};
-export interface ThrowsAssertion {
+export type ThrowsAssertion = {
/**
* Assert that the function throws [an error](https://www.npmjs.com/package/is-error). If so, returns the error value.
* The error must satisfy all expectations. Returns undefined when the assertion fails.
@@ -297,9 +297,9 @@ export interface ThrowsAssertion {
/** Skip this assertion. */
skip(fn: () => any, expectations?: any, message?: string): void;
-}
+};
-export interface ThrowsAsyncAssertion {
+export type ThrowsAsyncAssertion = {
/**
* Assert that the async function throws [an error](https://www.npmjs.com/package/is-error). If so, returns the error
* value. Returns undefined when the assertion fails. You must await the result. The error must satisfy all expectations.
@@ -315,9 +315,9 @@ export interface ThrowsAsyncAssertion {
/** Skip this assertion. */
skip(thrower: any, expectations?: any, message?: string): void;
-}
+};
-export interface TrueAssertion {
+export type TrueAssertion = {
/**
* Assert that `actual` is strictly true, returning a boolean indicating whether the assertion passed.
*/
@@ -325,9 +325,9 @@ export interface TrueAssertion {
/** Skip this assertion. */
skip(actual: any, message?: string): void;
-}
+};
-export interface TruthyAssertion {
+export type TruthyAssertion = {
/**
* Assert that `actual` is [truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy), returning a boolean
* indicating whether the assertion passed.
@@ -336,4 +336,4 @@ export interface TruthyAssertion {
/** Skip this assertion. */
skip(actual: any, message?: string): void;
-}
+};
diff --git a/types/shared-worker.d.cts b/types/shared-worker.d.cts
new file mode 100644
index 000000000..bcb57d99c
--- /dev/null
+++ b/types/shared-worker.d.cts
@@ -0,0 +1,74 @@
+import type {URL} from 'node:url';
+
+export namespace SharedWorker {
+ export type ProtocolIdentifier = 'ava-4';
+
+ export type FactoryOptions = {
+ negotiateProtocol (supported: readonly ['ava-4']): Protocol;
+ // Add overloads for additional protocols.
+ };
+
+ export type Factory = (options: FactoryOptions) => void;
+
+ export type Protocol = {
+ readonly initialData: Data;
+ readonly protocol: 'ava-4';
+ broadcast: (data: Data) => BroadcastMessage;
+ ready: () => Protocol;
+ subscribe: () => AsyncIterableIterator>;
+ testWorkers: () => AsyncIterableIterator>;
+ };
+
+ export type BroadcastMessage = {
+ readonly id: string;
+ replies: () => AsyncIterableIterator>;
+ };
+
+ export type PublishedMessage = {
+ readonly id: string;
+ replies: () => AsyncIterableIterator>;
+ };
+
+ export type ReceivedMessage = {
+ readonly data: Data;
+ readonly id: string;
+ readonly testWorker: TestWorker;
+ reply: (data: Data) => PublishedMessage;
+ };
+
+ export type TestWorker = {
+ readonly id: string;
+ readonly file: string;
+ publish: (data: Data) => PublishedMessage;
+ subscribe: () => AsyncIterableIterator>;
+ teardown: (fn: (() => Promise) | (() => void)) => () => Promise;
+ };
+
+ export namespace Plugin {
+ export type RegistrationOptions = {
+ readonly filename: string | URL;
+ readonly initialData?: Data;
+ readonly supportedProtocols: readonly Identifier[];
+ readonly teardown?: () => void;
+ };
+
+ export type Protocol = {
+ readonly available: Promise;
+ readonly currentlyAvailable: boolean;
+ readonly protocol: 'ava-4';
+ publish: (data: Data) => PublishedMessage;
+ subscribe: () => AsyncIterableIterator>;
+ };
+
+ export type PublishedMessage = {
+ readonly id: string;
+ replies: () => AsyncIterableIterator>;
+ };
+
+ export type ReceivedMessage = {
+ readonly data: Data;
+ readonly id: string;
+ reply: (data: Data) => PublishedMessage;
+ };
+ }
+}
diff --git a/types/subscribable.d.ts b/types/subscribable.d.cts
similarity index 70%
rename from types/subscribable.d.ts
rename to types/subscribable.d.cts
index 3a3399bca..42bb0f17c 100644
--- a/types/subscribable.d.ts
+++ b/types/subscribable.d.cts
@@ -1,6 +1,6 @@
-export interface Subscribable {
+export type Subscribable = {
subscribe(observer: {
error(error: any): void;
complete(): void;
}): void;
-}
+};
diff --git a/types/test-fn.d.ts b/types/test-fn.d.cts
similarity index 90%
rename from types/test-fn.d.ts
rename to types/test-fn.d.cts
index 730651ddb..8eb16785d 100644
--- a/types/test-fn.d.ts
+++ b/types/test-fn.d.cts
@@ -1,9 +1,9 @@
-import type {Assertions} from './assertions.js';
-import type {Subscribable} from './subscribable.js';
-import type {TryFn} from './try-fn.js';
+import type {Assertions} from './assertions.cjs';
+import type {Subscribable} from './subscribable.cjs';
+import type {TryFn} from './try-fn.cjs';
/** The `t` value passed to test & hook implementations. */
-export interface ExecutionContext extends Assertions {
+export type ExecutionContext = {
/** Test context, shared with hooks. */
context: Context;
@@ -18,17 +18,17 @@ export interface ExecutionContext extends Assertions {
readonly teardown: TeardownFn;
readonly timeout: TimeoutFn;
readonly try: TryFn;
-}
+} & Assertions;
-export interface LogFn {
+export type LogFn = {
/** Log one or more values. */
(...values: any[]): void;
/** Skip logging. */
skip(...values: any[]): void;
-}
+};
-export interface PlanFn {
+export type PlanFn = {
/**
* Plan how many assertion there are in the test. The test will fail if the actual assertion count doesn't match the
* number of planned assertions. See [assertion planning](https://github.com/avajs/ava#assertion-planning).
@@ -37,7 +37,7 @@ export interface PlanFn {
/** Don't plan assertions. */
skip(count: number): void;
-}
+};
/**
* Set a timeout for the test, in milliseconds. The test will fail if the timeout is exceeded.
@@ -67,7 +67,7 @@ export type Macro = {
/** A test or hook implementation. */
export type Implementation = ImplementationFn | Macro;
-export interface TestFn {
+export type TestFn = {
/** Declare a concurrent test. Additional arguments are passed to the implementation or macro. */
(title: string, implementation: Implementation, ...args: Args): void;
@@ -88,9 +88,9 @@ export interface TestFn {
serial: SerialFn;
skip: SkipFn;
todo: TodoFn;
-}
+};
-export interface AfterFn {
+export type AfterFn = {
/**
* Declare a hook that is run once, after all tests have passed.
* Additional arguments are passed to the implementation or macro.
@@ -105,9 +105,9 @@ export interface AfterFn {
always: AlwaysInterface;
skip: HookSkipFn;
-}
+};
-export interface AlwaysInterface {
+export type AlwaysInterface = {
/**
* Declare a hook that is run once, after all tests are done.
* Additional arguments are passed to the implementation or macro.
@@ -121,9 +121,9 @@ export interface AlwaysInterface {
(implementation: Implementation, ...args: Args): void;
skip: HookSkipFn;
-}
+};
-export interface BeforeFn {
+export type BeforeFn = {
/**
* Declare a hook that is run once, before all tests.
* Additional arguments are passed to the implementation or macro.
@@ -137,9 +137,9 @@ export interface BeforeFn {
(implementation: Implementation, ...args: Args): void;
skip: HookSkipFn;
-}
+};
-export interface FailingFn {
+export type FailingFn = {
/**
* Declare a concurrent test that is expected to fail.
* Additional arguments are passed to the implementation or macro.
@@ -154,17 +154,17 @@ export interface FailingFn {
only: OnlyFn;
skip: SkipFn;
-}
+};
-export interface HookSkipFn {
+export type HookSkipFn = {
/** Skip this hook. */
(title: string, implementation: Implementation, ...args: Args): void;
/** Skip this hook. */
(implementation: Implementation, ...args: Args): void;
-}
+};
-export interface OnlyFn {
+export type OnlyFn = {
/**
* Declare a test. Only this test and others declared with `.only()` are run.
* Additional arguments are passed to the implementation or macro.
@@ -176,9 +176,9 @@ export interface OnlyFn {
* Additional arguments are passed to the macro. The macro is responsible for generating a unique test title.
*/
(macro: Macro, ...args: Args): void;
-}
+};
-export interface SerialFn {
+export type SerialFn = {
/** Declare a serial test. Additional arguments are passed to the implementation or macro. */
(title: string, implementation: Implementation, ...args: Args): void;
@@ -195,15 +195,15 @@ export interface SerialFn {
only: OnlyFn;
skip: SkipFn;
todo: TodoFn;
-}
+};
-export interface SkipFn {
+export type SkipFn = {
/** Skip this test. */
(title: string, implementation: Implementation, ...args: Args): void;
/** Skip this test. */
(macro: Macro, ...args: Args): void;
-}
+};
/** Declare a test that should be implemented later. */
export type TodoFn = (title: string) => void;
@@ -216,16 +216,16 @@ export type MacroDeclarationOptions =
title: TitleFn;
};
-export interface MacroFn {
+export type MacroFn = {
/** Declare a reusable test implementation. */
(/** The function that is executed when the macro is used. */ exec: ImplementationFn): Macro;
(declaration: MacroDeclarationOptions): Macro;
-}
+};
-export interface Meta {
+export type Meta = {
/** Path to the test file being executed. */
file: string;
/** Directory where snapshots are stored. */
snapshotDirectory: string;
-}
+};
diff --git a/types/try-fn.d.ts b/types/try-fn.d.cts
similarity index 87%
rename from types/try-fn.d.ts
rename to types/try-fn.d.cts
index 8009df0c9..802c834db 100644
--- a/types/try-fn.d.ts
+++ b/types/try-fn.d.cts
@@ -1,4 +1,4 @@
-import type {Implementation} from './test-fn.js';
+import type {Implementation} from './test-fn.cjs';
export type CommitDiscardOptions = {
/**
@@ -7,9 +7,9 @@ export type CommitDiscardOptions = {
retainLogs?: boolean;
};
-export interface AssertionError extends Error {}
+export type AssertionError = Record & Error;
-export interface TryResult {
+export type TryResult = {
/**
* Title of the attempt, helping you tell attempts aparts.
*/
@@ -40,9 +40,9 @@ export interface TryResult {
* Discard the attempt.
*/
discard(options?: CommitDiscardOptions): void;
-}
+};
-export interface TryFn {
+export type TryFn = {
/**
* Attempt to run some assertions. The result must be explicitly committed or discarded or else
* the test will fail. The title may help distinguish attempts from one another.
@@ -54,5 +54,5 @@ export interface TryFn {
* the test will fail.
*/
(fn: Implementation, ...args: Args): Promise;
-}
+};