diff options
Diffstat (limited to 'node_modules/jest-leak-detector')
| -rw-r--r-- | node_modules/jest-leak-detector/LICENSE | 21 | ||||
| -rw-r--r-- | node_modules/jest-leak-detector/README.md | 27 | ||||
| -rw-r--r-- | node_modules/jest-leak-detector/build/index.d.ts | 12 | ||||
| -rw-r--r-- | node_modules/jest-leak-detector/build/index.js | 135 | ||||
| -rw-r--r-- | node_modules/jest-leak-detector/package.json | 34 | 
5 files changed, 229 insertions, 0 deletions
diff --git a/node_modules/jest-leak-detector/LICENSE b/node_modules/jest-leak-detector/LICENSE new file mode 100644 index 0000000..b96dcb0 --- /dev/null +++ b/node_modules/jest-leak-detector/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Facebook, Inc. and its affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/jest-leak-detector/README.md b/node_modules/jest-leak-detector/README.md new file mode 100644 index 0000000..5e650b7 --- /dev/null +++ b/node_modules/jest-leak-detector/README.md @@ -0,0 +1,27 @@ +# jest-leak-detector + +Module for verifying whether an object has been garbage collected or not. + +Internally creates a weak reference to the object, and forces garbage collection to happen. If the reference is gone, it meant no one else was pointing to the object. + +## Example + +```javascript +(async function () { +  let reference = {}; +  let isLeaking; + +  const detector = new LeakDetector(reference); + +  // Reference is held in memory. +  isLeaking = await detector.isLeaking(); +  console.log(isLeaking); // true + +  // We destroy the only reference to the object. +  reference = null; + +  // Reference is gone. +  isLeaking = await detector.isLeaking(); +  console.log(isLeaking); // false +})(); +``` diff --git a/node_modules/jest-leak-detector/build/index.d.ts b/node_modules/jest-leak-detector/build/index.d.ts new file mode 100644 index 0000000..65d67d2 --- /dev/null +++ b/node_modules/jest-leak-detector/build/index.d.ts @@ -0,0 +1,12 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ +export default class LeakDetector { +    private _isReferenceBeingHeld; +    constructor(value: unknown); +    isLeaking(): Promise<boolean>; +    private _runGarbageCollector; +} diff --git a/node_modules/jest-leak-detector/build/index.js b/node_modules/jest-leak-detector/build/index.js new file mode 100644 index 0000000..ae6ea17 --- /dev/null +++ b/node_modules/jest-leak-detector/build/index.js @@ -0,0 +1,135 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { +  value: true +}); +exports.default = void 0; + +function _util() { +  const data = require('util'); + +  _util = function () { +    return data; +  }; + +  return data; +} + +function _v() { +  const data = require('v8'); + +  _v = function () { +    return data; +  }; + +  return data; +} + +function _vm() { +  const data = require('vm'); + +  _vm = function () { +    return data; +  }; + +  return data; +} + +function _jestGetType() { +  const data = require('jest-get-type'); + +  _jestGetType = function () { +    return data; +  }; + +  return data; +} + +function _prettyFormat() { +  const data = require('pretty-format'); + +  _prettyFormat = function () { +    return data; +  }; + +  return data; +} + +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; +} + +const tick = (0, _util().promisify)(setImmediate); + +class LeakDetector { +  constructor(value) { +    _defineProperty(this, '_isReferenceBeingHeld', void 0); + +    if ((0, _jestGetType().isPrimitive)(value)) { +      throw new TypeError( +        [ +          'Primitives cannot leak memory.', +          'You passed a ' + +            typeof value + +            ': <' + +            (0, _prettyFormat().format)(value) + +            '>' +        ].join(' ') +      ); +    } + +    let weak; + +    try { +      // eslint-disable-next-line import/no-extraneous-dependencies +      weak = require('weak-napi'); +    } catch (err) { +      if (!err || err.code !== 'MODULE_NOT_FOUND') { +        throw err; +      } + +      throw new Error( +        'The leaking detection mechanism requires the "weak-napi" package to be installed and work. ' + +          'Please install it as a dependency on your main project' +      ); +    } + +    weak(value, () => (this._isReferenceBeingHeld = false)); +    this._isReferenceBeingHeld = true; // Ensure value is not leaked by the closure created by the "weak" callback. + +    value = null; +  } + +  async isLeaking() { +    this._runGarbageCollector(); // wait some ticks to allow GC to run properly, see https://github.com/nodejs/node/issues/34636#issuecomment-669366235 + +    for (let i = 0; i < 10; i++) { +      await tick(); +    } + +    return this._isReferenceBeingHeld; +  } + +  _runGarbageCollector() { +    const isGarbageCollectorHidden = !global.gc; // GC is usually hidden, so we have to expose it before running. + +    (0, _v().setFlagsFromString)('--expose-gc'); +    (0, _vm().runInNewContext)('gc')(); // The GC was not initially exposed, so let's hide it again. + +    if (isGarbageCollectorHidden) { +      (0, _v().setFlagsFromString)('--no-expose-gc'); +    } +  } +} + +exports.default = LeakDetector; diff --git a/node_modules/jest-leak-detector/package.json b/node_modules/jest-leak-detector/package.json new file mode 100644 index 0000000..c45bf23 --- /dev/null +++ b/node_modules/jest-leak-detector/package.json @@ -0,0 +1,34 @@ +{ +  "name": "jest-leak-detector", +  "version": "27.5.1", +  "repository": { +    "type": "git", +    "url": "https://github.com/facebook/jest.git", +    "directory": "packages/jest-leak-detector" +  }, +  "license": "MIT", +  "main": "./build/index.js", +  "types": "./build/index.d.ts", +  "exports": { +    ".": { +      "types": "./build/index.d.ts", +      "default": "./build/index.js" +    }, +    "./package.json": "./package.json" +  }, +  "dependencies": { +    "jest-get-type": "^27.5.1", +    "pretty-format": "^27.5.1" +  }, +  "devDependencies": { +    "@types/weak-napi": "^2.0.0", +    "weak-napi": "^2.0.1" +  }, +  "engines": { +    "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" +  }, +  "publishConfig": { +    "access": "public" +  }, +  "gitHead": "67c1aa20c5fec31366d733e901fee2b981cb1850" +}  | 
