UNPKG

minimongo

Version:

Client-side mongo database with server sync over http

8 lines 231 kB
(function(modules){var installedModules={};function __webpack_require__(moduleId){if(installedModules[moduleId]){return installedModules[moduleId].exports}var module=installedModules[moduleId]={i:moduleId,l:false,exports:{}};modules[moduleId].call(module.exports,module,module.exports,__webpack_require__);module.l=true;return module.exports}__webpack_require__.m=modules;__webpack_require__.c=installedModules;__webpack_require__.d=function(exports,name,getter){if(!__webpack_require__.o(exports,name)){Object.defineProperty(exports,name,{configurable:false,enumerable:true,get:getter})}};__webpack_require__.n=function(module){var getter=module&&module.__esModule?function getDefault(){return module["default"]}:function getModuleExports(){return module};__webpack_require__.d(getter,"a",getter);return getter};__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)};__webpack_require__.p="";return __webpack_require__(__webpack_require__.s=18)})([function(module,exports,__webpack_require__){var async,booleanCrosses,booleanPointInPolygon,booleanWithin,bowser,compileDocumentSelector,compileSort,deg2rad,getDistanceFromLatLngInM,intersect,isLocalStorageSupported,pointInPolygon,polygonIntersection,processGeoIntersectsOperator,processNearOperator,_;_=__webpack_require__(1);async=__webpack_require__(5);bowser=__webpack_require__(22);compileDocumentSelector=__webpack_require__(2).compileDocumentSelector;compileSort=__webpack_require__(2).compileSort;booleanPointInPolygon=__webpack_require__(9)["default"];intersect=__webpack_require__(24)["default"];booleanCrosses=__webpack_require__(26)["default"];booleanWithin=__webpack_require__(33)["default"];isLocalStorageSupported=function(){var e;if(!window.localStorage){return false}try{window.localStorage.setItem("test","test");window.localStorage.removeItem("test");return true}catch(_error){e=_error;return false}};exports.compileDocumentSelector=compileDocumentSelector;exports.autoselectLocalDb=function(options,success,error){var IndexedDb,LocalStorageDb,MemoryDb,WebSQLDb,browser,_ref;IndexedDb=__webpack_require__(12);WebSQLDb=__webpack_require__(13);LocalStorageDb=__webpack_require__(14);MemoryDb=__webpack_require__(10);browser=bowser.browser;if(!isLocalStorageSupported()){return new MemoryDb(options,success)}if(window.cordova){if(((_ref=window.device)!=null?_ref.platform:void 0)==="iOS"&&window.sqlitePlugin){console.log("Selecting WebSQLDb(sqlite) for Cordova");options.storage="sqlite";return new WebSQLDb(options,success,error)}else{console.log("Selecting else WebSQLDb for Cordova");return new WebSQLDb(options,success,error)}}if(browser.ios||browser.safari){return new IndexedDb(options,success,function(_this){return function(err){console.log("Failed to create IndexedDb: "+(err?err.message:void 0));return new MemoryDb(options,success)}}(this))}if(browser.android||browser.chrome||browser.opera||browser.blackberry){if(typeof window.openDatabase==="function"){console.log("Selecting WebSQLDb for browser");return new WebSQLDb(options,success,function(_this){return function(err){console.log("Failed to create WebSQLDb: "+(err?err.message:void 0));return new IndexedDb(options,success,function(err){console.log("Failed to create IndexedDb: "+(err?err.message:void 0));return new MemoryDb(options,success)})}}(this))}else{console.log("Selecting IndexedDb for browser as WebSQL not supported");return new IndexedDb(options,success,function(_this){return function(err){console.log("Failed to create IndexedDb: "+(err?err.message:void 0));return new MemoryDb(options,success)}}(this))}}if(browser.firefox&&browser.version>=16){console.log("Selecting IndexedDb for browser");return new IndexedDb(options,success,function(_this){return function(err){console.log("Failed to create IndexedDb: "+(err?err.message:void 0));return new MemoryDb(options,success)}}(this))}console.log("Selecting LocalStorageDb for fallback");return new LocalStorageDb(options,success,error)};exports.migrateLocalDb=function(fromDb,toDb,success,error){var HybridDb,col,hybridDb,name,_ref;HybridDb=__webpack_require__(15);hybridDb=new HybridDb(fromDb,toDb);_ref=fromDb.collections;for(name in _ref){col=_ref[name];if(toDb[name]){hybridDb.addCollection(name)}}return hybridDb.upload(success,error)};exports.cloneLocalDb=function(fromDb,toDb,success,error){var col,name,_ref;_ref=fromDb.collections;for(name in _ref){col=_ref[name];if(!toDb[name]){toDb.addCollection(name)}}return async.each(_.values(fromDb.collections),function(_this){return function(fromCol,cb){var toCol;toCol=toDb[fromCol.name];return fromCol.find({}).fetch(function(items){return toCol.seed(items,function(){return fromCol.pendingUpserts(function(upserts){return toCol.upsert(_.pluck(upserts,"doc"),_.pluck(upserts,"base"),function(){return fromCol.pendingRemoves(function(removes){return async.eachSeries(removes,function(remove,cb2){return toCol.remove(remove,function(){return cb2()},cb2)},cb)},cb)},cb)},cb)},cb)},cb)}}(this),function(_this){return function(err){if(err){return error(err)}return success()}}(this))};exports.cloneLocalCollection=function(fromCol,toCol,success,error){return fromCol.find({}).fetch(function(_this){return function(items){return toCol.seed(items,function(){return fromCol.pendingUpserts(function(upserts){return toCol.upsert(_.pluck(upserts,"doc"),_.pluck(upserts,"base"),function(){return fromCol.pendingRemoves(function(removes){return async.eachSeries(removes,function(remove,cb2){return toCol.remove(remove,function(){return cb2()},cb2)},function(err){if(err){return error(err)}return success()})},error)},error)},error)},error)}}(this),error)};exports.processFind=function(items,selector,options){var filtered;filtered=_.filter(items,compileDocumentSelector(selector));filtered=processNearOperator(selector,filtered);filtered=processGeoIntersectsOperator(selector,filtered);if(options&&options.sort){filtered.sort(compileSort(options.sort))}if(options&&options.skip){filtered=_.slice(filtered,options.skip)}if(options&&options.limit){filtered=_.take(filtered,options.limit)}if(options&&options.fields){filtered=exports.filterFields(filtered,options.fields)}return filtered};exports.filterFields=function(items,fields){if(fields==null){fields={}}if(_.keys(fields).length===0){return items}return _.map(items,function(item){var field,from,newItem,obj,path,pathElem,to,_i,_j,_k,_l,_len,_len1,_len2,_len3,_len4,_m,_ref,_ref1,_ref2,_ref3;newItem={};if(_.first(_.values(fields))===1){_ref=_.keys(fields).concat(["_id"]);for(_i=0,_len=_ref.length;_i<_len;_i++){field=_ref[_i];path=field.split(".");obj=item;for(_j=0,_len1=path.length;_j<_len1;_j++){pathElem=path[_j];if(obj){obj=obj[pathElem]}}if(obj==null){continue}from=item;to=newItem;_ref1=_.initial(path);for(_k=0,_len2=_ref1.length;_k<_len2;_k++){pathElem=_ref1[_k];to[pathElem]=to[pathElem]||{};to=to[pathElem];from=from[pathElem]}to[_.last(path)]=from[_.last(path)]}return newItem}else{item=_.cloneDeep(item);_ref2=_.keys(fields);for(_l=0,_len3=_ref2.length;_l<_len3;_l++){field=_ref2[_l];path=field.split(".");obj=item;_ref3=_.initial(path);for(_m=0,_len4=_ref3.length;_m<_len4;_m++){pathElem=_ref3[_m];if(obj){obj=obj[pathElem]}}if(obj==null){continue}delete obj[_.last(path)]}return item}})};exports.createUid=function(){return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(c){var r,v;r=Math.random()*16|0;v=c==="x"?r:r&3|8;return v.toString(16)})};processNearOperator=function(selector,list){var distances,geo,key,value;for(key in selector){value=selector[key];if(value!=null&&value["$near"]){geo=value["$near"]["$geometry"];if(geo.type!=="Point"){break}list=_.filter(list,function(doc){return doc[key]&&doc[key].type==="Point"});distances=_.map(list,function(doc){return{doc:doc,distance:getDistanceFromLatLngInM(geo.coordinates[1],geo.coordinates[0],doc[key].coordinates[1],doc[key].coordinates[0])}});distances=_.filter(distances,function(item){return item.distance>=0});distances=_.sortBy(distances,"distance");if(value["$near"]["$maxDistance"]){distances=_.filter(distances,function(item){return item.distance<=value["$near"]["$maxDistance"]})}list=_.pluck(distances,"doc")}}return list};pointInPolygon=function(point,polygon){return booleanPointInPolygon(point,polygon)};polygonIntersection=function(polygon1,polygon2){return intersect(polygon1,polygon2)!=null};getDistanceFromLatLngInM=function(lat1,lng1,lat2,lng2){var R,a,c,d,dLat,dLng;R=6370986;dLat=deg2rad(lat2-lat1);dLng=deg2rad(lng2-lng1);a=Math.sin(dLat/2)*Math.sin(dLat/2)+Math.cos(deg2rad(lat1))*Math.cos(deg2rad(lat2))*Math.sin(dLng/2)*Math.sin(dLng/2);c=2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a));d=R*c;return d};deg2rad=function(deg){return deg*(Math.PI/180)};processGeoIntersectsOperator=function(selector,list){var geo,key,value;for(key in selector){value=selector[key];if(value!=null&&value["$geoIntersects"]){geo=value["$geoIntersects"]["$geometry"];if(geo.type!=="Polygon"){break}list=_.filter(list,function(doc){var line,lineGeo,_i,_len,_ref,_ref1;if(!doc[key]){return false}if(doc[key].type==="Point"){return pointInPolygon(doc[key],geo)}else if((_ref=doc[key].type)==="Polygon"||_ref==="MultiPolygon"){return polygonIntersection(doc[key],geo)}else if(doc[key].type==="LineString"){return booleanCrosses(doc[key],geo)||booleanWithin(doc[key],geo)}else if(doc[key].type==="MultiLineString"){_ref1=doc[key].coordinates;for(_i=0,_len=_ref1.length;_i<_len;_i++){line=_ref1[_i];lineGeo={type:"LineString",coordinates:line};if(booleanCrosses(lineGeo,geo)||booleanWithin(lineGeo,geo)){return true}}return false}})}}return list};exports.regularizeUpsert=function(docs,bases,success,error){var item,items,_i,_len,_ref;if(_.isFunction(bases)){_ref=[void 0,bases,success],bases=_ref[0],success=_ref[1],error=_ref[2]}if(!_.isArray(docs)){docs=[docs];bases=[bases]}else{bases=bases||[]}items=_.map(docs,function(doc,i){return{doc:doc,base:i<bases.length?bases[i]:void 0}});for(_i=0,_len=items.length;_i<_len;_i++){item=items[_i];if(!item.doc._id){item.doc._id=exports.createUid()}if(item.base&&!item.base._id){throw new Error("Base needs _id")}if(item.base&&item.base._id!==item.doc._id){throw new Error("Base needs same _id")}}return[items,success,error]}},function(module,exports){module.exports=_},function(module,exports,__webpack_require__){var LocalCollection={};var EJSON=__webpack_require__(23);var _=__webpack_require__(1);var isArray=function(x){return _.isArray(x)&&!EJSON.isBinary(x)};var _anyIfArray=function(x,f){if(isArray(x))return _.any(x,f);return f(x)};var _anyIfArrayPlus=function(x,f){if(f(x))return true;return isArray(x)&&_.any(x,f)};var hasOperators=function(valueSelector){var theseAreOperators=undefined;for(var selKey in valueSelector){var thisIsOperator=selKey.substr(0,1)==="$";if(theseAreOperators===undefined){theseAreOperators=thisIsOperator}else if(theseAreOperators!==thisIsOperator){throw new Error("Inconsistent selector: "+valueSelector)}}return!!theseAreOperators};var compileValueSelector=function(valueSelector){if(valueSelector==null){return function(value){return _anyIfArray(value,function(x){return x==null})}}if(!_.isObject(valueSelector)){return function(value){return _anyIfArray(value,function(x){return x===valueSelector})}}if(valueSelector instanceof RegExp){return function(value){if(value===undefined)return false;return _anyIfArray(value,function(x){return valueSelector.test(x)})}}if(isArray(valueSelector)){return function(value){if(!isArray(value))return false;return _anyIfArrayPlus(value,function(x){return LocalCollection._f._equal(valueSelector,x)})}}if(hasOperators(valueSelector)){var operatorFunctions=[];_.each(valueSelector,function(operand,operator){if(!_.has(VALUE_OPERATORS,operator))throw new Error("Unrecognized operator: "+operator);operatorFunctions.push(VALUE_OPERATORS[operator](operand,valueSelector.$options))});return function(value){return _.all(operatorFunctions,function(f){return f(value)})}}return function(value){return _anyIfArray(value,function(x){return LocalCollection._f._equal(valueSelector,x)})}};var LOGICAL_OPERATORS={$and:function(subSelector){if(!isArray(subSelector)||_.isEmpty(subSelector))throw Error("$and/$or/$nor must be nonempty array");var subSelectorFunctions=_.map(subSelector,compileDocumentSelector);return function(doc){return _.all(subSelectorFunctions,function(f){return f(doc)})}},$or:function(subSelector){if(!isArray(subSelector)||_.isEmpty(subSelector))throw Error("$and/$or/$nor must be nonempty array");var subSelectorFunctions=_.map(subSelector,compileDocumentSelector);return function(doc){return _.any(subSelectorFunctions,function(f){return f(doc)})}},$nor:function(subSelector){if(!isArray(subSelector)||_.isEmpty(subSelector))throw Error("$and/$or/$nor must be nonempty array");var subSelectorFunctions=_.map(subSelector,compileDocumentSelector);return function(doc){return _.all(subSelectorFunctions,function(f){return!f(doc)})}},$where:function(selectorValue){if(!(selectorValue instanceof Function)){selectorValue=Function("return "+selectorValue)}return function(doc){return selectorValue.call(doc)}}};var VALUE_OPERATORS={$in:function(operand){if(!isArray(operand))throw new Error("Argument to $in must be array");var index=null;if(_.all(operand,_.isString))index=_.indexBy(operand);return function(value){return _anyIfArrayPlus(value,function(x){if(_.isString(x)&&index!==null)return index[x]!=undefined;return _.any(operand,function(operandElt){return LocalCollection._f._equal(operandElt,x)})})}},$all:function(operand){if(!isArray(operand))throw new Error("Argument to $all must be array");return function(value){if(!isArray(value))return false;return _.all(operand,function(operandElt){return _.any(value,function(valueElt){return LocalCollection._f._equal(operandElt,valueElt)})})}},$lt:function(operand){return function(value){return _anyIfArray(value,function(x){return LocalCollection._f._cmp(x,operand)<0})}},$lte:function(operand){return function(value){return _anyIfArray(value,function(x){return LocalCollection._f._cmp(x,operand)<=0})}},$gt:function(operand){return function(value){return _anyIfArray(value,function(x){return LocalCollection._f._cmp(x,operand)>0})}},$gte:function(operand){return function(value){return _anyIfArray(value,function(x){return LocalCollection._f._cmp(x,operand)>=0})}},$ne:function(operand){return function(value){return!_anyIfArrayPlus(value,function(x){return LocalCollection._f._equal(x,operand)})}},$nin:function(operand){if(!isArray(operand))throw new Error("Argument to $nin must be array");var inFunction=VALUE_OPERATORS.$in(operand);return function(value){if(value===undefined)return true;return!inFunction(value)}},$exists:function(operand){return function(value){return operand===(value!==undefined)}},$mod:function(operand){var divisor=operand[0],remainder=operand[1];return function(value){return _anyIfArray(value,function(x){return x%divisor===remainder})}},$size:function(operand){return function(value){return isArray(value)&&operand===value.length}},$type:function(operand){return function(value){if(value===undefined)return false;return _anyIfArray(value,function(x){return LocalCollection._f._type(x)===operand})}},$regex:function(operand,options){if(options!==undefined){if(/[^gim]/.test(options))throw new Error("Only the i, m, and g regexp options are supported");var regexSource=operand instanceof RegExp?operand.source:operand;operand=new RegExp(regexSource,options)}else if(!(operand instanceof RegExp)){operand=new RegExp(operand)}return function(value){if(value===undefined)return false;return _anyIfArray(value,function(x){return operand.test(x)})}},$options:function(operand){return function(value){return true}},$elemMatch:function(operand){var matcher=compileDocumentSelector(operand);return function(value){if(!isArray(value))return false;return _.any(value,function(x){return matcher(x)})}},$not:function(operand){var matcher=compileValueSelector(operand);return function(value){return!matcher(value)}},$near:function(operand){return function(value){return true}},$geoIntersects:function(operand){return function(value){return true}}};LocalCollection._f={_type:function(v){if(typeof v==="number")return 1;if(typeof v==="string")return 2;if(typeof v==="boolean")return 8;if(isArray(v))return 4;if(v===null)return 10;if(v instanceof RegExp)return 11;if(typeof v==="function")return 13;if(v instanceof Date)return 9;if(EJSON.isBinary(v))return 5;return 3},_equal:function(a,b){return EJSON.equals(a,b,{keyOrderSensitive:true})},_typeorder:function(t){return[-1,1,2,3,4,5,-1,6,7,8,0,9,-1,100,2,100,1,8,1][t]},_cmp:function(a,b){if(a===undefined)return b===undefined?0:-1;if(b===undefined)return 1;var ta=LocalCollection._f._type(a);var tb=LocalCollection._f._type(b);var oa=LocalCollection._f._typeorder(ta);var ob=LocalCollection._f._typeorder(tb);if(oa!==ob)return oa<ob?-1:1;if(ta!==tb)throw Error("Missing type coercion logic in _cmp");if(ta===7){ta=tb=2;a=a.toHexString();b=b.toHexString()}if(ta===9){ta=tb=1;a=a.getTime();b=b.getTime()}if(ta===1)return a-b;if(tb===2)return a<b?-1:a===b?0:1;if(ta===3){var to_array=function(obj){var ret=[];for(var key in obj){ret.push(key);ret.push(obj[key])}return ret};return LocalCollection._f._cmp(to_array(a),to_array(b))}if(ta===4){for(var i=0;;i++){if(i===a.length)return i===b.length?0:-1;if(i===b.length)return 1;var s=LocalCollection._f._cmp(a[i],b[i]);if(s!==0)return s}}if(ta===5){if(a.length!==b.length)return a.length-b.length;for(i=0;i<a.length;i++){if(a[i]<b[i])return-1;if(a[i]>b[i])return 1}return 0}if(ta===8){if(a)return b?0:1;return b?-1:0}if(ta===10)return 0;if(ta===11)throw Error("Sorting not supported on regular expression");if(ta===13)throw Error("Sorting not supported on Javascript code");throw Error("Unknown type to sort")}};LocalCollection._matches=function(selector,doc){return LocalCollection._compileSelector(selector)(doc)};LocalCollection._makeLookupFunction=function(key){var dotLocation=key.indexOf(".");var first,lookupRest,nextIsNumeric;if(dotLocation===-1){first=key}else{first=key.substr(0,dotLocation);var rest=key.substr(dotLocation+1);lookupRest=LocalCollection._makeLookupFunction(rest);nextIsNumeric=/^\d+(\.|$)/.test(rest)}return function(doc){if(doc==null)return[undefined];var firstLevel=doc[first];if(!lookupRest)return[firstLevel];if(isArray(firstLevel)&&firstLevel.length===0)return[undefined];if(!isArray(firstLevel)||nextIsNumeric)firstLevel=[firstLevel];return Array.prototype.concat.apply([],_.map(firstLevel,lookupRest))}};var compileDocumentSelector=function(docSelector){var perKeySelectors=[];_.each(docSelector,function(subSelector,key){if(key.substr(0,1)==="$"){if(!_.has(LOGICAL_OPERATORS,key))throw new Error("Unrecognized logical operator: "+key);perKeySelectors.push(LOGICAL_OPERATORS[key](subSelector))}else{var lookUpByIndex=LocalCollection._makeLookupFunction(key);var valueSelectorFunc=compileValueSelector(subSelector);perKeySelectors.push(function(doc){var branchValues=lookUpByIndex(doc);return _.any(branchValues,valueSelectorFunc)})}});return function(doc){return _.all(perKeySelectors,function(f){return f(doc)})}};LocalCollection._compileSelector=function(selector){if(selector instanceof Function)return function(doc){return selector.call(doc)};if(LocalCollection._selectorIsId(selector)){return function(doc){return EJSON.equals(doc._id,selector)}}if(!selector||"_id"in selector&&!selector._id)return function(doc){return false};if(typeof selector==="boolean"||isArray(selector)||EJSON.isBinary(selector))throw new Error("Invalid selector: "+selector);return compileDocumentSelector(selector)};LocalCollection._compileSort=function(spec){var sortSpecParts=[];if(spec instanceof Array){for(var i=0;i<spec.length;i++){if(typeof spec[i]==="string"){sortSpecParts.push({lookup:LocalCollection._makeLookupFunction(spec[i]),ascending:true})}else{sortSpecParts.push({lookup:LocalCollection._makeLookupFunction(spec[i][0]),ascending:spec[i][1]!=="desc"})}}}else if(typeof spec==="object"){for(var key in spec){sortSpecParts.push({lookup:LocalCollection._makeLookupFunction(key),ascending:spec[key]>=0})}}else{throw Error("Bad sort specification: ",JSON.stringify(spec))}if(sortSpecParts.length===0)return function(){return 0};var reduceValue=function(branchValues,findMin){var reduced;var first=true;_.each(branchValues,function(branchValue){if(!isArray(branchValue))branchValue=[branchValue];if(isArray(branchValue)&&branchValue.length===0)branchValue=[undefined];_.each(branchValue,function(value){if(first){reduced=value;first=false}else{var cmp=LocalCollection._f._cmp(reduced,value);if(findMin&&cmp>0||!findMin&&cmp<0)reduced=value}})});return reduced};return function(a,b){for(var i=0;i<sortSpecParts.length;++i){var specPart=sortSpecParts[i];var aValue=reduceValue(specPart.lookup(a),specPart.ascending);var bValue=reduceValue(specPart.lookup(b),specPart.ascending);var compare=LocalCollection._f._cmp(aValue,bValue);if(compare!==0)return specPart.ascending?compare:-compare}return 0}};exports.compileDocumentSelector=compileDocumentSelector;exports.compileSort=LocalCollection._compileSort},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});var helpers_1=__webpack_require__(4);function getCoord(coord){if(!coord){throw new Error("coord is required")}if(!Array.isArray(coord)){if(coord.type==="Feature"&&coord.geometry!==null&&coord.geometry.type==="Point"){return coord.geometry.coordinates}if(coord.type==="Point"){return coord.coordinates}}if(Array.isArray(coord)&&coord.length>=2&&!Array.isArray(coord[0])&&!Array.isArray(coord[1])){return coord}throw new Error("coord must be GeoJSON Point or an Array of numbers")}exports.getCoord=getCoord;function getCoords(coords){if(Array.isArray(coords)){return coords}if(coords.type==="Feature"){if(coords.geometry!==null){return coords.geometry.coordinates}}else{if(coords.coordinates){return coords.coordinates}}throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array")}exports.getCoords=getCoords;function containsNumber(coordinates){if(coordinates.length>1&&helpers_1.isNumber(coordinates[0])&&helpers_1.isNumber(coordinates[1])){return true}if(Array.isArray(coordinates[0])&&coordinates[0].length){return containsNumber(coordinates[0])}throw new Error("coordinates must only contain numbers")}exports.containsNumber=containsNumber;function geojsonType(value,type,name){if(!type||!name){throw new Error("type and name required")}if(!value||value.type!==type){throw new Error("Invalid input to "+name+": must be a "+type+", given "+value.type)}}exports.geojsonType=geojsonType;function featureOf(feature,type,name){if(!feature){throw new Error("No feature passed")}if(!name){throw new Error(".featureOf() requires a name")}if(!feature||feature.type!=="Feature"||!feature.geometry){throw new Error("Invalid input to "+name+", Feature with geometry required")}if(!feature.geometry||feature.geometry.type!==type){throw new Error("Invalid input to "+name+": must be a "+type+", given "+feature.geometry.type)}}exports.featureOf=featureOf;function collectionOf(featureCollection,type,name){if(!featureCollection){throw new Error("No featureCollection passed")}if(!name){throw new Error(".collectionOf() requires a name")}if(!featureCollection||featureCollection.type!=="FeatureCollection"){throw new Error("Invalid input to "+name+", FeatureCollection required")}for(var _i=0,_a=featureCollection.features;_i<_a.length;_i++){var feature=_a[_i];if(!feature||feature.type!=="Feature"||!feature.geometry){throw new Error("Invalid input to "+name+", Feature with geometry required")}if(!feature.geometry||feature.geometry.type!==type){throw new Error("Invalid input to "+name+": must be a "+type+", given "+feature.geometry.type)}}}exports.collectionOf=collectionOf;function getGeom(geojson){if(geojson.type==="Feature"){return geojson.geometry}return geojson}exports.getGeom=getGeom;function getType(geojson,name){if(geojson.type==="FeatureCollection"){return"FeatureCollection"}if(geojson.type==="GeometryCollection"){return"GeometryCollection"}if(geojson.type==="Feature"&&geojson.geometry!==null){return geojson.geometry.type}return geojson.type}exports.getType=getType},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.earthRadius=6371008.8;exports.factors={centimeters:exports.earthRadius*100,centimetres:exports.earthRadius*100,degrees:exports.earthRadius/111325,feet:exports.earthRadius*3.28084,inches:exports.earthRadius*39.37,kilometers:exports.earthRadius/1e3,kilometres:exports.earthRadius/1e3,meters:exports.earthRadius,metres:exports.earthRadius,miles:exports.earthRadius/1609.344,millimeters:exports.earthRadius*1e3,millimetres:exports.earthRadius*1e3,nauticalmiles:exports.earthRadius/1852,radians:1,yards:exports.earthRadius/1.0936};exports.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:1/1e3,kilometres:1/1e3,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/exports.earthRadius,yards:1/1.0936};exports.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:3.86e-7,millimeters:1e6,millimetres:1e6,yards:1.195990046};function feature(geom,properties,options){if(options===void 0){options={}}var feat={type:"Feature"};if(options.id===0||options.id){feat.id=options.id}if(options.bbox){feat.bbox=options.bbox}feat.properties=properties||{};feat.geometry=geom;return feat}exports.feature=feature;function geometry(type,coordinates,options){if(options===void 0){options={}}switch(type){case"Point":return point(coordinates).geometry;case"LineString":return lineString(coordinates).geometry;case"Polygon":return polygon(coordinates).geometry;case"MultiPoint":return multiPoint(coordinates).geometry;case"MultiLineString":return multiLineString(coordinates).geometry;case"MultiPolygon":return multiPolygon(coordinates).geometry;default:throw new Error(type+" is invalid")}}exports.geometry=geometry;function point(coordinates,properties,options){if(options===void 0){options={}}var geom={type:"Point",coordinates:coordinates};return feature(geom,properties,options)}exports.point=point;function points(coordinates,properties,options){if(options===void 0){options={}}return featureCollection(coordinates.map(function(coords){return point(coords,properties)}),options)}exports.points=points;function polygon(coordinates,properties,options){if(options===void 0){options={}}for(var _i=0,coordinates_1=coordinates;_i<coordinates_1.length;_i++){var ring=coordinates_1[_i];if(ring.length<4){throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.")}for(var j=0;j<ring[ring.length-1].length;j++){if(ring[ring.length-1][j]!==ring[0][j]){throw new Error("First and last Position are not equivalent.")}}}var geom={type:"Polygon",coordinates:coordinates};return feature(geom,properties,options)}exports.polygon=polygon;function polygons(coordinates,properties,options){if(options===void 0){options={}}return featureCollection(coordinates.map(function(coords){return polygon(coords,properties)}),options)}exports.polygons=polygons;function lineString(coordinates,properties,options){if(options===void 0){options={}}if(coordinates.length<2){throw new Error("coordinates must be an array of two or more positions")}var geom={type:"LineString",coordinates:coordinates};return feature(geom,properties,options)}exports.lineString=lineString;function lineStrings(coordinates,properties,options){if(options===void 0){options={}}return featureCollection(coordinates.map(function(coords){return lineString(coords,properties)}),options)}exports.lineStrings=lineStrings;function featureCollection(features,options){if(options===void 0){options={}}var fc={type:"FeatureCollection"};if(options.id){fc.id=options.id}if(options.bbox){fc.bbox=options.bbox}fc.features=features;return fc}exports.featureCollection=featureCollection;function multiLineString(coordinates,properties,options){if(options===void 0){options={}}var geom={type:"MultiLineString",coordinates:coordinates};return feature(geom,properties,options)}exports.multiLineString=multiLineString;function multiPoint(coordinates,properties,options){if(options===void 0){options={}}var geom={type:"MultiPoint",coordinates:coordinates};return feature(geom,properties,options)}exports.multiPoint=multiPoint;function multiPolygon(coordinates,properties,options){if(options===void 0){options={}}var geom={type:"MultiPolygon",coordinates:coordinates};return feature(geom,properties,options)}exports.multiPolygon=multiPolygon;function geometryCollection(geometries,properties,options){if(options===void 0){options={}}var geom={type:"GeometryCollection",geometries:geometries};return feature(geom,properties,options)}exports.geometryCollection=geometryCollection;function round(num,precision){if(precision===void 0){precision=0}if(precision&&!(precision>=0)){throw new Error("precision must be a positive number")}var multiplier=Math.pow(10,precision||0);return Math.round(num*multiplier)/multiplier}exports.round=round;function radiansToLength(radians,units){if(units===void 0){units="kilometers"}var factor=exports.factors[units];if(!factor){throw new Error(units+" units is invalid")}return radians*factor}exports.radiansToLength=radiansToLength;function lengthToRadians(distance,units){if(units===void 0){units="kilometers"}var factor=exports.factors[units];if(!factor){throw new Error(units+" units is invalid")}return distance/factor}exports.lengthToRadians=lengthToRadians;function lengthToDegrees(distance,units){return radiansToDegrees(lengthToRadians(distance,units))}exports.lengthToDegrees=lengthToDegrees;function bearingToAzimuth(bearing){var angle=bearing%360;if(angle<0){angle+=360}return angle}exports.bearingToAzimuth=bearingToAzimuth;function radiansToDegrees(radians){var degrees=radians%(2*Math.PI);return degrees*180/Math.PI}exports.radiansToDegrees=radiansToDegrees;function degreesToRadians(degrees){var radians=degrees%360;return radians*Math.PI/180}exports.degreesToRadians=degreesToRadians;function convertLength(length,originalUnit,finalUnit){if(originalUnit===void 0){originalUnit="kilometers"}if(finalUnit===void 0){finalUnit="kilometers"}if(!(length>=0)){throw new Error("length must be a positive number")}return radiansToLength(lengthToRadians(length,originalUnit),finalUnit)}exports.convertLength=convertLength;function convertArea(area,originalUnit,finalUnit){if(originalUnit===void 0){originalUnit="meters"}if(finalUnit===void 0){finalUnit="kilometers"}if(!(area>=0)){throw new Error("area must be a positive number")}var startFactor=exports.areaFactors[originalUnit];if(!startFactor){throw new Error("invalid original units")}var finalFactor=exports.areaFactors[finalUnit];if(!finalFactor){throw new Error("invalid final units")}return area/startFactor*finalFactor}exports.convertArea=convertArea;function isNumber(num){return!isNaN(num)&&num!==null&&!Array.isArray(num)&&!/^\s*$/.test(num)}exports.isNumber=isNumber;function isObject(input){return!!input&&input.constructor===Object}exports.isObject=isObject;function validateBBox(bbox){if(!bbox){throw new Error("bbox is required")}if(!Array.isArray(bbox)){throw new Error("bbox must be an Array")}if(bbox.length!==4&&bbox.length!==6){throw new Error("bbox must be an Array of 4 or 6 numbers")}bbox.forEach(function(num){if(!isNumber(num)){throw new Error("bbox must only contain numbers")}})}exports.validateBBox=validateBBox;function validateId(id){if(!id){throw new Error("id is required")}if(["string","number"].indexOf(typeof id)===-1){throw new Error("id must be a number or a string")}}exports.validateId=validateId;function radians2degrees(){throw new Error("method has been renamed to `radiansToDegrees`")}exports.radians2degrees=radians2degrees;function degrees2radians(){throw new Error("method has been renamed to `degreesToRadians`")}exports.degrees2radians=degrees2radians;function distanceToDegrees(){throw new Error("method has been renamed to `lengthToDegrees`")}exports.distanceToDegrees=distanceToDegrees;function distanceToRadians(){throw new Error("method has been renamed to `lengthToRadians`")}exports.distanceToRadians=distanceToRadians;function radiansToDistance(){throw new Error("method has been renamed to `radiansToLength`")}exports.radiansToDistance=radiansToDistance;function bearingToAngle(){throw new Error("method has been renamed to `bearingToAzimuth`")}exports.bearingToAngle=bearingToAngle;function convertDistance(){throw new Error("method has been renamed to `convertLength`")}exports.convertDistance=convertDistance},function(module,exports,__webpack_require__){(function(global,setImmediate,process){var __WEBPACK_AMD_DEFINE_ARRAY__,__WEBPACK_AMD_DEFINE_RESULT__;/*! * async * https://github.com/caolan/async * * Copyright 2010-2014 Caolan McMahon * Released under the MIT license */ (function(){var async={};function noop(){}function identity(v){return v}function toBool(v){return!!v}function notId(v){return!v}var previous_async;var root=typeof self==="object"&&self.self===self&&self||typeof global==="object"&&global.global===global&&global||this;if(root!=null){previous_async=root.async}async.noConflict=function(){root.async=previous_async;return async};function only_once(fn){return function(){if(fn===null)throw new Error("Callback was already called.");fn.apply(this,arguments);fn=null}}function _once(fn){return function(){if(fn===null)return;fn.apply(this,arguments);fn=null}}var _toString=Object.prototype.toString;var _isArray=Array.isArray||function(obj){return _toString.call(obj)==="[object Array]"};var _isObject=function(obj){var type=typeof obj;return type==="function"||type==="object"&&!!obj};function _isArrayLike(arr){return _isArray(arr)||typeof arr.length==="number"&&arr.length>=0&&arr.length%1===0}function _arrayEach(arr,iterator){var index=-1,length=arr.length;while(++index<length){iterator(arr[index],index,arr)}}function _map(arr,iterator){var index=-1,length=arr.length,result=Array(length);while(++index<length){result[index]=iterator(arr[index],index,arr)}return result}function _range(count){return _map(Array(count),function(v,i){return i})}function _reduce(arr,iterator,memo){_arrayEach(arr,function(x,i,a){memo=iterator(memo,x,i,a)});return memo}function _forEachOf(object,iterator){_arrayEach(_keys(object),function(key){iterator(object[key],key)})}function _indexOf(arr,item){for(var i=0;i<arr.length;i++){if(arr[i]===item)return i}return-1}var _keys=Object.keys||function(obj){var keys=[];for(var k in obj){if(obj.hasOwnProperty(k)){keys.push(k)}}return keys};function _keyIterator(coll){var i=-1;var len;var keys;if(_isArrayLike(coll)){len=coll.length;return function next(){i++;return i<len?i:null}}else{keys=_keys(coll);len=keys.length;return function next(){i++;return i<len?keys[i]:null}}}function _restParam(func,startIndex){startIndex=startIndex==null?func.length-1:+startIndex;return function(){var length=Math.max(arguments.length-startIndex,0);var rest=Array(length);for(var index=0;index<length;index++){rest[index]=arguments[index+startIndex]}switch(startIndex){case 0:return func.call(this,rest);case 1:return func.call(this,arguments[0],rest)}}}function _withoutIndex(iterator){return function(value,index,callback){return iterator(value,callback)}}var _setImmediate=typeof setImmediate==="function"&&setImmediate;var _delay=_setImmediate?function(fn){_setImmediate(fn)}:function(fn){setTimeout(fn,0)};if(typeof process==="object"&&typeof process.nextTick==="function"){async.nextTick=process.nextTick}else{async.nextTick=_delay}async.setImmediate=_setImmediate?_delay:async.nextTick;async.forEach=async.each=function(arr,iterator,callback){return async.eachOf(arr,_withoutIndex(iterator),callback)};async.forEachSeries=async.eachSeries=function(arr,iterator,callback){return async.eachOfSeries(arr,_withoutIndex(iterator),callback)};async.forEachLimit=async.eachLimit=function(arr,limit,iterator,callback){return _eachOfLimit(limit)(arr,_withoutIndex(iterator),callback)};async.forEachOf=async.eachOf=function(object,iterator,callback){callback=_once(callback||noop);object=object||[];var iter=_keyIterator(object);var key,completed=0;while((key=iter())!=null){completed+=1;iterator(object[key],key,only_once(done))}if(completed===0)callback(null);function done(err){completed--;if(err){callback(err)}else if(key===null&&completed<=0){callback(null)}}};async.forEachOfSeries=async.eachOfSeries=function(obj,iterator,callback){callback=_once(callback||noop);obj=obj||[];var nextKey=_keyIterator(obj);var key=nextKey();function iterate(){var sync=true;if(key===null){return callback(null)}iterator(obj[key],key,only_once(function(err){if(err){callback(err)}else{key=nextKey();if(key===null){return callback(null)}else{if(sync){async.setImmediate(iterate)}else{iterate()}}}}));sync=false}iterate()};async.forEachOfLimit=async.eachOfLimit=function(obj,limit,iterator,callback){_eachOfLimit(limit)(obj,iterator,callback)};function _eachOfLimit(limit){return function(obj,iterator,callback){callback=_once(callback||noop);obj=obj||[];var nextKey=_keyIterator(obj);if(limit<=0){return callback(null)}var done=false;var running=0;var errored=false;(function replenish(){if(done&&running<=0){return callback(null)}while(running<limit&&!errored){var key=nextKey();if(key===null){done=true;if(running<=0){callback(null)}return}running+=1;iterator(obj[key],key,only_once(function(err){running-=1;if(err){callback(err);errored=true}else{replenish()}}))}})()}}function doParallel(fn){return function(obj,iterator,callback){return fn(async.eachOf,obj,iterator,callback)}}function doParallelLimit(fn){return function(obj,limit,iterator,callback){return fn(_eachOfLimit(limit),obj,iterator,callback)}}function doSeries(fn){return function(obj,iterator,callback){return fn(async.eachOfSeries,obj,iterator,callback)}}function _asyncMap(eachfn,arr,iterator,callback){callback=_once(callback||noop);arr=arr||[];var results=_isArrayLike(arr)?[]:{};eachfn(arr,function(value,index,callback){iterator(value,function(err,v){results[index]=v;callback(err)})},function(err){callback(err,results)})}async.map=doParallel(_asyncMap);async.mapSeries=doSeries(_asyncMap);async.mapLimit=doParallelLimit(_asyncMap);async.inject=async.foldl=async.reduce=function(arr,memo,iterator,callback){async.eachOfSeries(arr,function(x,i,callback){iterator(memo,x,function(err,v){memo=v;callback(err)})},function(err){callback(err,memo)})};async.foldr=async.reduceRight=function(arr,memo,iterator,callback){var reversed=_map(arr,identity).reverse();async.reduce(reversed,memo,iterator,callback)};async.transform=function(arr,memo,iterator,callback){if(arguments.length===3){callback=iterator;iterator=memo;memo=_isArray(arr)?[]:{}}async.eachOf(arr,function(v,k,cb){iterator(memo,v,k,cb)},function(err){callback(err,memo)})};function _filter(eachfn,arr,iterator,callback){var results=[];eachfn(arr,function(x,index,callback){iterator(x,function(v){if(v){results.push({index:index,value:x})}callback()})},function(){callback(_map(results.sort(function(a,b){return a.index-b.index}),function(x){return x.value}))})}async.select=async.filter=doParallel(_filter);async.selectLimit=async.filterLimit=doParallelLimit(_filter);async.selectSeries=async.filterSeries=doSeries(_filter);function _reject(eachfn,arr,iterator,callback){_filter(eachfn,arr,function(value,cb){iterator(value,function(v){cb(!v)})},callback)}async.reject=doParallel(_reject);async.rejectLimit=doParallelLimit(_reject);async.rejectSeries=doSeries(_reject);function _createTester(eachfn,check,getResult){return function(arr,limit,iterator,cb){function done(){if(cb)cb(getResult(false,void 0))}function iteratee(x,_,callback){if(!cb)return callback();iterator(x,function(v){if(cb&&check(v)){cb(getResult(true,x));cb=iterator=false}callback()})}if(arguments.length>3){eachfn(arr,limit,iteratee,done)}else{cb=iterator;iterator=limit;eachfn(arr,iteratee,done)}}}async.any=async.some=_createTester(async.eachOf,toBool,identity);async.someLimit=_createTester(async.eachOfLimit,toBool,identity);async.all=async.every=_createTester(async.eachOf,notId,notId);async.everyLimit=_createTester(async.eachOfLimit,notId,notId);function _findGetResult(v,x){return x}async.detect=_createTester(async.eachOf,identity,_findGetResult);async.detectSeries=_createTester(async.eachOfSeries,identity,_findGetResult);async.detectLimit=_createTester(async.eachOfLimit,identity,_findGetResult);async.sortBy=function(arr,iterator,callback){async.map(arr,function(x,callback){iterator(x,function(err,criteria){if(err){callback(err)}else{callback(null,{value:x,criteria:criteria})}})},function(err,results){if(err){return callback(err)}else{callback(null,_map(results.sort(comparator),function(x){return x.value}))}});function comparator(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0}};async.auto=function(tasks,concurrency,callback){if(typeof arguments[1]==="function"){callback=concurrency;concurrency=null}callback=_once(callback||noop);var keys=_keys(tasks);var remainingTasks=keys.length;if(!remainingTasks){return callback(null)}if(!concurrency){concurrency=remainingTasks}var results={};var runningTasks=0;var hasError=false;var listeners=[];function addListener(fn){listeners.unshift(fn)}function removeListener(fn){var idx=_indexOf(listeners,fn);if(idx>=0)listeners.splice(idx,1)}function taskComplete(){remainingTasks--;_arrayEach(listeners.slice(0),function(fn){fn()})}addListener(function(){if(!remainingTasks){callback(null,results)}});_arrayEach(keys,function(k){if(hasError)return;var task=_isArray(tasks[k])?tasks[k]:[tasks[k]];var taskCallback=_restParam(function(err,args){runningTasks--;if(args.length<=1){args=args[0]}if(err){var safeResults={};_forEachOf(results,function(val,rkey){safeResults[rkey]=val});safeResults[k]=args;hasError=true;callback(err,safeResults)}else{results[k]=args;async.setImmediate(taskComplete)}});var requires=task.slice(0,task.length-1);var len=requires.length;var dep;while(len--){if(!(dep=tasks[requires[len]])){throw new Error("Has nonexistent dependency in "+requires.join(", "))}if(_isArray(dep)&&_indexOf(dep,k)>=0){throw new Error("Has cyclic dependencies")}}function ready(){return runningTasks<concurrency&&_reduce(requires,function(a,x){return a&&results.hasOwnProperty(x)},true)&&!results.hasOwnProperty(k)}if(ready()){runningTasks++;task[task.length-1](taskCallback,results)}else{addListener(listener)}function listener(){if(ready()){runningTasks++;removeListener(listener);task[task.length-1](taskCallback,results)}}})};async.retry=function(times,task,callback){var DEFAULT_TIMES=5;var DEFAULT_INTERVAL=0;var attempts=[];var opts={times:DEFAULT_TIMES,interval:DEFAULT_INTERVAL};function parseTimes(acc,t){if(typeof t==="number"){acc.times=parseInt(t,10)||DEFAULT_TIMES}else if(typeof t==="object"){acc.times=parseInt(t.times,10)||DEFAULT_TIMES;acc.interval=parseInt(t.interval,10)||DEFAULT_INTERVAL}else{throw new Error("Unsupported argument type for 'times': "+typeof t)}}var length=arguments.length;if(length<1||length>3){throw new Error("Invalid arguments - must be either (task), (task, callback), (times, task) or (times, task, callback)")}else if(length<=2&&typeof times==="function"){callback=task;task=times}if(typeof times!=="function"){parseTimes(opts,times)}opts.callback=callback;opts.task=task;function wrappedTask(wrappedCallback,wrappedResults){function retryAttempt(task,finalAttempt){return function(seriesCallback){task(function(err,result){seriesCallback(!err||finalAttempt,{err:err,result:result})},wrappedResults)}}function retryInterval(interval){return function(seriesCallback){setTimeout(function(){seriesCallback(null)},interval)}}while(opts.times){var finalAttempt=!(opts.times-=1);attempts.push(retryAttempt(opts.task,finalAttempt));if(!finalAttempt&&opts.interval>0){attempts.push(retryInterval(opts.interval))}}async.series(attempts,function(done,data){data=data[data.length-1];(wrappedCallback||opts.callback)(data.err,data.result)})}return opts.callback?wrappedTask():wrappedTask};async.waterfall=function(tasks,callback){callback=_once(callback||noop);if(!_isArray(tasks)){var err=new Error("First argument to waterfall must be an array of functions");return callback(err)}if(!tasks.length){return callback()}function wrapIterator(iterator){return _restParam(function(err,args){if(err){callback.apply(null,[err].concat(args))}else{var next=iterator.next();if(next){args.push(wrapIterator(next))}else{args.push(callback)}ensureAsync(iterator).apply(null,args)}})}wrapIterator(async.iterator(tasks))()};function _parallel(eachfn,tasks,callback){callback=callback||noop;var results=_isArrayLike(tasks)?[]:{};eachfn(tasks,function(task,key,callback){task(_restParam(function(err,args){if(args.length<=1){args=args[0]}results[key]=args;callback(err)}))},function(err){callback(err,results)})}async.parallel=function(tasks,callback){_parallel(async.eachOf,tasks,callback)};async.parallelLimit=function(tasks,limit,callback){_parallel(_eachOfLimit(limit),tasks,callback)};async.series=function(tasks,callback){_parallel(async.eachOfSeries,tasks,callback)};async.iterator=function(tasks){function makeCallback(index){function fn(){if(tasks.length){tasks[index].apply(null,arguments)}return fn.next()}fn.next=function(){return index<tasks.length-1?makeCallback(index+1):null};return fn}return makeCallback(0)};async.apply=_restParam(function(fn,args){return _restParam(function(callArgs){return fn.apply(null,args.concat(callArgs))})});function _concat(eachfn,arr,fn,callback){var result=[];eachfn(arr,function(x,index,cb){fn(x,function(err,y){result=result.concat(y||[]);cb(err)})},function(err){callback(err,result)})}async.concat=doParallel(_concat);async.concatSeries=doSeries(_concat);async.whilst=function(test,iterator,callback){callback=callback||noop;if(test()){var next=_restParam(function(err,args){if(err){callback(err)}else if(test.apply(this,args)){iterator(next)}else{callback.apply(null,[null].concat(args))}});iterator(next)}else{callback(null)}};async.doWhilst=function(iterator,test,callback){var calls=0;return async.whilst(function(){return++calls<=1||test.apply(this,arguments)},iterator,callback)};async.until=function(test,iterator,callback){return async.whilst(function(){return!test.apply(this,arguments)},iterator,callback)};async.doUntil=function(iterator,test,callback){return async.doWhilst(iterator,function(){return!test.apply(this,arguments)},callback)};async.during=function(test,iterator,callback){callback=callback||noop;var next=_restParam(function(err,args){if(err){callback(err)}else{args.push(check);test.apply(this,args)}});var check=function(err,truth){if(err){callback(err)}else if(truth){iterator(next)}else{callback(null)}};test(check)};async.doDuring=function(iterator,test,callback){var calls=0;async.during(function(next){if(calls++<1){next(null,true)}else{test.apply(this,arguments)}},iterator,callback)};function _queue(worker,concurrency,payload){if(concurrency==null){concurrency=1}else if(concurrency===0){throw new Error("Concurrency must not be zero")}function _insert(q,data,pos,callback){if(callback!=null&&typeof callback!=="function"){throw new Error("task callback must be a function")}q.started=true;if(!_isArray(data)){data=[data]}if(data.length===0&&q.idle()){return async.setImmediate(function(){q.drain()})}_arrayEach(data,function(task){var item={data:task,callback:callback||noop};if(pos){q.tasks.unshift(item)}else{q.tasks.push(item)}if(q.tasks.length===q.concurrency){q.saturated()}});async.setImmediate(q.process)}function _next(q,tasks){return function(){workers-=1;var removed=false;var args=arguments;_arrayEach(tasks,function(task){_arrayEach(workersList,function(worker,index){if(worker===task&&!removed){workersList.splice(index,1);removed=true}});task.callback.apply(task,args)});if(q.tasks.length+workers===0){q.drain()}q.process()}}var workers=0;var workersList=[];var q={tasks:[],concurrency:concurrency,payload:payload,saturated:noop,empty:noop,drain:noop,started:false,paused:false,push:function(data,callback){_insert(q,data,false,callback)},kill:function(){q.drain=noop;q.tasks=[]},unshift:function(data,callback){_insert(q,data,true,callback)},process:function(){while(!q.paused&&workers<q.concurrency&&q.tasks.length){var tasks=q.payload?q.tasks.splice(0,q.payload):q.tasks.splice(0,q.tasks.length);var data=_map(tasks,function(task){return task.data});if(q.tasks.length===0){q.empty()}workers+=1;workersList.push(tasks[0]);var cb=only_once(_next(q,tasks));worker(data,cb)}},length:function(){return q.tasks.length},running:function(){return workers},workersList:function(){return workersList},idle:function(){return q.tasks.length+workers===0},pause:function(){q.paused=true},resume:function(){if(q.paused===false){return}q.paused=false;var resumeCount=Math.min(q.concurrency,q.tasks.length);for(var w=1;w<=resumeCount;w++){async.setImmediate(q.process)}}};return q}async.queue=function(worker,concurrency){var q=_queue(function(items,cb){worker(items[0],cb)},concurrency,1);return q};async.priorityQueue=function(worker,concurrency){function _compareTasks(a,b){return a.priority-b.priority}function _binarySearch(sequence,item,compare){var beg=-1,end=sequence.length-1;while(beg<end){var mid=beg+(end-beg+1>>>1);if(compare(item,sequence[mid])>=0){beg=mid}else{end=mid-1}}return beg}function _insert(q,data,priority,callback){if(callback!=null&&typeof callback!=="function"){throw new Error("task callback must be a function")}q.started=true;if(!_isArray(data)){data=[data]}if(data.length===0){return async.setImmediate(function(){q.drain()})}_arrayEach(data,function(task){var item={data:task,priority:priority,callback:typeof callback==="function"?callback:noop};q.tasks.splice(_binarySearch(q.tasks,item,_compareTasks)+1,0,item);if(q.tasks.length===q.concurrency){q.saturated()}async.setImmediate(q.process)})}var q=async.queue(worker,concurrency);q.push=function(data,priority,callback){_insert(q,data,pr