You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					55 lines
				
				1.3 KiB
			
		
		
			
		
	
	
					55 lines
				
				1.3 KiB
			| 
											3 years ago
										 | # on-exit-leak-free
 | ||
|  | 
 | ||
|  | This module helps dispose of an object gracefully when the Node.js process exits. | ||
|  | It executes a function with a given parameter | ||
|  | on [`'exit'`](https://nodejs.org/api/process.html#event-exit) without leaking memory, | ||
|  | cleaning things up appropriately if the object is garbage collected. | ||
|  | 
 | ||
|  | Requires `WeakRef` and `FinalizationRegistry`, i.e. use Node v14+. | ||
|  | 
 | ||
|  | ## Install
 | ||
|  | 
 | ||
|  | ```bash | ||
|  | npm i on-exit-leak-free | ||
|  | ``` | ||
|  | 
 | ||
|  | ## Example
 | ||
|  | 
 | ||
|  | ```js | ||
|  | 'use strict' | ||
|  | 
 | ||
|  | const { register, unregister } = require('on-exit-leak-free') | ||
|  | const assert = require('assert') | ||
|  | 
 | ||
|  | function setup () { | ||
|  |   // This object can be safely garbage collected, | ||
|  |   // and the resulting shutdown function will not be called. | ||
|  |   // There are no leaks. | ||
|  |   const obj = { foo: 'bar' } | ||
|  |   register(obj, shutdown) | ||
|  |   // use registerBeforeExit(obj, shutdown) to execute the function only | ||
|  |   // on beforeExit | ||
|  |   // call unregister(obj) to remove | ||
|  | } | ||
|  | 
 | ||
|  | let shutdownCalled = false | ||
|  | 
 | ||
|  | // Please make sure that the function passed to register() | ||
|  | // does not create a closure around unnecessary objects. | ||
|  | function shutdown (obj, eventName) { | ||
|  |   console.log(eventName) // beforeExit | ||
|  |   shutdownCalled = true | ||
|  |   assert.strictEqual(obj.foo, 'bar') | ||
|  | } | ||
|  | 
 | ||
|  | setup() | ||
|  | 
 | ||
|  | process.on('exit', function () { | ||
|  |   assert.strictEqual(shutdownCalled, true) | ||
|  | }) | ||
|  | ``` | ||
|  | 
 | ||
|  | ## License
 | ||
|  | 
 | ||
|  | MIT |