UNPKG

horse-generator

Version:
1 lines 1.9 kB
"use strict";var _typeof2=require("babel-runtime/helpers/typeof"),_typeof3=_interopRequireDefault(_typeof2);function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}exports.getPlugin=function(e){var t,n,i=require("mongoose"),o=require("extend");try{n=e.model("IdentityCounter")}catch(o){if("MissingSchemaError"!==o.name)throw o;(t=new i.Schema({model:{type:String,require:!0},field:{type:String,require:!0},count:{type:Number,default:0}})).index({field:1,model:1},{unique:!0,required:!0,index:-1}),n=e.model("IdentityCounter",t)}return function(e,t){if(!n)throw new Error("mongoose-auto-increment has not been initialized");var i={model:null,field:"_id",startAt:0,incrementBy:1,unique:!0},r={},d=!1;switch(void 0===t?"undefined":(0,_typeof3.default)(t)){case"string":i.model=t;break;case"object":o(i,t)}if(null===i.model)throw new Error("model must be set");r[i.field]={type:Number,require:!0},"_id"!==i.field&&(r[i.field].unique=i.unique),e.add(r),n.findOne({model:i.model,field:i.field},function(e,t){t?d=!0:(t=new n({model:i.model,field:i.field,count:i.startAt-i.incrementBy})).save(function(){d=!0})});var u=function(e){n.findOne({model:i.model,field:i.field},function(t,n){if(t)return e(t);e(null,null===n?i.startAt:n.count+i.incrementBy)})};e.method("nextCount",u),e.static("nextCount",u);var l=function(e){n.findOneAndUpdate({model:i.model,field:i.field},{count:i.startAt-i.incrementBy},{new:!0},function(t){if(t)return e(t);e(null,i.startAt)})};e.method("resetCount",l),e.static("resetCount",l),e.pre("save",function(e){var t=this;t.isNew?function o(){d?"number"==typeof t[i.field]?n.findOneAndUpdate({model:i.model,field:i.field,count:{$lt:t[i.field]}},{count:t[i.field]},function(t){if(t)return e(t);e()}):n.findOneAndUpdate({model:i.model,field:i.field},{$inc:{count:i.incrementBy}},{new:!0},function(n,o){if(n)return e(n);t[i.field]=o.count,e()}):setTimeout(o,5)}():e()})}};