lib: restructure assert to become a class · nodejs/node@3c88b76

@@ -149,6 +149,8 @@ added: v0.1.21

149149

* `operator` {string} The `operator` property on the error instance.

150150

* `stackStartFn` {Function} If provided, the generated stack trace omits

151151

frames before this function.

152+

* `diff` {string} If set to `'full'`, shows the full diff in assertion errors. Defaults to `'simple'`.

153+

Accepted values: `'simple'`, `'full'`.

152154153155

A subclass of {Error} that indicates the failure of an assertion.

154156

@@ -215,6 +217,51 @@ try {

215217

}

216218

```

217219220+

## Class: `assert.Assert`

221+222+

<!-- YAML

223+

added: REPLACEME

224+

-->

225+226+

The `Assert` class allows creating independent assertion instances with custom options.

227+228+

### `new assert.Assert([options])`

229+230+

* `options` {Object}

231+

* `diff` {string} If set to `'full'`, shows the full diff in assertion errors. Defaults to `'simple'`.

232+

Accepted values: `'simple'`, `'full'`.

233+

* `strict` {boolean} If set to `true`, non-strict methods behave like their

234+

corresponding strict methods. Defaults to `true`.

235+236+

Creates a new assertion instance. The `diff` option controls the verbosity of diffs in assertion error messages.

237+238+

```js

239+

const { Assert } = require('node:assert');

240+

const assertInstance = new Assert({ diff: 'full' });

241+

assertInstance.deepStrictEqual({ a: 1 }, { a: 2 });

242+

// Shows a full diff in the error message.

243+

```

244+245+

**Important**: When destructuring assertion methods from an `Assert` instance,

246+

the methods lose their connection to the instance's configuration options (such as `diff` and `strict` settings).

247+

The destructured methods will fall back to default behavior instead.

248+249+

```js

250+

const myAssert = new Assert({ diff: 'full' });

251+252+

// This works as expected - uses 'full' diff

253+

myAssert.strictEqual({ a: 1 }, { b: { c: 1 } });

254+255+

// This loses the 'full' diff setting - falls back to default 'simple' diff

256+

const { strictEqual } = myAssert;

257+

strictEqual({ a: 1 }, { b: { c: 1 } });

258+

```

259+260+

When destructured, methods lose access to the instance's `this` context and revert to default assertion behavior

261+

(diff: 'simple', non-strict mode).

262+

To maintain custom options when using destructured methods, avoid

263+

destructuring and call methods directly on the instance.

264+218265

## Class: `assert.CallTracker`

219266220267

<!-- YAML