'use strict'module.exports.disposer=disposerfunctiondisposer(creatorFn,disposerFn,fn){construnDisposer=(resource,result,shouldThrow=false)=>{returndisposerFn(resource).then(// disposer resolved, do something with original fn's promise()=>{if(shouldThrow)throwresultreturnresult},// Disposer fn failed, crash process(err)=>{throwerr// Or process.exit?})}returncreatorFn.then((resource)=>{// fn(resource) can throw, so wrap in a promise herereturnPromise.resolve().then(()=>fn(resource)).then((result)=>runDisposer(resource,result)).catch((err)=>runDisposer(resource,err,true))})}