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
						
					
					
				| # 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
 |