aboutsummaryrefslogtreecommitdiff
path: root/node_modules/jest-leak-detector
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/jest-leak-detector')
-rw-r--r--node_modules/jest-leak-detector/LICENSE21
-rw-r--r--node_modules/jest-leak-detector/README.md27
-rw-r--r--node_modules/jest-leak-detector/build/index.d.ts12
-rw-r--r--node_modules/jest-leak-detector/build/index.js135
-rw-r--r--node_modules/jest-leak-detector/package.json34
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"
+}