]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/async-some/some.js
Adding integrated tile server
[simantics/district.git] / org.simantics.maps.server / node / node-v4.8.0-win-x64 / node_modules / npm / node_modules / async-some / some.js
diff --git a/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/async-some/some.js b/org.simantics.maps.server/node/node-v4.8.0-win-x64/node_modules/npm/node_modules/async-some/some.js
new file mode 100644 (file)
index 0000000..0419709
--- /dev/null
@@ -0,0 +1,47 @@
+var assert     = require("assert")
+var dezalgoify = require("dezalgo")
+
+module.exports = some
+
+/**
+ * short-circuited async Array.prototype.some implementation
+ *
+ * Serially evaluates a list of values from a JS array or arraylike
+ * against an asynchronous predicate, terminating on the first truthy
+ * value. If the predicate encounters an error, pass it to the completion
+ * callback. Otherwise, pass the truthy value passed by the predicate, or
+ * `false` if no truthy value was passed.
+ */
+function some (list, test, cb) {
+  assert("length" in list, "array must be arraylike")
+  assert.equal(typeof test, "function", "predicate must be callable")
+  assert.equal(typeof cb, "function", "callback must be callable")
+
+  var array   = slice(list)
+    , index   = 0
+    , length  = array.length
+    , hecomes = dezalgoify(cb)
+
+  map()
+
+  function map () {
+    if (index >= length) return hecomes(null, false)
+
+    test(array[index], reduce)
+  }
+
+  function reduce (er, result) {
+    if (er) return hecomes(er, false)
+    if (result) return hecomes(null, result)
+
+    index++
+    map()
+  }
+}
+
+// Array.prototype.slice on arguments arraylike is expensive
+function slice(args) {
+  var l = args.length, a = [], i
+  for (i = 0; i < l; i++) a[i] = args[i]
+  return a
+}