/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/model@6.0.1/lib/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
var Query,query,association,util=require("util"),model={},EventEmitter=require("events").EventEmitter,utils=require("utilities"),config=require("./base_config"),adapters=require("./adapters"),_foreignKeyCreators=[],_systemProperties={id:!0,type:!0,createdAt:!0,updatedAt:!0};utils.mixin(model,new function(){this.config=config,this.ModelBase=function(){},this.adapters={},this.descriptionRegistry={},this.defaultAdapter=null,this.datatypes=null,this.validators=require("./validators"),this.formatters=require("./formatters"),this.Migration=require("./migration").Migration,this.log=function(){},util.inherits(this.ModelBase,EventEmitter);this.clearDefinitions=function(e){var t=this;e.forEach((function(e){var i=e.name||e.ctorName;delete t[i]}))},this.registerDefinitions=function(e){var t=this;e.forEach((function(e){var i=e.name||e.ctorName;t[i]||t.registerDefinition(i,e.ctor)})),this.createForeignKeys()},this.register=function(e,t){return this.registerDefinition(e,t)},this.registerDefinition=function(e,t){var i,r,o,n=t.prototype;return model.descriptionRegistry[e]=new model.ModelDescription(e),t.prototype=new model.ModelDefinitionBase(e),i=new t,o=i,r=function(e){var t=this,i=model.descriptionRegistry[o.name].associations;this.type=o.name,this._saved=e._saved||!1,e.id&&(this.id=e.id),this.isValid=function(){return!this.errors},this.save=function(){var e=Array.prototype.slice.call(arguments),t=model[this.type];e.unshift(this),this._commitAssociationChanges((function(i,r){if(i)return e.pop()(i);t.save.apply(t,e)}))},this.updateProperties=function(e,t){model.updateItem(this,e,t||{})},this.updateAttributes=this.updateProperties,this.toJSON=function(e){var t,i=this,r=e||{},o=Object.keys(_systemProperties),n={},a=model.descriptionRegistry[this.type],s=a.properties,l=a.associations||{},d={hasMany:"plural",hasOne:"singular",belongsTo:"singular"};for(var u in o=o.concat(r.whitelist||[]),s)n[u]=this[u];for(var p in d)for(var u in l[p])this[t=utils.string.getInflection(u,"property",d[p])]&&(n[t]=this[t]);return o.forEach((function(e){i[e]&&(n[e]=i[e])})),n},this.toData=this.toJSON,this.toObj=this.toJSON,this.toString=function(){var e,t={},i=model.descriptionRegistry[this.type].properties;for(var r in t.id=this.id,t.type=this.type,i)e=model.formatters[i[r].datatype],t[r]="function"==typeof e?e(this[r]):this[r];return JSON.stringify(t)},this._getAssociation=association._getAssociation,this._createAssociation=association._createAssociation,this._removeAssociation=association._removeAssociation,this._commitAssociationChanges=association._commitAssociationChanges,this.clone=function(){var e;return(e=model[this.type].create(utils.enhance({},this.toJSON(),{id:this.id}))).associations=utils.enhance({},this.associations),e._saved=this._saved,e},["hasMany","hasOne","belongsTo"].forEach((function(e){var r,o=function(e,i,r){return function(){var o=Array.prototype.slice.call(arguments);o.unshift(r),o.unshift(i),t[e+"Association"].apply(t,o)}};if(r=i[e])for(var n in r)!function(i){var r="hasMany"==e?utils.inflection.pluralize(i):i,n="hasMany"==e?"add":"set";t["get"+r]=o("_get",i,e),t[n+i]=o("_create",i,e),t["remove"+i]=o("_remove",i,e)}(n)}))},utils.mixin(r,function(e){var t={create:function(){var t=Array.prototype.slice.call(arguments);return t.unshift(e),model.createItem.apply(model,t)},getAdapter:function(){return model.getAdapterForModel(e)},first:function(){var e,i=Array.prototype.slice.call(arguments),r=i.pop(),o=i.shift()||{},n=i.shift()||{};return"string"!=typeof o&&"number"!=typeof o||(o={id:o}),!n.id&&(n.limit=1,n.includes)?(delete(e=utils.mixin({},n)).includes,t.all(o,e,(function(e,i){if(e)return r(e,null);i&&i.id?(delete n.limit,t.all({id:i.id},n,(function(e,t){if(e)return r(e,null);t&&t.length?r(null,t[0]):r(null,null)}))):r(null,null)}))):t.all(o,n,r)},count:function(){var e=Array.prototype.slice.call(arguments),i=e.pop()||function(){},r=e.shift()||{},o=e.shift()||{};if(o.count=!0,o.includes)throw new Error("`count` cannot be used with eager fetch of associations.");return t.all.apply(t,[r,o,i])}};return t.load=t.first,t.all=function(){var t,i=Array.prototype.slice.call(arguments),r="function"==typeof i[i.length-1]?i.pop():null,o=i.shift()||{},n=i.shift()||{};if(n.scenario=n.scenario||"reify",o=new Query(model[e],o,n),t=model.getAdapterForModel(e),n.includes&&"sql"!=t.type)throw new Error('Only SQL adapters support the "includes" option for queries.');return t.load.apply(t,[o,r])},t.save=function(){var i,r,o,n,a=Array.prototype.slice.call(arguments),s=a.slice(),l=function(){model[e].emit.apply(model[e],s)},d=a.shift(),u=a.pop()||function(){},p=a.shift()||{};if(s.unshift("beforeSave"),i=model.getAdapterForModel(e),n=Array.isArray(d)){l(),r=!1;for(var c=0,f=d.length;c<f;c++){if((o=d[c])._saved)return u(new Error("A bulk-save can only have new items in it."),null);if(!o.isValid()&&!p.force)return u(o.errors,null)}}else{if(r=d._saved,!d.isValid()&&!p.force)return u(d.errors,null);if(r)return model.config.useTimestamps&&(d.updatedAt=new Date),t.update.apply(t,[d,{id:d.id},p,u]);"function"==typeof d.beforeSave&&d.beforeSave(),d.emit("beforeSave"),l()}return i.insert.apply(i,[d,p,function(t,i){t||(model[e].emit("save",i),n||("function"==typeof d.afterSave&&d.afterSave(),d.emit("save"))),u(t,i)}])},t.update=function(){var t,i,r,o,n,a=Array.prototype.slice.call(arguments);if(a.unshift("beforeUpdate"),model[e].emit.apply(model[e],a),a.shift(),t=a.shift(),i=a.pop()||function(){},r=a.shift()||{},o=a.shift()||{},"string"!=typeof r&&"number"!=typeof r||(r={id:r}),t instanceof model.ModelBase){if(!t.isValid()&&!o.force)return i(t.errors,null);t.emit("beforeUpdate")}return r=new Query(model[e],r,o),(n=model.getAdapterForModel(e)).update.apply(n,[t,r,function(r,o){r||(model[e].emit("update",o),"function"==typeof t.emit&&("function"==typeof t.afterUpdate&&t.afterUpdate(),t.emit("update"))),i(r,o)}])},t.remove=function(){var t,i,r,o,n=Array.prototype.slice.call(arguments);return n.unshift("beforeRemove"),model[e].emit.apply(model[e],n),n.shift(),t=n.shift(),i=n.pop()||function(){},r=n.shift()||{},"string"!=typeof t&&"number"!=typeof t||(t={id:t},r.limit=1),t=new Query(model[e],t,r),(o=model.getAdapterForModel(e)).remove.apply(o,[t,function(t,r){t||model[e].emit("remove",r),i(t,r)}])},t.getPropertyNames=function(){var t=model.descriptionRegistry[e].properties;return Object.keys(t)},t.modelName=e,t}(e)),utils.mixin(i,t),utils.mixin(r,i),utils.enhance(r,new EventEmitter),utils.mixin(n,i),r.prototype=new model.ModelBase,utils.enhance(r.prototype,n),model[e]=r,r},this.createItem=function(e,t,i){var r=t||{},o=i||{},n=new model[e](r);return o.scenario=o.scenario||"create",model[e].emit("beforeCreate",t,i),this.validateAndUpdateFromParams(n,r,o),this.config.useTimestamps&&!n.createdAt&&(n.createdAt=new Date),"function"==typeof n.afterCreate&&n.afterCreate(),model[e].emit("create",n),n},this.updateItem=function(e,t,i){var r={},o=e.type;return(i=i||{}).scenario=i.scenario||"update",model[o].emit("beforeUpdateProperties",e,t,i),e.emit("beforeUpdateProperties"),utils.mixin(r,e),utils.mixin(r,t),this.validateAndUpdateFromParams(e,r,i),"function"==typeof e.afterUpdateProperties&&e.afterUpdateProperties(),model[o].emit("updateProperties",e),e.emit("updateProperties"),e},this.validateAndUpdateFromParams=function(e,t,i){var r,o=e.type,n=model.descriptionRegistry[o].properties,a=null,s=null,l=i.skip,d=i.scenario,u={};if("function"==typeof e.beforeValidate&&e.beforeValidate(t),e.emit("beforeValidate"),model[o].emit("beforeValidate",e,t),delete e.errors,this.config.forceCamel)for(var p in r={},t)r[utils.string.camelize(p,{leadingUnderscore:!0})]=t[p];else r=t;if(void 0!==e.createdAt&&(r.createdAt=e.createdAt),void 0!==e.updatedAt&&(r.updatedAt=e.updatedAt),l)for(var c in l)u[l[c]]=!0;for(var p in n)u[p]||((a=this.validateProperty(n[p],r,{scenario:d})).err?((s=s||{})[p]=a.err,e[p]=r[p]):e[p]=a.val);return delete r.createdAt,delete r.updatedAt,s&&(e.errors=s),"function"==typeof e.afterValidate&&e.afterValidate(),e.emit("validate"),model[o].emit("validate",e),e},this.validateProperty=function(e,t,i){var r,o=i||{},n=e.name,a=t[n],s=e.datatype.toLowerCase(),l=this.datatypes[s].validate,d=(i.scenario,o.locale||utils.i18n.getDefaultLocale());if(!utils.isEmpty(a)){if("*"==e.datatype)r={val:a};else if((r=l(n,a,d)).err)return{err:r.err,val:null};a=r.val}var u,p,c,f=e.validations;for(var h in f){if(u=model.validators[h],c=utils.mixin({},f[h],{scenario:i.scenario}),"function"!=typeof u)throw new Error(h+" is not a valid validator");if(p=u(n,a,t,c,d))return{err:p,val:null}}return{err:null,val:a}},this.createAdapter=function(e,t){return adapters.create(e,t)},this.getAdapterInfo=function(e){return adapters.getAdapterInfo(e)},this.getAdapterForModel=function(e){var t=this[e],i=t&&t.adapter||this.defaultAdapter;if(!i)throw new Error("No adapter found for "+e+". Please define one with `setAdapter`, or define a default adapter with `model.setDefaultAdapter`.");return i},this.setDefaultAdapter=function(e,t){var i=adapters.create(e,t);this.defaultAdapter=i},this.getAssociation=function(e,t){var i,r=utils.string.getInflection(e,"constructor","singular"),o=utils.string.getInflection(t,"constructor","singular");for(var n in t=this.descriptionRegistry[r].associations)if(i=t[n][o])return i},this.getAssociationType=function(e,t){var i=utils.string.getInflection(e,"constructor","singular"),r=utils.string.getInflection(t,"constructor","singular");for(var o in t=this.descriptionRegistry[i].associations)if(t[o][r])return o},this.getModelByName=function(e){return this[e]},this.createForeignKeys=function(){for(var e;e=_foreignKeyCreators.pop();)e()},this.setLocalRequireError=function(e){this.localRequireError=e}}),model.ModelDefinitionBase=function(e){var t=this,i=model.descriptionRegistry,r=function(e){return function(){var i=Array.prototype.slice.call(arguments);return i.unshift(e),t.validates.apply(t,i)}};for(var o in this.name=e,this.setAdapter=function(e,t){var i=adapters.create(e,t);this.adapter=i},this.property=function(e,t,r){var o=r||{};if(!o.isSystem&&_systemProperties[e])throw new Error('You cannot define the property "'+e+"\" on a model, as it's a reserved system-property name.");i[this.name].properties[e]=new model.PropertyDescription(e,t,o)},this.defineProperties=function(e){var t,i,r;for(var o in e)"string"==typeof(r=e[o])?(t=r,i={}):(t=r.type,i=r),this.property(o,t,i)},this.validates=function(){for(var e,t,r=Array.prototype.slice.call(arguments),o=r.shift(),n=r.shift(),a={};e=r.pop();)e instanceof RegExp||"function"==typeof e||"string"==typeof e?t=e:a=utils.mixin(a,e);if(isNaN(a)||(a={is:a}),a.on=a.on||["create","update"],void 0===i[this.name].properties[n])throw new Error('Validation cannot be added for "'+n+'": property does not exist on the '+this.name+" model.");i[this.name].properties[n].validations[o]=new model.ValidationDescription(o,t,a)},model.validators)this["validates"+utils.string.capitalize(o)]=r(o);model.config.useTimestamps&&(this.property("createdAt","datetime",{isSystem:!0}),this.property("updatedAt","datetime",{isSystem:!0})),["hasMany","hasOne","belongsTo"].forEach((function(e){t[e]=function(r,o){var n=o||{},a=i[t.name].associations[e]||{},s=r,l=n.model||r;s=utils.string.getInflection(s,"constructor","singular"),l=utils.string.getInflection(l,"constructor","singular"),a[s]={name:s,model:l,through:n.through,type:e},i[t.name].associations[e]=a;n.through||_foreignKeyCreators.push(function(r){return function(){var o,n,a,s;if("belongsTo"==e?(o=l,n=t.name,a=l):(o=t.name,n=l,a=t.name),a=r==l?utils.string.decapitalize(a)+"Id":utils.string.decapitalize(r)+a+"Id",!i[n])throw new Error("Model "+n+" does not exist.");i[n].properties[a]||(model[o],s=model.config.autoIncrementId?"int":"string",i[n].properties[a]=new model.PropertyDescription(a,s))}}(s))}}))},model.ModelDescription=function(e){this.name=e,this.properties={},this.associations={}},model.PropertyDescription=function(e,t,i){var r=i||{},o={},n=utils.mixin({},r);for(var a in delete n.required,delete n.length,delete n.format,this.name=e,this.datatype=t,this.options=r,r)(r.required||r.length)&&(o.present=new model.ValidationDescription("present",null,n)),r.length&&("object"==typeof r.length?o.length=new model.ValidationDescription("length",null,utils.mixin(r.length,n)):o.length=new model.ValidationDescription("length",null,utils.mixin({is:r.length},n))),r.format&&(o.format=new model.ValidationDescription("length",r.format,n));this.validations=o},model.ValidationDescription=function(e,t,i){this.type=e,this.reference=t,this.opts=i||{}},module.exports=model,Query=require("./query/query").Query,model.datatypes=require("./datatypes"),association=require("./association");
//# sourceMappingURL=/sm/a7dbbdcaff28bee3c2c9aa60e27bc97b02c65d931b0c9517dbaa32fc6e620838.map