aboutsummaryrefslogtreecommitdiff
path: root/node_modules/p-locate/index.js
diff options
context:
space:
mode:
authorJoel Kronqvist <joel.h.kronqvist@gmail.com>2022-03-05 19:02:27 +0200
committerJoel Kronqvist <joel.h.kronqvist@gmail.com>2022-03-05 19:02:27 +0200
commit5d309ff52cd399a6b71968a6b9a70c8ac0b98981 (patch)
tree360f7eb50f956e2367ef38fa1fc6ac7ac5258042 /node_modules/p-locate/index.js
parentb500a50f1b97d93c98b36ed9a980f8188d648147 (diff)
downloadLYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.tar.gz
LYLLRuoka-5d309ff52cd399a6b71968a6b9a70c8ac0b98981.zip
Added node_modules for the updating to work properly.
Diffstat (limited to 'node_modules/p-locate/index.js')
-rw-r--r--node_modules/p-locate/index.js52
1 files changed, 52 insertions, 0 deletions
diff --git a/node_modules/p-locate/index.js b/node_modules/p-locate/index.js
new file mode 100644
index 0000000..e13ce15
--- /dev/null
+++ b/node_modules/p-locate/index.js
@@ -0,0 +1,52 @@
+'use strict';
+const pLimit = require('p-limit');
+
+class EndError extends Error {
+ constructor(value) {
+ super();
+ this.value = value;
+ }
+}
+
+// The input can also be a promise, so we await it
+const testElement = async (element, tester) => tester(await element);
+
+// The input can also be a promise, so we `Promise.all()` them both
+const finder = async element => {
+ const values = await Promise.all(element);
+ if (values[1] === true) {
+ throw new EndError(values[0]);
+ }
+
+ return false;
+};
+
+const pLocate = async (iterable, tester, options) => {
+ options = {
+ concurrency: Infinity,
+ preserveOrder: true,
+ ...options
+ };
+
+ const limit = pLimit(options.concurrency);
+
+ // Start all the promises concurrently with optional limit
+ const items = [...iterable].map(element => [element, limit(testElement, element, tester)]);
+
+ // Check the promises either serially or concurrently
+ const checkLimit = pLimit(options.preserveOrder ? 1 : Infinity);
+
+ try {
+ await Promise.all(items.map(element => checkLimit(finder, element)));
+ } catch (error) {
+ if (error instanceof EndError) {
+ return error.value;
+ }
+
+ throw error;
+ }
+};
+
+module.exports = pLocate;
+// TODO: Remove this for the next major release
+module.exports.default = pLocate;