mocha 10.5.1 → 10.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -6,7 +6,7 @@
6
6
 
7
7
  'use strict';
8
8
 
9
- const {type} = require('../utils');
9
+ const {type, breakCircularDeps} = require('../utils');
10
10
  const {createInvalidArgumentTypeError} = require('../errors');
11
11
  // this is not named `mocha:parallel:serializer` because it's noisy and it's
12
12
  // helpful to be able to write `DEBUG=mocha:parallel*` and get everything else.
@@ -188,14 +188,9 @@ class SerializableEvent {
188
188
  * @param {Array<object|string>} pairs - List of parent/key tuples to process; modified in-place. This JSDoc type is an approximation
189
189
  * @param {object} parent - Some parent object
190
190
  * @param {string} key - Key to inspect
191
- * @param {WeakSet<Object>} seenObjects - For avoiding circular references
192
191
  */
193
- static _serialize(pairs, parent, key, seenObjects) {
192
+ static _serialize(pairs, parent, key) {
194
193
  let value = parent[key];
195
- if (seenObjects.has(value)) {
196
- parent[key] = Object.create(null);
197
- return;
198
- }
199
194
  let _type = type(value);
200
195
  if (_type === 'error') {
201
196
  // we need to reference the stack prop b/c it's lazily-loaded.
@@ -263,13 +258,14 @@ class SerializableEvent {
263
258
  error: this.originalError
264
259
  });
265
260
 
261
+ // mutates the object
262
+ breakCircularDeps(result);
263
+
266
264
  const pairs = Object.keys(result).map(key => [result, key]);
267
- const seenObjects = new WeakSet();
268
265
 
269
266
  let pair;
270
267
  while ((pair = pairs.shift())) {
271
- SerializableEvent._serialize(pairs, ...pair, seenObjects);
272
- seenObjects.add(pair[0]);
268
+ SerializableEvent._serialize(pairs, ...pair);
273
269
  }
274
270
 
275
271
  this.data = result.data;
package/lib/utils.js CHANGED
@@ -647,3 +647,36 @@ exports.assignNewMochaID = obj => {
647
647
  */
648
648
  exports.getMochaID = obj =>
649
649
  obj && typeof obj === 'object' ? obj[MOCHA_ID_PROP_NAME] : undefined;
650
+
651
+ /**
652
+ * Replaces any detected circular dependency with the string '[Circular]'
653
+ * Mutates original object
654
+ * @param inputObj {*}
655
+ * @returns {*}
656
+ */
657
+ exports.breakCircularDeps = inputObj => {
658
+ const seen = new Set();
659
+
660
+ function _breakCircularDeps(obj) {
661
+ if (obj && typeof obj !== 'object') {
662
+ return obj;
663
+ }
664
+
665
+ if (seen.has(obj)) {
666
+ return '[Circular]';
667
+ }
668
+
669
+ seen.add(obj);
670
+ for (const k in obj) {
671
+ if (Object.prototype.hasOwnProperty.call(obj, k)) {
672
+ obj[k] = _breakCircularDeps(obj[k], k);
673
+ }
674
+ }
675
+
676
+ // deleting means only a seen object that is its own child will be detected
677
+ seen.delete(obj);
678
+ return obj;
679
+ }
680
+
681
+ return _breakCircularDeps(inputObj);
682
+ };
package/mocha.js CHANGED
@@ -1,4 +1,4 @@
1
- // mocha@10.5.1 in javascript ES2018
1
+ // mocha@10.6.0 in javascript ES2018
2
2
  (function (global, factory) {
3
3
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
4
4
  typeof define === 'function' && define.amd ? define(factory) :
@@ -5820,6 +5820,8 @@
5820
5820
  /*istanbul ignore end*/
5821
5821
  diff: function diff(oldString, newString) {
5822
5822
  /*istanbul ignore start*/
5823
+ var _options$timeout;
5824
+
5823
5825
  var
5824
5826
  /*istanbul ignore end*/
5825
5827
  options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
@@ -5853,84 +5855,123 @@
5853
5855
  oldLen = oldString.length;
5854
5856
  var editLength = 1;
5855
5857
  var maxEditLength = newLen + oldLen;
5858
+
5859
+ if (options.maxEditLength) {
5860
+ maxEditLength = Math.min(maxEditLength, options.maxEditLength);
5861
+ }
5862
+
5863
+ var maxExecutionTime =
5864
+ /*istanbul ignore start*/
5865
+ (_options$timeout =
5866
+ /*istanbul ignore end*/
5867
+ options.timeout) !== null && _options$timeout !== void 0 ? _options$timeout : Infinity;
5868
+ var abortAfterTimestamp = Date.now() + maxExecutionTime;
5856
5869
  var bestPath = [{
5857
- newPos: -1,
5858
- components: []
5870
+ oldPos: -1,
5871
+ lastComponent: undefined
5859
5872
  }]; // Seed editLength = 0, i.e. the content starts with the same values
5860
5873
 
5861
- var oldPos = this.extractCommon(bestPath[0], newString, oldString, 0);
5874
+ var newPos = this.extractCommon(bestPath[0], newString, oldString, 0);
5862
5875
 
5863
- if (bestPath[0].newPos + 1 >= newLen && oldPos + 1 >= oldLen) {
5876
+ if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {
5864
5877
  // Identity per the equality and tokenizer
5865
5878
  return done([{
5866
5879
  value: this.join(newString),
5867
5880
  count: newString.length
5868
5881
  }]);
5869
- } // Main worker method. checks all permutations of a given edit length for acceptance.
5870
-
5882
+ } // Once we hit the right edge of the edit graph on some diagonal k, we can
5883
+ // definitely reach the end of the edit graph in no more than k edits, so
5884
+ // there's no point in considering any moves to diagonal k+1 any more (from
5885
+ // which we're guaranteed to need at least k+1 more edits).
5886
+ // Similarly, once we've reached the bottom of the edit graph, there's no
5887
+ // point considering moves to lower diagonals.
5888
+ // We record this fact by setting minDiagonalToConsider and
5889
+ // maxDiagonalToConsider to some finite value once we've hit the edge of
5890
+ // the edit graph.
5891
+ // This optimization is not faithful to the original algorithm presented in
5892
+ // Myers's paper, which instead pointlessly extends D-paths off the end of
5893
+ // the edit graph - see page 7 of Myers's paper which notes this point
5894
+ // explicitly and illustrates it with a diagram. This has major performance
5895
+ // implications for some common scenarios. For instance, to compute a diff
5896
+ // where the new text simply appends d characters on the end of the
5897
+ // original text of length n, the true Myers algorithm will take O(n+d^2)
5898
+ // time while this optimization needs only O(n+d) time.
5899
+
5900
+
5901
+ var minDiagonalToConsider = -Infinity,
5902
+ maxDiagonalToConsider = Infinity; // Main worker method. checks all permutations of a given edit length for acceptance.
5871
5903
 
5872
5904
  function execEditLength() {
5873
- for (var diagonalPath = -1 * editLength; diagonalPath <= editLength; diagonalPath += 2) {
5905
+ for (var diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {
5874
5906
  var basePath =
5875
5907
  /*istanbul ignore start*/
5876
5908
  void 0
5877
5909
  /*istanbul ignore end*/
5878
5910
  ;
5911
+ var removePath = bestPath[diagonalPath - 1],
5912
+ addPath = bestPath[diagonalPath + 1];
5879
5913
 
5880
- var addPath = bestPath[diagonalPath - 1],
5881
- removePath = bestPath[diagonalPath + 1],
5882
- _oldPos = (removePath ? removePath.newPos : 0) - diagonalPath;
5883
-
5884
- if (addPath) {
5914
+ if (removePath) {
5885
5915
  // No one else is going to attempt to use this value, clear it
5886
5916
  bestPath[diagonalPath - 1] = undefined;
5887
5917
  }
5888
5918
 
5889
- var canAdd = addPath && addPath.newPos + 1 < newLen,
5890
- canRemove = removePath && 0 <= _oldPos && _oldPos < oldLen;
5919
+ var canAdd = false;
5920
+
5921
+ if (addPath) {
5922
+ // what newPos will be after we do an insertion:
5923
+ var addPathNewPos = addPath.oldPos - diagonalPath;
5924
+ canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;
5925
+ }
5926
+
5927
+ var canRemove = removePath && removePath.oldPos + 1 < oldLen;
5891
5928
 
5892
5929
  if (!canAdd && !canRemove) {
5893
5930
  // If this path is a terminal then prune
5894
5931
  bestPath[diagonalPath] = undefined;
5895
5932
  continue;
5896
5933
  } // Select the diagonal that we want to branch from. We select the prior
5897
- // path whose position in the new string is the farthest from the origin
5934
+ // path whose position in the old string is the farthest from the origin
5898
5935
  // and does not pass the bounds of the diff graph
5936
+ // TODO: Remove the `+ 1` here to make behavior match Myers algorithm
5937
+ // and prefer to order removals before insertions.
5899
5938
 
5900
5939
 
5901
- if (!canAdd || canRemove && addPath.newPos < removePath.newPos) {
5902
- basePath = clonePath(removePath);
5903
- self.pushComponent(basePath.components, undefined, true);
5940
+ if (!canRemove || canAdd && removePath.oldPos + 1 < addPath.oldPos) {
5941
+ basePath = self.addToPath(addPath, true, undefined, 0);
5904
5942
  } else {
5905
- basePath = addPath; // No need to clone, we've pulled it from the list
5906
-
5907
- basePath.newPos++;
5908
- self.pushComponent(basePath.components, true, undefined);
5943
+ basePath = self.addToPath(removePath, undefined, true, 1);
5909
5944
  }
5910
5945
 
5911
- _oldPos = self.extractCommon(basePath, newString, oldString, diagonalPath); // If we have hit the end of both strings, then we are done
5946
+ newPos = self.extractCommon(basePath, newString, oldString, diagonalPath);
5912
5947
 
5913
- if (basePath.newPos + 1 >= newLen && _oldPos + 1 >= oldLen) {
5914
- return done(buildValues(self, basePath.components, newString, oldString, self.useLongestToken));
5948
+ if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {
5949
+ // If we have hit the end of both strings, then we are done
5950
+ return done(buildValues(self, basePath.lastComponent, newString, oldString, self.useLongestToken));
5915
5951
  } else {
5916
- // Otherwise track this path as a potential candidate and continue.
5917
5952
  bestPath[diagonalPath] = basePath;
5953
+
5954
+ if (basePath.oldPos + 1 >= oldLen) {
5955
+ maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);
5956
+ }
5957
+
5958
+ if (newPos + 1 >= newLen) {
5959
+ minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);
5960
+ }
5918
5961
  }
5919
5962
  }
5920
5963
 
5921
5964
  editLength++;
5922
5965
  } // Performs the length of edit iteration. Is a bit fugly as this has to support the
5923
5966
  // sync and async mode which is never fun. Loops over execEditLength until a value
5924
- // is produced.
5967
+ // is produced, or until the edit length exceeds options.maxEditLength (if given),
5968
+ // in which case it will return undefined.
5925
5969
 
5926
5970
 
5927
5971
  if (callback) {
5928
5972
  (function exec() {
5929
5973
  setTimeout(function () {
5930
- // This should not happen, but we want to be safe.
5931
-
5932
- /* istanbul ignore next */
5933
- if (editLength > maxEditLength) {
5974
+ if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {
5934
5975
  return callback();
5935
5976
  }
5936
5977
 
@@ -5940,7 +5981,7 @@
5940
5981
  }, 0);
5941
5982
  })();
5942
5983
  } else {
5943
- while (editLength <= maxEditLength) {
5984
+ while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {
5944
5985
  var ret = execEditLength();
5945
5986
 
5946
5987
  if (ret) {
@@ -5953,23 +5994,29 @@
5953
5994
  /*istanbul ignore start*/
5954
5995
 
5955
5996
  /*istanbul ignore end*/
5956
- pushComponent: function pushComponent(components, added, removed) {
5957
- var last = components[components.length - 1];
5997
+ addToPath: function addToPath(path, added, removed, oldPosInc) {
5998
+ var last = path.lastComponent;
5958
5999
 
5959
6000
  if (last && last.added === added && last.removed === removed) {
5960
- // We need to clone here as the component clone operation is just
5961
- // as shallow array clone
5962
- components[components.length - 1] = {
5963
- count: last.count + 1,
5964
- added: added,
5965
- removed: removed
6001
+ return {
6002
+ oldPos: path.oldPos + oldPosInc,
6003
+ lastComponent: {
6004
+ count: last.count + 1,
6005
+ added: added,
6006
+ removed: removed,
6007
+ previousComponent: last.previousComponent
6008
+ }
5966
6009
  };
5967
6010
  } else {
5968
- components.push({
5969
- count: 1,
5970
- added: added,
5971
- removed: removed
5972
- });
6011
+ return {
6012
+ oldPos: path.oldPos + oldPosInc,
6013
+ lastComponent: {
6014
+ count: 1,
6015
+ added: added,
6016
+ removed: removed,
6017
+ previousComponent: last
6018
+ }
6019
+ };
5973
6020
  }
5974
6021
  },
5975
6022
 
@@ -5979,8 +6026,8 @@
5979
6026
  extractCommon: function extractCommon(basePath, newString, oldString, diagonalPath) {
5980
6027
  var newLen = newString.length,
5981
6028
  oldLen = oldString.length,
5982
- newPos = basePath.newPos,
5983
- oldPos = newPos - diagonalPath,
6029
+ oldPos = basePath.oldPos,
6030
+ newPos = oldPos - diagonalPath,
5984
6031
  commonCount = 0;
5985
6032
 
5986
6033
  while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(newString[newPos + 1], oldString[oldPos + 1])) {
@@ -5990,13 +6037,14 @@
5990
6037
  }
5991
6038
 
5992
6039
  if (commonCount) {
5993
- basePath.components.push({
5994
- count: commonCount
5995
- });
6040
+ basePath.lastComponent = {
6041
+ count: commonCount,
6042
+ previousComponent: basePath.lastComponent
6043
+ };
5996
6044
  }
5997
6045
 
5998
- basePath.newPos = newPos;
5999
- return oldPos;
6046
+ basePath.oldPos = oldPos;
6047
+ return newPos;
6000
6048
  },
6001
6049
 
6002
6050
  /*istanbul ignore start*/
@@ -6047,7 +6095,20 @@
6047
6095
  }
6048
6096
  };
6049
6097
 
6050
- function buildValues(diff, components, newString, oldString, useLongestToken) {
6098
+ function buildValues(diff, lastComponent, newString, oldString, useLongestToken) {
6099
+ // First we convert our linked list of components in reverse order to an
6100
+ // array in the right order:
6101
+ var components = [];
6102
+ var nextComponent;
6103
+
6104
+ while (lastComponent) {
6105
+ components.push(lastComponent);
6106
+ nextComponent = lastComponent.previousComponent;
6107
+ delete lastComponent.previousComponent;
6108
+ lastComponent = nextComponent;
6109
+ }
6110
+
6111
+ components.reverse();
6051
6112
  var componentPos = 0,
6052
6113
  componentLen = components.length,
6053
6114
  newPos = 0,
@@ -6090,23 +6151,16 @@
6090
6151
  // This is only available for string mode.
6091
6152
 
6092
6153
 
6093
- var lastComponent = components[componentLen - 1];
6154
+ var finalComponent = components[componentLen - 1];
6094
6155
 
6095
- if (componentLen > 1 && typeof lastComponent.value === 'string' && (lastComponent.added || lastComponent.removed) && diff.equals('', lastComponent.value)) {
6096
- components[componentLen - 2].value += lastComponent.value;
6156
+ if (componentLen > 1 && typeof finalComponent.value === 'string' && (finalComponent.added || finalComponent.removed) && diff.equals('', finalComponent.value)) {
6157
+ components[componentLen - 2].value += finalComponent.value;
6097
6158
  components.pop();
6098
6159
  }
6099
6160
 
6100
6161
  return components;
6101
6162
  }
6102
6163
 
6103
- function clonePath(path) {
6104
- return {
6105
- newPos: path.newPos,
6106
- components: path.components.slice(0)
6107
- };
6108
- }
6109
-
6110
6164
  }(base));
6111
6165
 
6112
6166
  var character = {};
@@ -6322,6 +6376,11 @@
6322
6376
 
6323
6377
  /*istanbul ignore end*/
6324
6378
  lineDiff.tokenize = function (value) {
6379
+ if (this.options.stripTrailingCr) {
6380
+ // remove one \r before \n to match GNU diff's --strip-trailing-cr behavior
6381
+ value = value.replace(/\r\n/g, '\n');
6382
+ }
6383
+
6325
6384
  var retLines = [],
6326
6385
  linesAndNewlines = value.split(/(\n|\r\n)/); // Ignore the final empty token that occurs if the string ends with a new line
6327
6386
 
@@ -7042,7 +7101,7 @@
7042
7101
  var line = _hunk.lines[j],
7043
7102
  operation = line.length > 0 ? line[0] : ' ',
7044
7103
  content = line.length > 0 ? line.substr(1) : line,
7045
- delimiter = _hunk.linedelimiters[j];
7104
+ delimiter = _hunk.linedelimiters && _hunk.linedelimiters[j] || '\n';
7046
7105
 
7047
7106
  if (operation === ' ') {
7048
7107
  _toPos++;
@@ -7184,6 +7243,11 @@
7184
7243
  diffLines)
7185
7244
  /*istanbul ignore end*/
7186
7245
  (oldStr, newStr, options);
7246
+
7247
+ if (!diff) {
7248
+ return;
7249
+ }
7250
+
7187
7251
  diff.push({
7188
7252
  value: '',
7189
7253
  lines: []
@@ -7360,6 +7424,10 @@
7360
7424
  }
7361
7425
 
7362
7426
  function formatPatch(diff) {
7427
+ if (Array.isArray(diff)) {
7428
+ return diff.map(formatPatch).join('\n');
7429
+ }
7430
+
7363
7431
  var ret = [];
7364
7432
 
7365
7433
  if (diff.oldFileName == diff.newFileName) {
@@ -8038,6 +8106,70 @@
8038
8106
  };
8039
8107
  }
8040
8108
 
8109
+ var reverse = {};
8110
+
8111
+ /*istanbul ignore start*/
8112
+
8113
+ Object.defineProperty(reverse, "__esModule", {
8114
+ value: true
8115
+ });
8116
+ reverse.reversePatch = reversePatch;
8117
+
8118
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
8119
+
8120
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
8121
+
8122
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
8123
+
8124
+ /*istanbul ignore end*/
8125
+ function reversePatch(structuredPatch) {
8126
+ if (Array.isArray(structuredPatch)) {
8127
+ return structuredPatch.map(reversePatch).reverse();
8128
+ }
8129
+
8130
+ return (
8131
+ /*istanbul ignore start*/
8132
+ _objectSpread(_objectSpread({},
8133
+ /*istanbul ignore end*/
8134
+ structuredPatch), {}, {
8135
+ oldFileName: structuredPatch.newFileName,
8136
+ oldHeader: structuredPatch.newHeader,
8137
+ newFileName: structuredPatch.oldFileName,
8138
+ newHeader: structuredPatch.oldHeader,
8139
+ hunks: structuredPatch.hunks.map(function (hunk) {
8140
+ return {
8141
+ oldLines: hunk.newLines,
8142
+ oldStart: hunk.newStart,
8143
+ newLines: hunk.oldLines,
8144
+ newStart: hunk.oldStart,
8145
+ linedelimiters: hunk.linedelimiters,
8146
+ lines: hunk.lines.map(function (l) {
8147
+ if (l.startsWith('-')) {
8148
+ return (
8149
+ /*istanbul ignore start*/
8150
+ "+".concat(
8151
+ /*istanbul ignore end*/
8152
+ l.slice(1))
8153
+ );
8154
+ }
8155
+
8156
+ if (l.startsWith('+')) {
8157
+ return (
8158
+ /*istanbul ignore start*/
8159
+ "-".concat(
8160
+ /*istanbul ignore end*/
8161
+ l.slice(1))
8162
+ );
8163
+ }
8164
+
8165
+ return l;
8166
+ })
8167
+ };
8168
+ })
8169
+ })
8170
+ );
8171
+ }
8172
+
8041
8173
  var dmp = {};
8042
8174
 
8043
8175
  /*istanbul ignore start*/
@@ -8211,6 +8343,12 @@
8211
8343
  return _merge.merge;
8212
8344
  }
8213
8345
  });
8346
+ Object.defineProperty(exports, "reversePatch", {
8347
+ enumerable: true,
8348
+ get: function get() {
8349
+ return _reverse.reversePatch;
8350
+ }
8351
+ });
8214
8352
  Object.defineProperty(exports, "structuredPatch", {
8215
8353
  enumerable: true,
8216
8354
  get: function get() {
@@ -8229,6 +8367,12 @@
8229
8367
  return _create.createPatch;
8230
8368
  }
8231
8369
  });
8370
+ Object.defineProperty(exports, "formatPatch", {
8371
+ enumerable: true,
8372
+ get: function get() {
8373
+ return _create.formatPatch;
8374
+ }
8375
+ });
8232
8376
  Object.defineProperty(exports, "convertChangesToDMP", {
8233
8377
  enumerable: true,
8234
8378
  get: function get() {
@@ -8309,6 +8453,12 @@
8309
8453
  /*istanbul ignore end*/
8310
8454
  ;
8311
8455
 
8456
+ var
8457
+ /*istanbul ignore start*/
8458
+ _reverse = reverse
8459
+ /*istanbul ignore end*/
8460
+ ;
8461
+
8312
8462
  var
8313
8463
  /*istanbul ignore start*/
8314
8464
  _create = create
@@ -11460,6 +11610,39 @@
11460
11610
  */
11461
11611
  exports.getMochaID = obj =>
11462
11612
  obj && typeof obj === 'object' ? obj[MOCHA_ID_PROP_NAME] : undefined;
11613
+
11614
+ /**
11615
+ * Replaces any detected circular dependency with the string '[Circular]'
11616
+ * Mutates original object
11617
+ * @param inputObj {*}
11618
+ * @returns {*}
11619
+ */
11620
+ exports.breakCircularDeps = inputObj => {
11621
+ const seen = new Set();
11622
+
11623
+ function _breakCircularDeps(obj) {
11624
+ if (obj && typeof obj !== 'object') {
11625
+ return obj;
11626
+ }
11627
+
11628
+ if (seen.has(obj)) {
11629
+ return '[Circular]';
11630
+ }
11631
+
11632
+ seen.add(obj);
11633
+ for (const k in obj) {
11634
+ if (Object.prototype.hasOwnProperty.call(obj, k)) {
11635
+ obj[k] = _breakCircularDeps(obj[k]);
11636
+ }
11637
+ }
11638
+
11639
+ // deleting means only a seen object that is its own child will be detected
11640
+ seen.delete(obj);
11641
+ return obj;
11642
+ }
11643
+
11644
+ return _breakCircularDeps(inputObj);
11645
+ };
11463
11646
  }(utils$3));
11464
11647
 
11465
11648
  var _nodeResolve_empty = {};
@@ -18986,7 +19169,7 @@
18986
19169
  };
18987
19170
 
18988
19171
  var name = "mocha";
18989
- var version = "10.5.1";
19172
+ var version = "10.6.0";
18990
19173
  var homepage = "https://mochajs.org/";
18991
19174
  var notifyLogo = "https://ibin.co/4QuRuGjXvl36.png";
18992
19175
  var require$$17 = {