Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorclaudiahdz <cghr1990@gmail.com>2020-02-06 23:25:33 +0300
committerisaacs <i@izs.me>2020-05-08 04:11:51 +0300
commit0a45514d8beba749bebbd973ca9750ee0dc13b40 (patch)
treeeec0c989c38fcb7395c9fd565f2a44c79369c59e /node_modules/cacache/lib/util/disposer.js
parent019e6c41a85edf62727b517e1dfe2d5b9e53ba0e (diff)
cacache@15.0.0
Diffstat (limited to 'node_modules/cacache/lib/util/disposer.js')
-rw-r--r--node_modules/cacache/lib/util/disposer.js30
1 files changed, 30 insertions, 0 deletions
diff --git a/node_modules/cacache/lib/util/disposer.js b/node_modules/cacache/lib/util/disposer.js
new file mode 100644
index 000000000..8a24ad2f2
--- /dev/null
+++ b/node_modules/cacache/lib/util/disposer.js
@@ -0,0 +1,30 @@
+'use strict'
+
+module.exports.disposer = disposer
+
+function disposer (creatorFn, disposerFn, fn) {
+ const runDisposer = (resource, result, shouldThrow = false) => {
+ return disposerFn(resource)
+ .then(
+ // disposer resolved, do something with original fn's promise
+ () => {
+ if (shouldThrow) {
+ throw result
+ }
+ return result
+ },
+ // Disposer fn failed, crash process
+ (err) => {
+ throw err
+ // Or process.exit?
+ })
+ }
+
+ return creatorFn
+ .then((resource) => {
+ // fn(resource) can throw, so wrap in a promise here
+ return Promise.resolve().then(() => fn(resource))
+ .then((result) => runDisposer(resource, result))
+ .catch((err) => runDisposer(resource, err, true))
+ })
+}