Comparing version 0.15.9 to 0.15.10
@@ -1,7 +0,15 @@ | ||
import { IRawModel } from 'datx-utils'; | ||
import { IDictionary, IRawModel } from 'datx-utils'; | ||
import { FieldType } from '../../enums/FieldType'; | ||
import { IIdentifier } from '../../interfaces/IIdentifier'; | ||
import { IReferenceOptions } from '../../interfaces/IReferenceOptions'; | ||
import { IType } from '../../interfaces/IType'; | ||
import { TRefValue } from '../../interfaces/TRefValue'; | ||
import { PureCollection } from '../../PureCollection'; | ||
import { PureModel } from '../../PureModel'; | ||
interface IMetaToInit extends IDictionary { | ||
fields: Array<string>; | ||
id?: IIdentifier; | ||
refs: IDictionary<IReferenceOptions>; | ||
type?: IType; | ||
} | ||
export declare function initModelField<T extends PureModel>(obj: T, key: string, defValue: any, type?: FieldType): void; | ||
@@ -18,2 +26,5 @@ /** | ||
export declare function initModelRef(obj: PureModel, key: string, options: IReferenceOptions, initialVal: TRefValue): void; | ||
export declare function initModelMeta(model: PureModel, data: IRawModel, collection?: PureCollection): IDictionary & IMetaToInit; | ||
export declare function mergeMeta(model: PureModel, meta: IDictionary, metaField?: IDictionary): IMetaToInit; | ||
export declare function initModel(model: PureModel, rawData: IRawModel, collection?: PureCollection): void; | ||
export {}; |
@@ -1,1 +0,1 @@ | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var mobx=require("mobx"),datxUtils=require("datx-utils"),extendStatics=function(e,t){return(extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)};function __extends(e,t){function o(){this.constructor=e}extendStatics(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}var __assign=function(){return(__assign=Object.assign||function(e){for(var t,o=1,r=arguments.length;o<r;o++)for(var n in t=arguments[o])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)};function __decorate(e,t,o,r){var n,i=arguments.length,a=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,o,r);else for(var s=e.length-1;0<=s;s--)(n=e[s])&&(a=(i<3?n(a):3<i?n(t,o,a):n(t,o))||a);return 3<i&&a&&Object.defineProperty(t,o,a),a}!function(e){e[e.CRATE=0]="CRATE",e[e.UPDATE=1]="UPDATE",e[e.REMOVE=2]="REMOVE"}(exports.PatchType||(exports.PatchType={}));var REGEX=/\$\{\s*([a-zA-Z0-9\-\_]+)\s*\}/g;function msg(e,t){for(var o=e,r=REGEX.exec(o);r;)o=o.replace(r[0],t[r[1]]),r=REGEX.exec(o);return o}function error(e,t){return void 0===t&&(t={}),new Error("[datx exception] "+msg(e,t))}var FieldType,UNDEFINED_TYPE="The type needs to be defined if the object is not an instance of the model.",UNDEFINED_MODEL="No model is defined for the type ${type}.",NOT_A_CLONE="The given model is not a clone.",REF_NEEDS_COLLECTION="The model needs to be in a collection to be referenceable",REF_SINGLE="The reference ${key} can't be an array of values.",REF_ARRAY="The reference ${key} must be an array of values.",NO_REFS="You should save this value as a reference.",BACK_REF_READ_ONLY="Back references are read only",ID_READONLY="Model ID can't be updated directly. Use the `updateModelId` helper function instead.",TYPE_READONLY="Model type can't be changed after initialization.",MODEL_SINGLE_COLLECTION="A model can be in a single collection at once",ID_REQUIRED="Model id is required (autoincrement is disabled)",WRONG_REF_TYPE="The new reference type doesn't match to the declared one.",MODEL_REQUIRED="The model type is a required parameter. Do you maybe have a circular dependency?",SORTED_NO_WRITE="New models can't be added directly to a sorted view list",UNIQUE_MODEL="The models in this view need to be unique",VIEW_NAME_TAKEN="The name is already taken",DECORATE_MODEL="This mixin can only decorate models";function reducePrototypeChain(e,t,o){for(var r=o,n=e;n;)r=t(r,n),n=Object.getPrototypeOf(n);return r}!function(e){e[e.ID=0]="ID",e[e.TYPE=1]="TYPE",e[e.DATA=2]="DATA"}(FieldType||(FieldType={})),function(e){e[e.TO_ONE=0]="TO_ONE",e[e.TO_MANY=1]="TO_MANY",e[e.TO_ONE_OR_MANY=2]="TO_ONE_OR_MANY"}(exports.ReferenceType||(exports.ReferenceType={}));var DATX_KEY=Symbol.for("datx metadata");function setMeta(e,t){Object.defineProperty(e,DATX_KEY,{enumerable:!1,value:t,writable:!1})}var DataStorage=function(){function e(){}return e.prototype.initModel=function(e){var t=mobx.observable({data:{},meta:{}});return setMeta(e,t),t},e.prototype.getModelData=function(e){return this.__getModelData(e).data},e.prototype.getModelDataKey=function(e,t){return this.__getModelData(e).data[t]},e.prototype.setModelData=function(e,t){var o=this.__getModelData(e);mobx.set(o.data,t)},e.prototype.setModelDataKey=function(e,t,o){var r;this.setModelData(e,((r={})[t]=o,r))},e.prototype.getModelMeta=function(e){var t=e[DATX_KEY];return t?t.meta:this.setModelMeta(e,{})},e.prototype.getModelMetaKey=function(e,t){return this.getModelMeta(e)[t]},e.prototype.setModelMeta=function(e,t){var o=this.__getModelData(e);return mobx.set(o.meta,t),o.meta},e.prototype.setModelMetaKey=function(e,t,o){var r;this.setModelMeta(e,((r={})[t]=o,r))},e.prototype.setModelClassMetaKey=function(e,t,o){var r,n=e[DATX_KEY];n||setMeta(e,n={data:{},meta:{},references:{}}),Object.assign(n.meta,((r={})[t]=o,r))},e.prototype.getModelClassMetaKey=function(e,o){return reducePrototypeChain(e,function(e,t){return e||(t[DATX_KEY]||{meta:{}}).meta[o]||null},null)},e.prototype.addModelDefaultField=function(e,t,o){var r,n,i=e[DATX_KEY];i?Object.assign(i.data,((r={})[t]=o,r)):setMeta(e,{data:(n={},n[t]=o,n),meta:{},references:{}})},e.prototype.getModelDefaults=function(e){var t=reducePrototypeChain(e,function(e,t){return e.concat((t[DATX_KEY]||{data:[]}).data)},[]);return Object.assign.apply(Object,[{}].concat(t.reverse()))},e.prototype.addModelClassReference=function(e,t,o){var r,n;if(!o.model&&0!==o.model)throw error(MODEL_REQUIRED);var i=e[DATX_KEY];i?Object.assign(i.references,((r={})[t]=o,r)):setMeta(e,{data:{},meta:{},references:(n={},n[t]=o,n)})},e.prototype.getModelClassReferences=function(e){var t=reducePrototypeChain(e,function(e,t){return e.concat((t[DATX_KEY]||{references:{}}).references)},[]);return Object.assign.apply(Object,[{}].concat(t.reverse()))},e.prototype.getModelReferenceOptions=function(e,t){return this.getModelMetaKey(e,"refs")[t]},e.prototype.__getModelData=function(e){return e[DATX_KEY]||this.initModel(e)},e}(),storage=new DataStorage;function getModelType(e){return"function"==typeof e?e.type:"object"==typeof e?getModelMetaKey(e,"type")||e.constructor.type:e}function getModelId(e){return e instanceof PureModel?getModelMetaKey(e,"id"):e}function getModelCollection(e){return getModelMetaKey(e,"collection")}function cloneModel(e){var t=e.constructor,o=modelToJSON(e),r=o[datxUtils.META_FIELD]||{};r.originalId=r.id,delete r.id;var n=new t(o),i=getModelCollection(e);return i?i.add(n):datxUtils.warn("The model is not in the collection. Referencing the original model won't be possible"),n}function getOriginalModel(e){var t=getModelCollection(e),o=getModelMetaKey(e,"originalId");if(o){if(!t)throw error(REF_NEEDS_COLLECTION);return t.find(e,o)}throw error(NOT_A_CLONE)}var READ_ONLY_META=["fields","id","refs","type"];function updateModel(o,r){var e=storage.getModelClassMetaKey(o.constructor,"id")||"id",n=storage.getModelClassMetaKey(o.constructor,"type")||"type",t=Object.keys(r instanceof PureModel?modelToJSON(r):r);return startAction(o),t.forEach(function(t){if(t!==datxUtils.META_FIELD&&t!==e&&t!==n)assignModel(o,t,r[t]);else if(t===datxUtils.META_FIELD){Object.keys(r[t]||{}).forEach(function(e){READ_ONLY_META.includes(e)||setModelMetaKey(o,e,r[t][e])})}}),endAction(o),o}function assignModel(e,t,o){if(!(e instanceof PureModel))throw error("The given parameter is not a valid model");var r=getModelMetaKey(e,"refs");if(!r)throw error("The given models is not initialized correctly");if(startAction(e),t in r)assignModelRef(e,t,o);else{if(o instanceof PureModel)throw endAction(e),error(NO_REFS,{key:t});assignModelField(e,t,o)}endAction(e)}function assignModelField(e,t,o){-1!==getModelMetaKey(e,"fields").indexOf(t)?e[t]=o:initModelField(e,t,o)}function assignModelRef(e,t,o){e[t]=o}function getMetaKeyFromRaw(e,t,o){if(datxUtils.META_FIELD in e&&"object"==typeof e[datxUtils.META_FIELD]&&void 0!==e[datxUtils.META_FIELD])return(e[datxUtils.META_FIELD]||{})[t];if(o){var r=storage.getModelClassMetaKey(o,t);return r&&e[r]}return e&&e[t]}function modelToJSON(e){var t,o=mobx.toJS(storage.getModelData(e)),r=Object.assign({},storage.getModelMeta(e));delete r.collection,delete r.patch;var n=mobx.toJS(r),i={};Object.keys(n.refs||{}).forEach(function(e){i[e]={model:getModelType(n.refs[e].model),type:n.refs[e].type}}),n.refs=i,delete n.collection;var a=Object.assign(o,((t={})[datxUtils.META_FIELD]=n,t)),s=e.constructor,d=storage.getModelClassMetaKey(s,"id"),l=storage.getModelClassMetaKey(s,"type");return n&&d&&(a[d]=n.id),n&&l&&(a[l]=n.type),a}function getModelMetaKey(e,t){return storage.getModelMetaKey(e,t)}function setModelMetaKey(e,t,o){storage.setModelMetaKey(e,t,o)}function getModelClassRefs(e){return storage.getModelClassReferences(e)}function isEmptyObject(e){return 0===Object.keys(e).length}function reverseAction(e){switch(e){case exports.PatchType.CRATE:return exports.PatchType.REMOVE;case exports.PatchType.REMOVE:return exports.PatchType.CRATE;default:return exports.PatchType.UPDATE}}function triggerAction(e,t){var o=__assign({},e,{model:{id:getModelId(t),type:getModelType(t)}}),r=[];"__patchListeners"in t&&r.push.apply(r,t.__patchListeners||[]);var n=getModelCollection(t);n&&"__patchListeners"in n&&r.push.apply(r,n.__patchListeners||[]),r.forEach(function(e){e(o)})}function startAction(e){var t=storage.getModelMetaKey(e,"patch")||{count:0,oldValue:{},newValue:{}};t.count++,storage.setModelMetaKey(e,"patch",t)}function updateAction(e,t,o){var r=storage.getModelMetaKey(e,"patch")||{count:0,oldValue:{},newValue:{}};e[t]!==o&&(t in r.oldValue||(r.oldValue[t]=e[t]),r.newValue[t]=o,storage.setModelMetaKey(e,"patch",r))}function endAction(e,t){void 0===t&&(t=exports.PatchType.UPDATE);var o=storage.getModelMetaKey(e,"patch")||{count:0,oldValue:{},newValue:{}};if(o.count--,0===o.count){var r=mobx.toJS(o.newValue),n=mobx.toJS(o.oldValue);isEmptyObject(r)&&isEmptyObject(n)||triggerAction({newValue:r,oldValue:n,patchType:t},e),storage.setModelMetaKey(e,"patch",{count:0,oldValue:{},newValue:{}})}else storage.setModelMetaKey(e,"patch",o)}function modelAddReference(e,t,o){var r=storage.getModelReferenceOptions(e,t),n=getModelId(o),i=storage.getModelDataKey(e,t);r.type===exports.ReferenceType.TO_ONE?storage.setModelDataKey(e,t,n):r.type===exports.ReferenceType.TO_MANY||mobx.isObservableArray(i)?i.push(n):storage.setModelDataKey(e,t,o)}function modelRemoveReference(e,t,o){var r=storage.getModelReferenceOptions(e,t),n=getModelId(o),i=storage.getModelDataKey(e,t);r.type===exports.ReferenceType.TO_ONE?storage.setModelDataKey(e,t,null):r.type===exports.ReferenceType.TO_MANY||mobx.isObservableArray(i)?i.remove(n):storage.setModelDataKey(e,t,null)}function ensureModel(o,r){return function(e){var t=e;if(!(e instanceof PureModel)&&"object"==typeof e){if(!r)throw error(REF_NEEDS_COLLECTION);t=r.add(e,o.model)}return getModelId(t)}}function partialRefUpdate(e,t,o){var r=storage.getModelReferenceOptions(e,t),n=storage.getModelDataKey(e,t),i=getModelCollection(e);if("splice"!==o.type)return n[o.index]=ensureModel(r,i)(o.newValue),null;var a=o.added.map(ensureModel(r,i));return n.splice.apply(n,[o.index,o.removedCount].concat(a)),null}function backRefSplice(t,e,o,r){var n=r.property;return o.added.forEach(function(e){modelAddReference(e,n,t)}),t[e].slice(o.index,o.index+o.removedCount).forEach(function(e){modelRemoveReference(e,n,t)}),null}function backRefChange(e,t,o,r){var n=r.property,i=e[t].length>o.index?e[t][o.index]:null;return o.newValue&&modelAddReference(o.newValue,n,e),i&&modelRemoveReference(i,n,e),datxUtils.warn("This shouldn't have happened. Please open an issue: https://github.com/infinum/datx/issues/new"),null}function partialBackRefUpdate(e,t,o){var r=storage.getModelReferenceOptions(e,t);return"splice"===o.type?backRefSplice(e,t,o,r):backRefChange(e,t,o,r)}function getField(e,t){return storage.getModelDataKey(e,t)}function updateField(e,t,o,r){if(r===FieldType.TYPE)throw error(TYPE_READONLY);if(r===FieldType.ID)throw error(ID_READONLY);startAction(e),t in getModelMetaKey(e,"refs")?updateRef(e,t,o):(updateAction(e,t,o),storage.setModelDataKey(e,t,o)),endAction(e)}function hasBackRef(e,t,o){return null!==e[t]&&void 0!==e[t]&&(e[t]instanceof PureModel?e[t]===o:-1!==e[t].indexOf(o))}function getBackRef(t,o,r){var e=getModelType(r.model),n=getModelCollection(t);if(!n)return null;var i=n.findAll(e).filter(function(e){return hasBackRef(e,r.property,t)}),a=mobx.observable.array(i,{deep:!1});return mobx.intercept(a,function(e){return partialBackRefUpdate(t,o,e)}),a}function getNormalRef(t,o,r){var e=storage.getModelDataKey(t,o),n=getModelCollection(t);if(!n)return null;var i=datxUtils.mapItems(e,function(e){return e?n.find(r.model,e):e});if(r.type!==exports.ReferenceType.TO_MANY||i instanceof Array||(i=[i]),i instanceof Array){var a=mobx.observable.array(i,{deep:!1});return mobx.intercept(a,function(e){return partialRefUpdate(t,o,e)}),a}return i}function getRef(e,t){var o=storage.getModelReferenceOptions(e,t);return"string"==typeof o.property?getBackRef(e,t,o):getNormalRef(e,t,o)}function validateRef(e,t,o){if(e.type===exports.ReferenceType.TO_ONE&&t)throw error(REF_SINGLE,{key:o});if(e.type===exports.ReferenceType.TO_MANY&&!t)throw error(REF_ARRAY,{key:o});if(e.property)throw error(BACK_REF_READ_ONLY)}function updateRef(o,e,t){var r=storage.getModelReferenceOptions(o,e),n=r.type===exports.ReferenceType.TO_MANY?t||[]:t,i=n instanceof Array||mobx.isObservableArray(n);validateRef(r,i,e);var a=getModelCollection(o);startAction(o);var s=datxUtils.mapItems(t,function(e){if(e&&a){if(e instanceof PureModel)if(getModelType(e)!==getModelType(r.model))throw endAction(o),error(WRONG_REF_TYPE);var t=a.find(r.model,e);return t||"object"!=typeof e||(t=a.add(e,r.model)),endAction(o),getModelId(t||e)}if(e instanceof PureModel)throw endAction(o),error(REF_NEEDS_COLLECTION);return e});r.type===exports.ReferenceType.TO_MANY&&(s=s||[]),updateAction(o,e,s),storage.setModelDataKey(o,e,s),endAction(o)}function getModelRefsByType(e,t){var o=getModelMetaKey(e,"refs");return Object.keys(o).filter(function(e){return!o[e].property}).filter(function(e){return getModelType(o[e].model)===t})}function updateModelReferences(e,n,i,t){var o=getModelCollection(e);o&&o.getAllModels().map(function(r){getModelRefsByType(r,t).forEach(function(e){var t=storage.getModelDataKey(r,e);if(t instanceof Array||mobx.isObservableArray(t)){var o=t.indexOf(i);-1!==o&&(t[o]=n)}else t===i&&storage.setModelDataKey(r,e,n)})})}function updateModelId(e,t){var o=getModelCollection(e),r=getModelId(e),n=getModelType(e);setModelMetaKey(e,"id",t);var i=e.constructor,a=storage.getModelClassMetaKey(i,"id");a&&setRefId(e,a,t),o&&o.__changeModelId(r,t,n),updateModelReferences(e,t,r,n)}function getRefId(e,t){return storage.getModelDataKey(e,t)}function setRefId(e,t,o){storage.setModelDataKey(e,t,o)}function initModelField(t,o,e,r){void 0===r&&(r=FieldType.DATA);var n=getModelMetaKey(t,"fields");r===FieldType.ID&&o in t&&storage.setModelDataKey(t,o,void 0),storage.setModelDataKey(t,o,e),updateAction(t,o,e),-1===n.indexOf(o)&&n.push(o),datxUtils.assignComputed(t,o,function(){return getField(t,o)},function(e){updateField(t,o,e,r)})}function initModelRef(t,o,e,r){var n=(getModelMetaKey(t,"refs")[o]=e).type===exports.ReferenceType.TO_MANY;storage.setModelDataKey(t,o,n?[]:void 0),updateAction(t,o,n?[]:void 0),datxUtils.assignComputed(t,o,function(){return getRef(t,o)},function(e){updateRef(t,o,e)}),e.property||void 0===r||(t[o]=r)}function prepareFields(e,t,o){var r=o.constructor,n=t.fields?t.fields.slice():[],i=storage.getModelClassReferences(r),a=Object.assign({},i,t.refs),s=storage.getModelDefaults(r);return Object.keys(e).concat(Object.keys(s)).forEach(function(e){e in a||-1!==n.indexOf(e)||n.push(e)}),{defaults:s,fields:n,refs:a}}function initModelData(n,i,r,a){var e=prepareFields(i,r,n),s=e.defaults,t=e.fields,d=e.refs,o=n.constructor,l=storage.getModelClassMetaKey(o,"id"),c=storage.getModelClassMetaKey(o,"type");t.forEach(function(e){var t=FieldType.DATA,o=i[e];void 0===o&&(o=s[e]),e===(l||"id")?(t=FieldType.ID,o=r.id):e===c&&(t=FieldType.TYPE,o=r.type),initModelField(n,e,o,t)}),!l||l in t||initModelField(n,l,r.id,FieldType.ID),Object.keys(d).forEach(function(e){var t=d[e],o=i[e]||s[e]||void 0,r=a?a.add(o,getModelType(t.model)):o;initModelRef(n,e,t,r)})}function initModelMeta(e,t,o){var r=e.constructor,n=storage.getModelClassMetaKey(r,"id")||"id",i=storage.getModelClassMetaKey(r,"type"),a=i&&t[i]||getModelType(e),s=n&&t[n];if(!s){if(!r.enableAutoId)throw new Error(ID_REQUIRED);for(s=r.getAutoId();o&&o.find(a,s);)s=r.getAutoId()}var d,l={fields:[],id:s,refs:{},type:a},c={fields:[],refs:{}};if(datxUtils.META_FIELD in t&&t[datxUtils.META_FIELD]){var p=t[datxUtils.META_FIELD]||{};c.fields=p.fields,delete p.fields,c.refs=p.refs,delete p.refs,"type"in p&&(l.type=p.type),d=storage.setModelMeta(e,Object.assign(l,p)),delete t[datxUtils.META_FIELD]}else d=storage.setModelMeta(e,l);return Object.assign({},d,c)}function initModel(e,t,o){var r=e.constructor,n=Object.assign({},r.preprocess(t,o));setModelMetaKey(e,"collection",o),initModelData(e,n,initModelMeta(e,n,o),o)}var PureModel=function(){function e(e,t){void 0===e&&(e={});var o=this.constructor;o.__datxInitProps&&o.__datxInitProps(),startAction(this),mobx.extendObservable(this,{}),initModel(this,e,t),endAction(this,exports.PatchType.CRATE)}return e.preprocess=function(e,t){return e},e.getAutoId=function(){return"number"==typeof this.autoIdValue?--this.autoIdValue:this.autoIdValue},e.toJSON=function(){return this.type},e.type=datxUtils.DEFAULT_TYPE,e.autoIdValue=0,e.enableAutoId=!0,e}();function initCollectionModel(e,t){return upsertModel(t,getMetaKeyFromRaw(t,"type"),e)}function upsertModel(e,t,o){var r;if(!t&&0!==t)throw error(UNDEFINED_TYPE);var n=o.constructor,i=n.types.find(function(e){return e.type===t});if(!i){var a=n.defaultModel;if(a)return new a(__assign({},e,((r={})[datxUtils.META_FIELD]=__assign({},e[datxUtils.META_FIELD]||{},{type:t}),r)),o);throw error(UNDEFINED_MODEL,{type:t})}var s=getMetaKeyFromRaw(e,"id",i),d=s&&o.find(t,s);return d?updateModel(d,e):new i(e,o)}function isSelectorFunction(e){return"function"==typeof e&&e!==PureModel&&!(e.prototype instanceof PureModel)}function initModels(t,e){return e.map(function(e){return initCollectionModel(t,e)})}var View=function(){function e(e,t,o,r,n){void 0===r&&(r=[]),void 0===n&&(n=!1),this.__collection=t,this.unique=n,this.__models=mobx.observable.array([]),this.__models.replace(r.map(getModelId)),this.sortMethod=o,this.modelType=getModelType(e),this.__collection.__viewList.push(this)}return Object.defineProperty(e.prototype,"length",{get:function(){return this.__models.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"list",{get:function(){var t=this,e=this.__models.map(function(e){return t.__collection.find(t.modelType,e)}).filter(Boolean);if(this.sortMethod){var o="string"==typeof this.sortMethod?function(e){return e[t.sortMethod]}:this.sortMethod;e.sort(function(e,t){return o(e)-o(t)})}var r=mobx.observable.array(e,{deep:!1});return mobx.intercept(r,this.__partialListUpdate.bind(this)),r},enumerable:!0,configurable:!0}),e.prototype.toJSON=function(){return{modelType:this.modelType,models:this.__models.slice(),unique:this.unique}},Object.defineProperty(e.prototype,"snapshot",{get:function(){return this.toJSON()},enumerable:!0,configurable:!0}),e.prototype.add=function(e){var o=this,t=datxUtils.mapItems(e,function(e){return o.__collection.add(e,o.modelType)});return datxUtils.mapItems(t,function(e){var t=getModelId(e);o.unique&&-1!==o.__models.indexOf(t)||o.__models.push(t)}),t},e.prototype.hasItem=function(e){var t=getModelId(e);return-1!==this.__models.indexOf(t)},e.prototype.remove=function(e){var t=getModelId(e);this.__models.remove(t)},e.prototype.removeAll=function(){this.__models.replace([])},e.prototype.__partialListUpdate=function(e){var t,o=this;if("splice"===e.type){if(this.sortMethod&&0<e.added.length)throw error(SORTED_NO_WRITE);var r=e.added.map(getModelId),n=this.__models.slice(e.index,e.removedCount);return this.unique&&r.forEach(function(e){if(-1!==o.__models.indexOf(e)&&-1===n.indexOf(e))throw error(UNIQUE_MODEL)}),(t=this.__models).splice.apply(t,[e.index,e.removedCount].concat(r)),null}if(this.sortMethod&&e.newValue)throw error(SORTED_NO_WRITE);var i=getModelId(e.newValue),a=this.__models.indexOf(i);if(this.unique&&-1!==a&&a!==e.index)throw error(UNIQUE_MODEL);return this.__models[e.index]=i,null},e.prototype.__changeModelId=function(e,t){var o=this.__models.indexOf(e);-1!==o&&(this.__models[o]=t)},__decorate([mobx.observable],e.prototype,"sortMethod",void 0),__decorate([mobx.computed],e.prototype,"length",null),__decorate([mobx.computed],e.prototype,"list",null),__decorate([mobx.computed],e.prototype,"snapshot",null),__decorate([mobx.action],e.prototype,"add",null),__decorate([mobx.action],e.prototype,"remove",null),__decorate([mobx.action],e.prototype,"removeAll",null),e}(),PureCollection=function(){function e(e){void 0===e&&(e=[]);var r=this;this.__data=mobx.observable.array([],{deep:!1}),this.__views=[],this.__viewList=[],this.__dataMap={},this.__dataList={},mobx.extendObservable(this,{}),e instanceof Array?this.insert(e):e&&"models"in e&&this.insert(e.models);var n=this.constructor,i=e&&"views"in e?e.views:{};Object.keys(n.views).forEach(function(e){var t=n.views[e],o=i[e]||t;r.addView(e,o.modelType,{mixins:t.mixins,models:o.models||[],sortMethod:t.sortMethod,unique:o.unique})})}return e.prototype.insert=function(e){var t=initModels(this,e);return this.__insertModel(t),t},e.prototype.add=function(e,t){return e instanceof Array?this.__addArray(e,t):this.__addSingle(e,t)},e.prototype.find=function(e,t){return t instanceof PureModel?t:isSelectorFunction(e)?this.__data.find(e)||null:this.__findByType(e,t)||null},e.prototype.filter=function(e){return this.__data.filter(e)},e.prototype.findAll=function(e){var t;if(e){var o=getModelType(e);return o in this.__dataList||mobx.set(this.__dataList,((t={})[o]=mobx.observable.array([]),t)),this.__dataList[o]}return this.__data},e.prototype.hasItem=function(e){var t=getModelId(e);return Boolean(this.find(e,t))},e.prototype.remove=function(e,t){var o="object"==typeof e?e:this.find(e,t);o&&this.__removeModel(o)},e.prototype.removeAll=function(e){this.__removeModel(this.findAll(e).slice())},Object.defineProperty(e.prototype,"length",{get:function(){return this.__data.length},enumerable:!0,configurable:!0}),e.prototype.toJSON=function(){var t=this,o={};return this.__views.forEach(function(e){o[e]=t[e].toJSON()}),{models:this.__data.map(modelToJSON),views:o}},Object.defineProperty(e.prototype,"snapshot",{get:function(){return this.toJSON()},enumerable:!0,configurable:!0}),e.prototype.reset=function(){this.__data.forEach(function(e){setModelMetaKey(e,"collection",void 0),triggerAction({oldValue:modelToJSON(e),patchType:exports.PatchType.REMOVE},e)}),this.__data.replace([]),this.__dataList=mobx.observable({},{},{deep:!1}),this.__dataMap=mobx.observable({},{},{deep:!1})},e.prototype.getAllModels=function(){return this.__data.slice()},e.prototype.addView=function(e,t,o){var r=void 0===o?{}:o,n=r.sortMethod,i=r.models,a=void 0===i?[]:i,s=r.unique,d=r.mixins;if(e in this)throw error(VIEW_NAME_TAKEN);var l=d?d.reduce(function(e,t){return t(e)},View):View;return this.__views.push(e),this[e]=new l(t,this,n,a,s),this[e]},e.prototype.__addArray=function(e,t){var o=this;return e.filter(Boolean).map(function(e){return o.__addSingle(e,t)})},e.prototype.__addSingle=function(e,t){if(!e||"number"==typeof e||"string"==typeof e)return e;if(e instanceof PureModel)return this.hasItem(e)||this.__insertModel(e),e;if(!t&&0!==t)throw error(UNDEFINED_TYPE);var o=getModelType(t),r=upsertModel(e,o,this);return this.__insertModel(r,o),r},e.prototype.__insertModel=function(e,t,o){var r,n=this;if(e instanceof Array)e.forEach(function(e){n.__insertModel(e,t,o)});else{var i=getModelCollection(e);if(i&&i!==this)throw error(MODEL_SINGLE_COLLECTION);var a=t||getModelType(e),s=o||getModelId(e),d=a.toString(),l=this.find(a,s);l?updateModel(l,e):(this.__data.push(e),a in this.__dataList?this.__dataList[a].push(e):mobx.set(this.__dataList,d,mobx.observable.array([e],{deep:!1})),a in this.__dataMap?mobx.set(this.__dataMap[a],s.toString(),e):mobx.set(this.__dataMap,d,mobx.observable.object(((r={})[s]=e,r),{},{deep:!1})),setModelMetaKey(e,"collection",this),triggerAction({newValue:modelToJSON(e),patchType:exports.PatchType.CRATE},e))}},e.prototype.__removeModel=function(e,t,o){var r=this;if(e instanceof Array)e.forEach(function(e){r.__removeModel(e,t,o)});else{var n=t||getModelType(e),i=o||getModelId(e);triggerAction({oldValue:mobx.toJS(modelToJSON(e)),patchType:exports.PatchType.REMOVE},e),this.__data.remove(e),this.__dataList[n].remove(e),mobx.set(this.__dataMap[n],i.toString(),void 0),this.__data.forEach(function(o){var r=getModelMetaKey(o,"refs");Object.keys(r||{}).forEach(function(e){if(getModelType(r[e].model)===n){var t=getRefId(o,e);t instanceof Array?t.includes(i)&&setRefId(o,e,t.filter(function(e){return e!==i})):t===i&&setRefId(o,e,void 0)}})}),setModelMetaKey(e,"collection",void 0)}},e.prototype.__findByType=function(e,t){var o,r=getModelType(e),n=r.toString();return t?(r in this.__dataMap?t in this.__dataMap[r]||mobx.set(this.__dataMap[r],t.toString(),void 0):mobx.set(this.__dataMap,n,mobx.observable.object(((o={})[t]=void 0,o),{},{deep:!1})),this.__dataMap[r][t]):(r in this.__dataList||mobx.set(this.__dataList,n,mobx.observable.array([],{deep:!1})),this.__dataList[r].length?this.__dataList[r][0]:null)},e.prototype.__changeModelId=function(t,o,r){this.__dataMap[r][o]=this.__dataMap[r][t],delete this.__dataMap[r][t],this.__viewList.filter(function(e){return e.modelType===r}).forEach(function(e){e.__changeModelId(t,o)})},e.types=[],e.views={},e.defaultModel=PureModel,__decorate([mobx.observable.shallow],e.prototype,"__dataMap",void 0),__decorate([mobx.observable.shallow],e.prototype,"__dataList",void 0),__decorate([mobx.action],e.prototype,"insert",null),__decorate([mobx.action],e.prototype,"add",null),__decorate([mobx.action],e.prototype,"remove",null),__decorate([mobx.action],e.prototype,"removeAll",null),__decorate([mobx.computed],e.prototype,"length",null),__decorate([mobx.action],e.prototype,"reset",null),e}();function isOfType(e,t){for(var o=e;o;){if(o===t)return!0;o=Object.getPrototypeOf(o)}return!1}function isModel(e){return isOfType(e,PureModel)}function isCollection(e){return isOfType(e,PureCollection)}function isView(e){return isOfType(e,View)}function inversePatch(e){var t=reverseAction(e.patchType);return{model:e.model,newValue:e.oldValue,oldValue:e.newValue,patchType:t}}function withPatches(e){if(isCollection(e))return function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.__patchListeners=[],e}return __extends(e,t),e.prototype.applyPatch=function(e){var t=this.find(e.model.type,e.model.id);if(e.patchType===exports.PatchType.REMOVE)t&&this.remove(t);else if(e.patchType===exports.PatchType.UPDATE){if(!t||!e.newValue)throw error(t?"New patch value isn't set for an update patch":"The model should already exist for an update patch");updateModel(t,e.newValue)}else{if(t)throw error("The model shouldn't exist before a create patch");if(!e.newValue)throw error("New patch value isn't set for a create patch");this.add(e.newValue,e.model.type)}},e.prototype.undoPatch=function(e){this.applyPatch(inversePatch(e))},e.prototype.onPatch=function(t){var e=this;return this.__patchListeners.push(t),function(){e.__patchListeners=e.__patchListeners.filter(function(e){return e!==t})}},e}(e);if(isModel(e))return function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.__patchListeners=[],e}return __extends(e,t),e.prototype.applyPatch=function(e){e.model.type===getModelType(this)&&e.model.id===getModelId(this)&&updateModel(this,e.newValue||{})},e.prototype.undoPatch=function(e){this.applyPatch(inversePatch(e))},e.prototype.onPatch=function(t){var e=this;return this.__patchListeners.push(t),function(){e.__patchListeners=e.__patchListeners.filter(function(e){return e!==t})}},e}(e);throw error("Only Models and Collections can be decorated with patches")}function withActions(e){var t=e;if(!isModel(e))throw error(DECORATE_MODEL);return function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t.prototype.update=function(e){updateModel(this,e)},t.prototype.clone=function(){return cloneModel(this)},t.prototype.assign=function(e,t){assignModel(this,e,t)},t.prototype.addReference=function(e,t,o){initModelRef(this,e,o,t)},t.prototype.toJSON=function(){return modelToJSON(this)},t}(t)}function withMeta(e){var t=e;if(!isModel(t))throw error(DECORATE_MODEL);var o=function(){function e(e){this.__instance=e}return Object.defineProperty(e.prototype,"collection",{get:function(){return getModelCollection(this.__instance)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"id",{get:function(){return getModelId(this.__instance)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"original",{get:function(){return getModelMetaKey(this.__instance,"originalId")?getOriginalModel(this.__instance):void 0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"refs",{get:function(){var t=this,e=getModelMetaKey(this.__instance,"refs")||{},o={};return Object.keys(e).forEach(function(e){o[e]=getRefId(t.__instance,e)}),o},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"snapshot",{get:function(){return modelToJSON(this.__instance)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"type",{get:function(){return getModelType(this.__instance)},enumerable:!0,configurable:!0}),__decorate([mobx.computed],e.prototype,"collection",null),__decorate([mobx.computed],e.prototype,"id",null),__decorate([mobx.computed],e.prototype,"original",null),__decorate([mobx.computed],e.prototype,"refs",null),__decorate([mobx.computed],e.prototype,"snapshot",null),__decorate([mobx.computed],e.prototype,"type",null),e}();return function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.meta=new o(e),e}return __extends(e,t),e}(t)}var Model=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t.prototype.valueOf=function(){var e=this.meta.snapshot;return delete e[datxUtils.META_FIELD],__assign({},e,{meta:{id:this.meta.id,type:this.meta.type}})},t.prototype.toString=function(){return JSON.stringify(this.valueOf(),null,2)},t}(withPatches(withActions(withMeta(PureModel)))),Collection=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t.defaultModel=Model,t}(withPatches(PureCollection)),CompatModel=function(o){function e(e,t){var r=o.call(this,e,t)||this;return datxUtils.deprecated("CompatModel is just a migration tool. Please move to Model or PureModel as soon as possible."),Object.keys(r.static.refs).forEach(function(e){if(!(e in getModelMetaKey(r,"refs"))){var t=r.static.refs[e],o=datxUtils.mapItems(r[e]||r.static.defaults[e],getModelId);datxUtils.assignComputed(r,e),initModelRef(r,e,"object"==typeof t?{model:t.model,property:t.property,type:exports.ReferenceType.TO_ONE_OR_MANY}:{model:t,type:exports.ReferenceType.TO_ONE_OR_MANY},o)}}),Object.keys(r.static.defaults).forEach(function(e){e in r.static.refs||e in r||initModelField(r,e,r.static.defaults[e])}),r}return __extends(e,o),e.__datxInitProps=function(){this.idAttribute&&storage.setModelClassMetaKey(this,"id",this.idAttribute),this.typeAttribute&&storage.setModelClassMetaKey(this,"type",this.typeAttribute)},e.prototype.getRecordId=function(){return datxUtils.deprecated("model.getRecordId is deprecated. Use getModelId() instead."),getModelId(this)},e.prototype.getRecordType=function(){return datxUtils.deprecated("model.getRecordType is deprecated. Use getModelType() instead."),getModelType(this)},e.prototype.assign=function(e,t){datxUtils.deprecated("model.assign is deprecated. Use assignModel() instead.");var o=FieldType.DATA,r=storage.getModelClassMetaKey(this.static,"id"),n=storage.getModelClassMetaKey(this.static,"type");return e===r?o=FieldType.ID:e===n&&(o=FieldType.TYPE),updateField(this,e,t,o),t},e.prototype.assignRef=function(e,t,o){if(datxUtils.deprecated("model.assignRef is deprecated. Use initModelRef() instead."),getModelMetaKey(this,"refs")[e])return this[e]=t;var r=o;if(r||(t instanceof Array||mobx.isObservableArray(t)?r=t.reduce(function(e,t){return e||getModelType(t)},null):t instanceof PureModel&&(r=getModelType(t))),!r)throw new Error("The type property is missing");return initModelRef(this,e,{model:r,type:exports.ReferenceType.TO_ONE_OR_MANY},t),this[e]},e.prototype.update=function(e){var t=this;datxUtils.deprecated("model.update is deprecated. Use updateModel() instead.");var o=Object.assign({},e);return Object.keys(o).forEach(function(e){"function"==typeof t[e]&&delete o[e]}),updateModel(this,o)},Object.defineProperty(e.prototype,"static",{get:function(){return datxUtils.deprecated("model.static is deprecated."),this.constructor},enumerable:!0,configurable:!0}),e.prototype.toJS=function(){return datxUtils.deprecated("model.toJS() is deprecated. Use modelToJSON() instead."),modelToJSON(this)},Object.defineProperty(e.prototype,"snapshot",{get:function(){return datxUtils.deprecated("model.snapshot is deprecated. Use modelToJSON() instead."),modelToJSON(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"__collection",{get:function(){return datxUtils.deprecated("model.__collection is deprecated. Use getModelCollection() instead."),getModelCollection(this)},enumerable:!0,configurable:!0}),e.refs={},e.defaults={},e.idAttribute="id",e.typeAttribute="__type__",e}(PureModel),CompatCollection=function(t){function e(e){var o=t.call(this,e)||this;return datxUtils.deprecated("CompatCollection is just a migration tool. Please move to Collection as soon as possible."),o.static.types.forEach(function(e){var t=getModelType(e);datxUtils.assignComputed(o,t.toString(),function(){return o.findAll(t)})}),o}return __extends(e,t),Object.defineProperty(e.prototype,"static",{get:function(){return datxUtils.deprecated("collection.static is deprecated."),this.constructor},enumerable:!0,configurable:!0}),e.prototype.toJS=function(){return datxUtils.deprecated("collection.toJS() is deprecated. Use collection.toJSON() instead"),this.toJSON()},e.types=[CompatModel],e}(Collection);function getClass(e){return"function"==typeof e?e:e.constructor}function propFn(e,t){storage.addModelDefaultField(getClass(e),t)}var prop=Object.assign(propFn,{defaultValue:function(o){return function(e,t){storage.addModelDefaultField(getClass(e),t,o)}},toOne:function(o){return function(e,t){storage.addModelClassReference(getClass(e),t,{model:o,type:exports.ReferenceType.TO_ONE})}},toMany:function(o,r){return function(e,t){storage.addModelClassReference(getClass(e),t,{model:o,property:r,type:exports.ReferenceType.TO_MANY})}},toOneOrMany:function(o){return function(e,t){storage.addModelClassReference(getClass(e),t,{model:o,type:exports.ReferenceType.TO_ONE_OR_MANY})}},identifier:function(e,t){storage.addModelDefaultField(getClass(e),t),storage.setModelClassMetaKey(getClass(e),"id",t)},type:function(e,t){storage.addModelDefaultField(getClass(e),t),storage.setModelClassMetaKey(getClass(e),"type",t)}});function setupModel(e,t){var o=void 0===t?{fields:{}}:t,r=o.fields,n=o.references,i=o.type,a=o.idAttribute,s=o.typeAttribute,d=e;if(!isModel(d))throw error(DECORATE_MODEL);var l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t}(d);return i&&(l.type=i),a&&prop.identifier(l.prototype,a),s&&prop.type(l.prototype,s),r&&Object.keys(r).forEach(function(e){prop.defaultValue(r[e])(l.prototype,e)}),n&&Object.keys(n).forEach(function(e){var t=n[e],o=t.model,r=t.property;switch(n[e].type){case exports.ReferenceType.TO_ONE:return void prop.toOne(o)(l.prototype,e);case exports.ReferenceType.TO_MANY:return void prop.toMany(o,r)(l.prototype,e);default:return void prop.toOneOrMany(o)(l.prototype,e)}}),l}exports.Collection=Collection,exports.Model=Model,exports.View=View,exports.PureCollection=PureCollection,exports.PureModel=PureModel,exports.CompatCollection=CompatCollection,exports.CompatModel=CompatModel,exports.getRefId=getRefId,exports.setRefId=setRefId,exports.updateModelId=updateModelId,exports.initModelRef=initModelRef,exports.assignModel=assignModel,exports.cloneModel=cloneModel,exports.getModelClassRefs=getModelClassRefs,exports.getModelCollection=getModelCollection,exports.getModelId=getModelId,exports.getModelMetaKey=getModelMetaKey,exports.getModelType=getModelType,exports.getOriginalModel=getOriginalModel,exports.modelToJSON=modelToJSON,exports.setModelMetaKey=setModelMetaKey,exports.updateModel=updateModel,exports.isCollection=isCollection,exports.isModel=isModel,exports.isView=isView,exports.setupModel=setupModel,exports.withActions=withActions,exports.withMeta=withMeta,exports.withPatches=withPatches,exports.prop=prop; | ||
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var mobx=require("mobx"),datxUtils=require("datx-utils"),extendStatics=function(e,t){return(extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var o in t)t.hasOwnProperty(o)&&(e[o]=t[o])})(e,t)};function __extends(e,t){function o(){this.constructor=e}extendStatics(e,t),e.prototype=null===t?Object.create(t):(o.prototype=t.prototype,new o)}var __assign=function(){return(__assign=Object.assign||function(e){for(var t,o=1,r=arguments.length;o<r;o++)for(var n in t=arguments[o])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)};function __decorate(e,t,o,r){var n,i=arguments.length,a=i<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,o):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,o,r);else for(var s=e.length-1;0<=s;s--)(n=e[s])&&(a=(i<3?n(a):3<i?n(t,o,a):n(t,o))||a);return 3<i&&a&&Object.defineProperty(t,o,a),a}!function(e){e[e.CRATE=0]="CRATE",e[e.UPDATE=1]="UPDATE",e[e.REMOVE=2]="REMOVE"}(exports.PatchType||(exports.PatchType={}));var REGEX=/\$\{\s*([a-zA-Z0-9\-\_]+)\s*\}/g;function msg(e,t){for(var o=e,r=REGEX.exec(o);r;)o=o.replace(r[0],t[r[1]]),r=REGEX.exec(o);return o}function error(e,t){return void 0===t&&(t={}),new Error("[datx exception] "+msg(e,t))}var FieldType,UNDEFINED_TYPE="The type needs to be defined if the object is not an instance of the model.",UNDEFINED_MODEL="No model is defined for the type ${type}.",NOT_A_CLONE="The given model is not a clone.",REF_NEEDS_COLLECTION="The model needs to be in a collection to be referenceable",REF_SINGLE="The reference ${key} can't be an array of values.",REF_ARRAY="The reference ${key} must be an array of values.",NO_REFS="You should save this value as a reference.",BACK_REF_READ_ONLY="Back references are read only",ID_READONLY="Model ID can't be updated directly. Use the `updateModelId` helper function instead.",TYPE_READONLY="Model type can't be changed after initialization.",MODEL_SINGLE_COLLECTION="A model can be in a single collection at once",ID_REQUIRED="Model id is required (autoincrement is disabled)",WRONG_REF_TYPE="The new reference type doesn't match to the declared one.",MODEL_REQUIRED="The model type is a required parameter. Do you maybe have a circular dependency?",SORTED_NO_WRITE="New models can't be added directly to a sorted view list",UNIQUE_MODEL="The models in this view need to be unique",VIEW_NAME_TAKEN="The name is already taken",DECORATE_MODEL="This mixin can only decorate models";function reducePrototypeChain(e,t,o){for(var r=o,n=e;n;)r=t(r,n),n=Object.getPrototypeOf(n);return r}!function(e){e[e.ID=0]="ID",e[e.TYPE=1]="TYPE",e[e.DATA=2]="DATA"}(FieldType||(FieldType={})),function(e){e[e.TO_ONE=0]="TO_ONE",e[e.TO_MANY=1]="TO_MANY",e[e.TO_ONE_OR_MANY=2]="TO_ONE_OR_MANY"}(exports.ReferenceType||(exports.ReferenceType={}));var DATX_KEY=Symbol.for("datx metadata");function setMeta(e,t){Object.defineProperty(e,DATX_KEY,{enumerable:!1,value:t,writable:!1})}var DataStorage=function(){function e(){}return e.prototype.initModel=function(e){var t=mobx.observable({data:{},meta:{}});return setMeta(e,t),t},e.prototype.getModelData=function(e){return this.__getModelData(e).data},e.prototype.getModelDataKey=function(e,t){return this.__getModelData(e).data[t]},e.prototype.setModelData=function(e,t){var o=this.__getModelData(e);mobx.set(o.data,t)},e.prototype.setModelDataKey=function(e,t,o){var r;this.setModelData(e,((r={})[t]=o,r))},e.prototype.getModelMeta=function(e){var t=e[DATX_KEY];return t?t.meta:this.setModelMeta(e,{})},e.prototype.getModelMetaKey=function(e,t){return this.getModelMeta(e)[t]},e.prototype.setModelMeta=function(e,t){var o=this.__getModelData(e);return mobx.set(o.meta,t),o.meta},e.prototype.setModelMetaKey=function(e,t,o){var r;this.setModelMeta(e,((r={})[t]=o,r))},e.prototype.setModelClassMetaKey=function(e,t,o){var r,n=e[DATX_KEY];n||setMeta(e,n={data:{},meta:{},references:{}}),Object.assign(n.meta,((r={})[t]=o,r))},e.prototype.getModelClassMetaKey=function(e,o){return reducePrototypeChain(e,function(e,t){return e||(t[DATX_KEY]||{meta:{}}).meta[o]||null},null)},e.prototype.addModelDefaultField=function(e,t,o){var r,n,i=e[DATX_KEY];i?Object.assign(i.data,((r={})[t]=o,r)):setMeta(e,{data:(n={},n[t]=o,n),meta:{},references:{}})},e.prototype.getModelDefaults=function(e){var t=reducePrototypeChain(e,function(e,t){return e.concat((t[DATX_KEY]||{data:[]}).data)},[]);return Object.assign.apply(Object,[{}].concat(t.reverse()))},e.prototype.addModelClassReference=function(e,t,o){var r,n;if(!o.model&&0!==o.model)throw error(MODEL_REQUIRED);var i=e[DATX_KEY];i?Object.assign(i.references,((r={})[t]=o,r)):setMeta(e,{data:{},meta:{},references:(n={},n[t]=o,n)})},e.prototype.getModelClassReferences=function(e){var t=reducePrototypeChain(e,function(e,t){return e.concat((t[DATX_KEY]||{references:{}}).references)},[]);return Object.assign.apply(Object,[{}].concat(t.reverse()))},e.prototype.getModelReferenceOptions=function(e,t){return this.getModelMetaKey(e,"refs")[t]},e.prototype.__getModelData=function(e){return e[DATX_KEY]||this.initModel(e)},e}(),storage=new DataStorage;function getModelType(e){return"function"==typeof e?e.type:"object"==typeof e?getModelMetaKey(e,"type")||e.constructor.type:e}function getModelId(e){return e instanceof PureModel?getModelMetaKey(e,"id"):e}function getModelCollection(e){return getModelMetaKey(e,"collection")}function cloneModel(e){var t=e.constructor,o=modelToJSON(e),r=o[datxUtils.META_FIELD]||{};r.originalId=r.id,delete r.id;var n=new t(o),i=getModelCollection(e);return i?i.add(n):datxUtils.warn("The model is not in the collection. Referencing the original model won't be possible"),n}function getOriginalModel(e){var t=getModelCollection(e),o=getModelMetaKey(e,"originalId");if(o){if(!t)throw error(REF_NEEDS_COLLECTION);return t.find(e,o)}throw error(NOT_A_CLONE)}var READ_ONLY_META=["fields","id","refs","type"];function updateModel(o,r){var e=storage.getModelClassMetaKey(o.constructor,"id")||"id",n=storage.getModelClassMetaKey(o.constructor,"type")||"type",t=Object.keys(r instanceof PureModel?modelToJSON(r):r);return mergeMeta(o,storage.getModelMeta(o),r[datxUtils.META_FIELD]),startAction(o),t.forEach(function(t){if(t!==datxUtils.META_FIELD&&t!==e&&t!==n)assignModel(o,t,r[t]);else if(t===datxUtils.META_FIELD){Object.keys(r[t]||{}).forEach(function(e){READ_ONLY_META.includes(e)||setModelMetaKey(o,e,r[t][e])})}}),endAction(o),o}function assignModel(e,t,o){if(!(e instanceof PureModel))throw error("The given parameter is not a valid model");var r=getModelMetaKey(e,"refs");if(!r)throw error("The given models is not initialized correctly");if(startAction(e),t in r)assignModelRef(e,t,o);else{if(o instanceof PureModel)throw endAction(e),error(NO_REFS,{key:t});assignModelField(e,t,o)}endAction(e)}function assignModelField(e,t,o){-1!==getModelMetaKey(e,"fields").indexOf(t)?e[t]=o:initModelField(e,t,o)}function assignModelRef(e,t,o){e[t]=o}function getMetaKeyFromRaw(e,t,o){if(datxUtils.META_FIELD in e&&"object"==typeof e[datxUtils.META_FIELD]&&void 0!==e[datxUtils.META_FIELD])return(e[datxUtils.META_FIELD]||{})[t];if(o){var r=storage.getModelClassMetaKey(o,t);return r&&e[r]}return e&&e[t]}function modelToJSON(e){var t,o=mobx.toJS(storage.getModelData(e)),r=Object.assign({},storage.getModelMeta(e));delete r.collection,delete r.patch;var n=mobx.toJS(r),i={};Object.keys(n.refs||{}).forEach(function(e){i[e]={model:getModelType(n.refs[e].model),type:n.refs[e].type}}),n.refs=i,delete n.collection;var a=Object.assign(o,((t={})[datxUtils.META_FIELD]=n,t)),s=e.constructor,d=storage.getModelClassMetaKey(s,"id"),l=storage.getModelClassMetaKey(s,"type");return n&&d&&(a[d]=n.id),n&&l&&(a[l]=n.type),a}function getModelMetaKey(e,t){return storage.getModelMetaKey(e,t)}function setModelMetaKey(e,t,o){storage.setModelMetaKey(e,t,o)}function getModelClassRefs(e){return storage.getModelClassReferences(e)}function isEmptyObject(e){return 0===Object.keys(e).length}function reverseAction(e){switch(e){case exports.PatchType.CRATE:return exports.PatchType.REMOVE;case exports.PatchType.REMOVE:return exports.PatchType.CRATE;default:return exports.PatchType.UPDATE}}function triggerAction(e,t){var o=__assign({},e,{model:{id:getModelId(t),type:getModelType(t)}}),r=[];"__patchListeners"in t&&r.push.apply(r,t.__patchListeners||[]);var n=getModelCollection(t);n&&"__patchListeners"in n&&r.push.apply(r,n.__patchListeners||[]),r.forEach(function(e){e(o)})}function startAction(e){var t=storage.getModelMetaKey(e,"patch")||{count:0,oldValue:{},newValue:{}};t.count++,storage.setModelMetaKey(e,"patch",t)}function updateAction(e,t,o){var r=storage.getModelMetaKey(e,"patch")||{count:0,oldValue:{},newValue:{}};e[t]!==o&&(t in r.oldValue||(r.oldValue[t]=e[t]),r.newValue[t]=o,storage.setModelMetaKey(e,"patch",r))}function endAction(e,t){void 0===t&&(t=exports.PatchType.UPDATE);var o=storage.getModelMetaKey(e,"patch")||{count:0,oldValue:{},newValue:{}};if(o.count--,0===o.count){var r=mobx.toJS(o.newValue),n=mobx.toJS(o.oldValue);isEmptyObject(r)&&isEmptyObject(n)||triggerAction({newValue:r,oldValue:n,patchType:t},e),storage.setModelMetaKey(e,"patch",{count:0,oldValue:{},newValue:{}})}else storage.setModelMetaKey(e,"patch",o)}function modelAddReference(e,t,o){var r=storage.getModelReferenceOptions(e,t),n=getModelId(o),i=storage.getModelDataKey(e,t);r.type===exports.ReferenceType.TO_ONE?storage.setModelDataKey(e,t,n):r.type===exports.ReferenceType.TO_MANY||mobx.isObservableArray(i)?i.push(n):storage.setModelDataKey(e,t,o)}function modelRemoveReference(e,t,o){var r=storage.getModelReferenceOptions(e,t),n=getModelId(o),i=storage.getModelDataKey(e,t);r.type===exports.ReferenceType.TO_ONE?storage.setModelDataKey(e,t,null):r.type===exports.ReferenceType.TO_MANY||mobx.isObservableArray(i)?i.remove(n):storage.setModelDataKey(e,t,null)}function ensureModel(o,r){return function(e){var t=e;if(!(e instanceof PureModel)&&"object"==typeof e){if(!r)throw error(REF_NEEDS_COLLECTION);t=r.add(e,o.model)}return getModelId(t)}}function partialRefUpdate(e,t,o){var r=storage.getModelReferenceOptions(e,t),n=storage.getModelDataKey(e,t),i=getModelCollection(e);if("splice"!==o.type)return n[o.index]=ensureModel(r,i)(o.newValue),null;var a=o.added.map(ensureModel(r,i));return n.splice.apply(n,[o.index,o.removedCount].concat(a)),null}function backRefSplice(t,e,o,r){var n=r.property;return o.added.forEach(function(e){modelAddReference(e,n,t)}),t[e].slice(o.index,o.index+o.removedCount).forEach(function(e){modelRemoveReference(e,n,t)}),null}function backRefChange(e,t,o,r){var n=r.property,i=e[t].length>o.index?e[t][o.index]:null;return o.newValue&&modelAddReference(o.newValue,n,e),i&&modelRemoveReference(i,n,e),datxUtils.warn("This shouldn't have happened. Please open an issue: https://github.com/infinum/datx/issues/new"),null}function partialBackRefUpdate(e,t,o){var r=storage.getModelReferenceOptions(e,t);return"splice"===o.type?backRefSplice(e,t,o,r):backRefChange(e,t,o,r)}function getField(e,t){return storage.getModelDataKey(e,t)}function updateField(e,t,o,r){if(r===FieldType.TYPE)throw error(TYPE_READONLY);if(r===FieldType.ID)throw error(ID_READONLY);startAction(e),t in getModelMetaKey(e,"refs")?updateRef(e,t,o):(updateAction(e,t,o),storage.setModelDataKey(e,t,o)),endAction(e)}function hasBackRef(e,t,o){return null!==e[t]&&void 0!==e[t]&&(e[t]instanceof PureModel?e[t]===o:-1!==e[t].indexOf(o))}function getBackRef(t,o,r){var e=getModelType(r.model),n=getModelCollection(t);if(!n)return null;var i=n.findAll(e).filter(function(e){return hasBackRef(e,r.property,t)}),a=mobx.observable.array(i,{deep:!1});return mobx.intercept(a,function(e){return partialBackRefUpdate(t,o,e)}),a}function getNormalRef(t,o,r){var e=storage.getModelDataKey(t,o),n=getModelCollection(t);if(!n)return null;var i=datxUtils.mapItems(e,function(e){return e?n.find(r.model,e):e});if(r.type!==exports.ReferenceType.TO_MANY||i instanceof Array||(i=[i]),i instanceof Array){var a=mobx.observable.array(i,{deep:!1});return mobx.intercept(a,function(e){return partialRefUpdate(t,o,e)}),a}return i}function getRef(e,t){var o=storage.getModelReferenceOptions(e,t);return"string"==typeof o.property?getBackRef(e,t,o):getNormalRef(e,t,o)}function validateRef(e,t,o){if(e.type===exports.ReferenceType.TO_ONE&&t)throw error(REF_SINGLE,{key:o});if(e.type===exports.ReferenceType.TO_MANY&&!t)throw error(REF_ARRAY,{key:o});if(e.property)throw error(BACK_REF_READ_ONLY)}function updateRef(o,e,t){var r=storage.getModelReferenceOptions(o,e),n=r.type===exports.ReferenceType.TO_MANY?t||[]:t,i=n instanceof Array||mobx.isObservableArray(n);validateRef(r,i,e);var a=getModelCollection(o);startAction(o);var s=datxUtils.mapItems(t,function(e){if(e&&a){if(e instanceof PureModel)if(getModelType(e)!==getModelType(r.model))throw endAction(o),error(WRONG_REF_TYPE);var t=a.find(r.model,e);return t||"object"!=typeof e||(t=a.add(e,r.model)),endAction(o),getModelId(t||e)}if(e instanceof PureModel)throw endAction(o),error(REF_NEEDS_COLLECTION);return e});r.type===exports.ReferenceType.TO_MANY&&(s=s||[]),updateAction(o,e,s),storage.setModelDataKey(o,e,s),endAction(o)}function getModelRefsByType(e,t){var o=getModelMetaKey(e,"refs");return Object.keys(o).filter(function(e){return!o[e].property}).filter(function(e){return getModelType(o[e].model)===t})}function updateModelReferences(e,n,i,t){var o=getModelCollection(e);o&&o.getAllModels().map(function(r){getModelRefsByType(r,t).forEach(function(e){var t=storage.getModelDataKey(r,e);if(t instanceof Array||mobx.isObservableArray(t)){var o=t.indexOf(i);-1!==o&&(t[o]=n)}else t===i&&storage.setModelDataKey(r,e,n)})})}function updateModelId(e,t){var o=getModelCollection(e),r=getModelId(e),n=getModelType(e);setModelMetaKey(e,"id",t);var i=e.constructor,a=storage.getModelClassMetaKey(i,"id");a&&setRefId(e,a,t),o&&o.__changeModelId(r,t,n),updateModelReferences(e,t,r,n)}function getRefId(e,t){return storage.getModelDataKey(e,t)}function setRefId(e,t,o){storage.setModelDataKey(e,t,o)}function initModelField(t,o,e,r){void 0===r&&(r=FieldType.DATA);var n=getModelMetaKey(t,"fields");r===FieldType.ID&&o in t&&storage.setModelDataKey(t,o,void 0),storage.setModelDataKey(t,o,e),updateAction(t,o,e),-1===n.indexOf(o)&&n.push(o),datxUtils.assignComputed(t,o,function(){return getField(t,o)},function(e){updateField(t,o,e,r)})}function initModelRef(t,o,e,r){var n=(getModelMetaKey(t,"refs")[o]=e).type===exports.ReferenceType.TO_MANY;storage.setModelDataKey(t,o,n?[]:void 0),updateAction(t,o,n?[]:void 0),datxUtils.assignComputed(t,o,function(){return getRef(t,o)},function(e){updateRef(t,o,e)}),e.property||void 0===r||(t[o]=r)}function prepareFields(e,t,o){var r=o.constructor,n=t.fields?t.fields.slice():[],i=storage.getModelClassReferences(r),a=Object.assign({},i,t.refs),s=storage.getModelDefaults(r);return Object.keys(e).concat(Object.keys(s)).forEach(function(e){e in a||-1!==n.indexOf(e)||n.push(e)}),{defaults:s,fields:n,refs:a}}function initModelData(n,i,r,a){var e=prepareFields(i,r,n),s=e.defaults,t=e.fields,d=e.refs,o=n.constructor,l=storage.getModelClassMetaKey(o,"id"),c=storage.getModelClassMetaKey(o,"type");t.forEach(function(e){var t=FieldType.DATA,o=i[e];void 0===o&&(o=s[e]),e===(l||"id")?(t=FieldType.ID,o=r.id):e===c&&(t=FieldType.TYPE,o=r.type),initModelField(n,e,o,t)}),!l||l in t||initModelField(n,l,r.id,FieldType.ID),Object.keys(d).forEach(function(e){var t=d[e],o=i[e]||s[e]||void 0,r=a?a.add(o,getModelType(t.model)):o;initModelRef(n,e,t,r)})}function initModelMeta(e,t,o){var r=e.constructor,n=storage.getModelClassMetaKey(r,"id")||"id",i=storage.getModelClassMetaKey(r,"type"),a=datxUtils.META_FIELD in t&&t[datxUtils.META_FIELD]||{},s=i&&t[i]||void 0!==a&&a.type||getModelType(e),d=n&&t[n]||void 0!==a&&a.id;if(!d){if(!r.enableAutoId)throw new Error(ID_REQUIRED);for(d=r.getAutoId();o&&o.find(s,d);)d=r.getAutoId()}var l={fields:[],id:d,refs:{},type:s},c=datxUtils.META_FIELD in t&&t[datxUtils.META_FIELD]?mergeMeta(e,l,t[datxUtils.META_FIELD]):storage.setModelMeta(e,l);return delete t[datxUtils.META_FIELD],Object.assign({},c)}function mergeMeta(e,t,o){var r;void 0===o&&(o={});var n={fields:[],refs:{}};n.fields=o.fields,(r=t.fields).push.apply(r,o.fields||[]),n.refs=o.refs,Object.assign(t.refs,o.refs||{});var i=["fields","refs","type","id"];Object.keys(o).forEach(function(e){-1===i.indexOf(e)&&(t[e]=o[e])});var a=storage.setModelMeta(e,t);return Object.assign({},a,n)}function initModel(e,t,o){var r=e.constructor,n=Object.assign({},r.preprocess(t,o));setModelMetaKey(e,"collection",o),initModelData(e,n,initModelMeta(e,n,o),o)}var PureModel=function(){function e(e,t){void 0===e&&(e={});var o=this.constructor;o.__datxInitProps&&o.__datxInitProps(),startAction(this),mobx.extendObservable(this,{}),initModel(this,e,t),endAction(this,exports.PatchType.CRATE)}return e.preprocess=function(e,t){return e},e.getAutoId=function(){return"number"==typeof this.autoIdValue?--this.autoIdValue:this.autoIdValue},e.toJSON=function(){return this.type},e.type=datxUtils.DEFAULT_TYPE,e.autoIdValue=0,e.enableAutoId=!0,e}();function initCollectionModel(e,t){return upsertModel(t,getMetaKeyFromRaw(t,"type"),e)}function upsertModel(e,t,o){var r;if(!t&&0!==t)throw error(UNDEFINED_TYPE);var n=o.constructor,i=n.types.find(function(e){return e.type===t});if(!i){var a=n.defaultModel;if(a)return new a(__assign({},e,((r={})[datxUtils.META_FIELD]=__assign({},e[datxUtils.META_FIELD]||{},{type:t}),r)),o);throw error(UNDEFINED_MODEL,{type:t})}var s=getMetaKeyFromRaw(e,"id",i),d=s&&o.find(t,s);return d?updateModel(d,e):new i(e,o)}function isSelectorFunction(e){return"function"==typeof e&&e!==PureModel&&!(e.prototype instanceof PureModel)}function initModels(t,e){return e.map(function(e){return initCollectionModel(t,e)})}var View=function(){function e(e,t,o,r,n){void 0===r&&(r=[]),void 0===n&&(n=!1),this.__collection=t,this.unique=n,this.__models=mobx.observable.array([]),this.__models.replace(r.map(getModelId)),this.sortMethod=o,this.modelType=getModelType(e),this.__collection.__viewList.push(this)}return Object.defineProperty(e.prototype,"length",{get:function(){return this.__models.length},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"list",{get:function(){var t=this,e=this.__models.map(function(e){return t.__collection.find(t.modelType,e)}).filter(Boolean);if(this.sortMethod){var o="string"==typeof this.sortMethod?function(e){return e[t.sortMethod]}:this.sortMethod;e.sort(function(e,t){return o(e)-o(t)})}var r=mobx.observable.array(e,{deep:!1});return mobx.intercept(r,this.__partialListUpdate.bind(this)),r},enumerable:!0,configurable:!0}),e.prototype.toJSON=function(){return{modelType:this.modelType,models:this.__models.slice(),unique:this.unique}},Object.defineProperty(e.prototype,"snapshot",{get:function(){return this.toJSON()},enumerable:!0,configurable:!0}),e.prototype.add=function(e){var o=this,t=datxUtils.mapItems(e,function(e){return o.__collection.add(e,o.modelType)});return datxUtils.mapItems(t,function(e){var t=getModelId(e);o.unique&&-1!==o.__models.indexOf(t)||o.__models.push(t)}),t},e.prototype.hasItem=function(e){var t=getModelId(e);return-1!==this.__models.indexOf(t)},e.prototype.remove=function(e){var t=getModelId(e);this.__models.remove(t)},e.prototype.removeAll=function(){this.__models.replace([])},e.prototype.__partialListUpdate=function(e){var t,o=this;if("splice"===e.type){if(this.sortMethod&&0<e.added.length)throw error(SORTED_NO_WRITE);var r=e.added.map(getModelId),n=this.__models.slice(e.index,e.removedCount);return this.unique&&r.forEach(function(e){if(-1!==o.__models.indexOf(e)&&-1===n.indexOf(e))throw error(UNIQUE_MODEL)}),(t=this.__models).splice.apply(t,[e.index,e.removedCount].concat(r)),null}if(this.sortMethod&&e.newValue)throw error(SORTED_NO_WRITE);var i=getModelId(e.newValue),a=this.__models.indexOf(i);if(this.unique&&-1!==a&&a!==e.index)throw error(UNIQUE_MODEL);return this.__models[e.index]=i,null},e.prototype.__changeModelId=function(e,t){var o=this.__models.indexOf(e);-1!==o&&(this.__models[o]=t)},__decorate([mobx.observable],e.prototype,"sortMethod",void 0),__decorate([mobx.computed],e.prototype,"length",null),__decorate([mobx.computed],e.prototype,"list",null),__decorate([mobx.computed],e.prototype,"snapshot",null),__decorate([mobx.action],e.prototype,"add",null),__decorate([mobx.action],e.prototype,"remove",null),__decorate([mobx.action],e.prototype,"removeAll",null),e}(),PureCollection=function(){function e(e){void 0===e&&(e=[]);var r=this;this.__data=mobx.observable.array([],{deep:!1}),this.__views=[],this.__viewList=[],this.__dataMap={},this.__dataList={},mobx.extendObservable(this,{}),e instanceof Array?this.insert(e):e&&"models"in e&&this.insert(e.models);var n=this.constructor,i=e&&"views"in e?e.views:{};Object.keys(n.views).forEach(function(e){var t=n.views[e],o=i[e]||t;r.addView(e,o.modelType,{mixins:t.mixins,models:o.models||[],sortMethod:t.sortMethod,unique:o.unique})})}return e.prototype.insert=function(e){var t=initModels(this,e);return this.__insertModel(t),t},e.prototype.add=function(e,t){return e instanceof Array?this.__addArray(e,t):this.__addSingle(e,t)},e.prototype.find=function(e,t){return t instanceof PureModel?t:isSelectorFunction(e)?this.__data.find(e)||null:this.__findByType(e,t)||null},e.prototype.filter=function(e){return this.__data.filter(e)},e.prototype.findAll=function(e){var t;if(e){var o=getModelType(e);return o in this.__dataList||mobx.set(this.__dataList,((t={})[o]=mobx.observable.array([]),t)),this.__dataList[o]}return this.__data},e.prototype.hasItem=function(e){var t=getModelId(e);return Boolean(this.find(e,t))},e.prototype.remove=function(e,t){var o="object"==typeof e?e:this.find(e,t);o&&this.__removeModel(o)},e.prototype.removeAll=function(e){this.__removeModel(this.findAll(e).slice())},Object.defineProperty(e.prototype,"length",{get:function(){return this.__data.length},enumerable:!0,configurable:!0}),e.prototype.toJSON=function(){var t=this,o={};return this.__views.forEach(function(e){o[e]=t[e].toJSON()}),{models:this.__data.map(modelToJSON),views:o}},Object.defineProperty(e.prototype,"snapshot",{get:function(){return this.toJSON()},enumerable:!0,configurable:!0}),e.prototype.reset=function(){this.__data.forEach(function(e){setModelMetaKey(e,"collection",void 0),triggerAction({oldValue:modelToJSON(e),patchType:exports.PatchType.REMOVE},e)}),this.__data.replace([]),this.__dataList=mobx.observable({},{},{deep:!1}),this.__dataMap=mobx.observable({},{},{deep:!1})},e.prototype.getAllModels=function(){return this.__data.slice()},e.prototype.addView=function(e,t,o){var r=void 0===o?{}:o,n=r.sortMethod,i=r.models,a=void 0===i?[]:i,s=r.unique,d=r.mixins;if(e in this)throw error(VIEW_NAME_TAKEN);var l=d?d.reduce(function(e,t){return t(e)},View):View;return this.__views.push(e),this[e]=new l(t,this,n,a,s),this[e]},e.prototype.__addArray=function(e,t){var o=this;return e.filter(Boolean).map(function(e){return o.__addSingle(e,t)})},e.prototype.__addSingle=function(e,t){if(!e||"number"==typeof e||"string"==typeof e)return e;if(e instanceof PureModel)return this.hasItem(e)||this.__insertModel(e),e;if(!t&&0!==t)throw error(UNDEFINED_TYPE);var o=getModelType(t),r=upsertModel(e,o,this);return this.__insertModel(r,o),r},e.prototype.__insertModel=function(e,t,o){var r,n=this;if(e instanceof Array)e.forEach(function(e){n.__insertModel(e,t,o)});else{var i=getModelCollection(e);if(i&&i!==this)throw error(MODEL_SINGLE_COLLECTION);var a=t||getModelType(e),s=o||getModelId(e),d=a.toString(),l=this.find(a,s);l?updateModel(l,e):(this.__data.push(e),a in this.__dataList?this.__dataList[a].push(e):mobx.set(this.__dataList,d,mobx.observable.array([e],{deep:!1})),a in this.__dataMap?mobx.set(this.__dataMap[a],s.toString(),e):mobx.set(this.__dataMap,d,mobx.observable.object(((r={})[s]=e,r),{},{deep:!1})),setModelMetaKey(e,"collection",this),triggerAction({newValue:modelToJSON(e),patchType:exports.PatchType.CRATE},e))}},e.prototype.__removeModel=function(e,t,o){var r=this;if(e instanceof Array)e.forEach(function(e){r.__removeModel(e,t,o)});else{var n=t||getModelType(e),i=o||getModelId(e);triggerAction({oldValue:mobx.toJS(modelToJSON(e)),patchType:exports.PatchType.REMOVE},e),this.__data.remove(e),this.__dataList[n].remove(e),mobx.set(this.__dataMap[n],i.toString(),void 0),this.__data.forEach(function(o){var r=getModelMetaKey(o,"refs");Object.keys(r||{}).forEach(function(e){if(getModelType(r[e].model)===n){var t=getRefId(o,e);t instanceof Array?t.includes(i)&&setRefId(o,e,t.filter(function(e){return e!==i})):t===i&&setRefId(o,e,void 0)}})}),setModelMetaKey(e,"collection",void 0)}},e.prototype.__findByType=function(e,t){var o,r=getModelType(e),n=r.toString();return t?(r in this.__dataMap?t in this.__dataMap[r]||mobx.set(this.__dataMap[r],t.toString(),void 0):mobx.set(this.__dataMap,n,mobx.observable.object(((o={})[t]=void 0,o),{},{deep:!1})),this.__dataMap[r][t]):(r in this.__dataList||mobx.set(this.__dataList,n,mobx.observable.array([],{deep:!1})),this.__dataList[r].length?this.__dataList[r][0]:null)},e.prototype.__changeModelId=function(t,o,r){this.__dataMap[r][o]=this.__dataMap[r][t],delete this.__dataMap[r][t],this.__viewList.filter(function(e){return e.modelType===r}).forEach(function(e){e.__changeModelId(t,o)})},e.types=[],e.views={},e.defaultModel=PureModel,__decorate([mobx.observable.shallow],e.prototype,"__dataMap",void 0),__decorate([mobx.observable.shallow],e.prototype,"__dataList",void 0),__decorate([mobx.action],e.prototype,"insert",null),__decorate([mobx.action],e.prototype,"add",null),__decorate([mobx.action],e.prototype,"remove",null),__decorate([mobx.action],e.prototype,"removeAll",null),__decorate([mobx.computed],e.prototype,"length",null),__decorate([mobx.action],e.prototype,"reset",null),e}();function isOfType(e,t){for(var o=e;o;){if(o===t)return!0;o=Object.getPrototypeOf(o)}return!1}function isModel(e){return isOfType(e,PureModel)}function isCollection(e){return isOfType(e,PureCollection)}function isView(e){return isOfType(e,View)}function inversePatch(e){var t=reverseAction(e.patchType);return{model:e.model,newValue:e.oldValue,oldValue:e.newValue,patchType:t}}function withPatches(e){if(isCollection(e))return function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.__patchListeners=[],e}return __extends(e,t),e.prototype.applyPatch=function(e){var t=this.find(e.model.type,e.model.id);if(e.patchType===exports.PatchType.REMOVE)t&&this.remove(t);else if(e.patchType===exports.PatchType.UPDATE){if(!t||!e.newValue)throw error(t?"New patch value isn't set for an update patch":"The model should already exist for an update patch");updateModel(t,e.newValue)}else{if(t)throw error("The model shouldn't exist before a create patch");if(!e.newValue)throw error("New patch value isn't set for a create patch");this.add(e.newValue,e.model.type)}},e.prototype.undoPatch=function(e){this.applyPatch(inversePatch(e))},e.prototype.onPatch=function(t){var e=this;return this.__patchListeners.push(t),function(){e.__patchListeners=e.__patchListeners.filter(function(e){return e!==t})}},e}(e);if(isModel(e))return function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.__patchListeners=[],e}return __extends(e,t),e.prototype.applyPatch=function(e){e.model.type===getModelType(this)&&e.model.id===getModelId(this)&&updateModel(this,e.newValue||{})},e.prototype.undoPatch=function(e){this.applyPatch(inversePatch(e))},e.prototype.onPatch=function(t){var e=this;return this.__patchListeners.push(t),function(){e.__patchListeners=e.__patchListeners.filter(function(e){return e!==t})}},e}(e);throw error("Only Models and Collections can be decorated with patches")}function withActions(e){var t=e;if(!isModel(e))throw error(DECORATE_MODEL);return function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t.prototype.update=function(e){updateModel(this,e)},t.prototype.clone=function(){return cloneModel(this)},t.prototype.assign=function(e,t){assignModel(this,e,t)},t.prototype.addReference=function(e,t,o){initModelRef(this,e,o,t)},t.prototype.toJSON=function(){return modelToJSON(this)},t}(t)}function withMeta(e){var t=e;if(!isModel(t))throw error(DECORATE_MODEL);var o=function(){function e(e){this.__instance=e}return Object.defineProperty(e.prototype,"collection",{get:function(){return getModelCollection(this.__instance)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"id",{get:function(){return getModelId(this.__instance)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"original",{get:function(){return getModelMetaKey(this.__instance,"originalId")?getOriginalModel(this.__instance):void 0},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"refs",{get:function(){var t=this,e=getModelMetaKey(this.__instance,"refs")||{},o={};return Object.keys(e).forEach(function(e){o[e]=getRefId(t.__instance,e)}),o},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"snapshot",{get:function(){return modelToJSON(this.__instance)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"type",{get:function(){return getModelType(this.__instance)},enumerable:!0,configurable:!0}),__decorate([mobx.computed],e.prototype,"collection",null),__decorate([mobx.computed],e.prototype,"id",null),__decorate([mobx.computed],e.prototype,"original",null),__decorate([mobx.computed],e.prototype,"refs",null),__decorate([mobx.computed],e.prototype,"snapshot",null),__decorate([mobx.computed],e.prototype,"type",null),e}();return function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.meta=new o(e),e}return __extends(e,t),e}(t)}var Model=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t.prototype.valueOf=function(){var e=this.meta.snapshot;return delete e[datxUtils.META_FIELD],__assign({},e,{meta:{id:this.meta.id,type:this.meta.type}})},t.prototype.toString=function(){return JSON.stringify(this.valueOf(),null,2)},t}(withPatches(withActions(withMeta(PureModel)))),Collection=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t.defaultModel=Model,t}(withPatches(PureCollection)),CompatModel=function(o){function e(e,t){var r=o.call(this,e,t)||this;return datxUtils.deprecated("CompatModel is just a migration tool. Please move to Model or PureModel as soon as possible."),Object.keys(r.static.refs).forEach(function(e){if(!(e in getModelMetaKey(r,"refs"))){var t=r.static.refs[e],o=datxUtils.mapItems(r[e]||r.static.defaults[e],getModelId);datxUtils.assignComputed(r,e),initModelRef(r,e,"object"==typeof t?{model:t.model,property:t.property,type:exports.ReferenceType.TO_ONE_OR_MANY}:{model:t,type:exports.ReferenceType.TO_ONE_OR_MANY},o)}}),Object.keys(r.static.defaults).forEach(function(e){e in r.static.refs||e in r||initModelField(r,e,r.static.defaults[e])}),r}return __extends(e,o),e.__datxInitProps=function(){this.idAttribute&&storage.setModelClassMetaKey(this,"id",this.idAttribute),this.typeAttribute&&storage.setModelClassMetaKey(this,"type",this.typeAttribute)},e.prototype.getRecordId=function(){return datxUtils.deprecated("model.getRecordId is deprecated. Use getModelId() instead."),getModelId(this)},e.prototype.getRecordType=function(){return datxUtils.deprecated("model.getRecordType is deprecated. Use getModelType() instead."),getModelType(this)},e.prototype.assign=function(e,t){datxUtils.deprecated("model.assign is deprecated. Use assignModel() instead.");var o=FieldType.DATA,r=storage.getModelClassMetaKey(this.static,"id"),n=storage.getModelClassMetaKey(this.static,"type");return e===r?o=FieldType.ID:e===n&&(o=FieldType.TYPE),updateField(this,e,t,o),t},e.prototype.assignRef=function(e,t,o){if(datxUtils.deprecated("model.assignRef is deprecated. Use initModelRef() instead."),getModelMetaKey(this,"refs")[e])return this[e]=t;var r=o;if(r||(t instanceof Array||mobx.isObservableArray(t)?r=t.reduce(function(e,t){return e||getModelType(t)},null):t instanceof PureModel&&(r=getModelType(t))),!r)throw new Error("The type property is missing");return initModelRef(this,e,{model:r,type:exports.ReferenceType.TO_ONE_OR_MANY},t),this[e]},e.prototype.update=function(e){var t=this;datxUtils.deprecated("model.update is deprecated. Use updateModel() instead.");var o=Object.assign({},e);return Object.keys(o).forEach(function(e){"function"==typeof t[e]&&delete o[e]}),updateModel(this,o)},Object.defineProperty(e.prototype,"static",{get:function(){return datxUtils.deprecated("model.static is deprecated."),this.constructor},enumerable:!0,configurable:!0}),e.prototype.toJS=function(){return datxUtils.deprecated("model.toJS() is deprecated. Use modelToJSON() instead."),modelToJSON(this)},Object.defineProperty(e.prototype,"snapshot",{get:function(){return datxUtils.deprecated("model.snapshot is deprecated. Use modelToJSON() instead."),modelToJSON(this)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"__collection",{get:function(){return datxUtils.deprecated("model.__collection is deprecated. Use getModelCollection() instead."),getModelCollection(this)},enumerable:!0,configurable:!0}),e.refs={},e.defaults={},e.idAttribute="id",e.typeAttribute="__type__",e}(PureModel),CompatCollection=function(t){function e(e){var o=t.call(this,e)||this;return datxUtils.deprecated("CompatCollection is just a migration tool. Please move to Collection as soon as possible."),o.static.types.forEach(function(e){var t=getModelType(e);datxUtils.assignComputed(o,t.toString(),function(){return o.findAll(t)})}),o}return __extends(e,t),Object.defineProperty(e.prototype,"static",{get:function(){return datxUtils.deprecated("collection.static is deprecated."),this.constructor},enumerable:!0,configurable:!0}),e.prototype.toJS=function(){return datxUtils.deprecated("collection.toJS() is deprecated. Use collection.toJSON() instead"),this.toJSON()},e.types=[CompatModel],e}(Collection);function getClass(e){return"function"==typeof e?e:e.constructor}function prepareDecorator(e,t,o){o&&"initializer"in o&&(o.initializer=void 0)}function propFn(e,t,o){prepareDecorator(e,t,o),storage.addModelDefaultField(getClass(e),t)}var prop=Object.assign(propFn,{defaultValue:function(r){return function(e,t,o){prepareDecorator(e,t,o),storage.addModelDefaultField(getClass(e),t,r)}},toOne:function(r){return function(e,t,o){prepareDecorator(e,t,o),storage.addModelClassReference(getClass(e),t,{model:r,type:exports.ReferenceType.TO_ONE})}},toMany:function(r,n){return function(e,t,o){prepareDecorator(e,t,o),storage.addModelClassReference(getClass(e),t,{model:r,property:n,type:exports.ReferenceType.TO_MANY})}},toOneOrMany:function(r){return function(e,t,o){prepareDecorator(e,t,o),storage.addModelClassReference(getClass(e),t,{model:r,type:exports.ReferenceType.TO_ONE_OR_MANY})}},identifier:function(e,t,o){prepareDecorator(e,t,o),storage.addModelDefaultField(getClass(e),t),storage.setModelClassMetaKey(getClass(e),"id",t)},type:function(e,t,o){prepareDecorator(e,t,o),storage.addModelDefaultField(getClass(e),t),storage.setModelClassMetaKey(getClass(e),"type",t)}});function setupModel(e,t){var o=void 0===t?{fields:{}}:t,r=o.fields,n=o.references,i=o.type,a=o.idAttribute,s=o.typeAttribute,d=e;if(!isModel(d))throw error(DECORATE_MODEL);var l=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return __extends(t,e),t}(d);return i&&(l.type=i),a&&prop.identifier(l.prototype,a),s&&prop.type(l.prototype,s),r&&Object.keys(r).forEach(function(e){prop.defaultValue(r[e])(l.prototype,e)}),n&&Object.keys(n).forEach(function(e){var t=n[e],o=t.model,r=t.property;switch(n[e].type){case exports.ReferenceType.TO_ONE:return void prop.toOne(o)(l.prototype,e);case exports.ReferenceType.TO_MANY:return void prop.toMany(o,r)(l.prototype,e);default:return void prop.toOneOrMany(o)(l.prototype,e)}}),l}exports.Collection=Collection,exports.Model=Model,exports.View=View,exports.PureCollection=PureCollection,exports.PureModel=PureModel,exports.CompatCollection=CompatCollection,exports.CompatModel=CompatModel,exports.getRefId=getRefId,exports.setRefId=setRefId,exports.updateModelId=updateModelId,exports.initModelRef=initModelRef,exports.assignModel=assignModel,exports.cloneModel=cloneModel,exports.getModelClassRefs=getModelClassRefs,exports.getModelCollection=getModelCollection,exports.getModelId=getModelId,exports.getModelMetaKey=getModelMetaKey,exports.getModelType=getModelType,exports.getOriginalModel=getOriginalModel,exports.modelToJSON=modelToJSON,exports.setModelMetaKey=setModelMetaKey,exports.updateModel=updateModel,exports.isCollection=isCollection,exports.isModel=isModel,exports.isView=isView,exports.setupModel=setupModel,exports.withActions=withActions,exports.withMeta=withMeta,exports.withPatches=withPatches,exports.prop=prop; |
@@ -10,3 +10,3 @@ import { PureModel } from './PureModel'; | ||
*/ | ||
declare function propFn<T extends PureModel>(obj: T, key: string): void; | ||
declare function propFn<T extends PureModel>(obj: T, key: string, opts?: object): void; | ||
export declare const prop: typeof propFn & { | ||
@@ -49,3 +49,3 @@ /** | ||
*/ | ||
identifier<T extends PureModel>(obj: T, key: string): void; | ||
identifier<T extends PureModel>(obj: T, key: string, opts?: object | undefined): void; | ||
/** | ||
@@ -58,4 +58,4 @@ * Define the type property on the model | ||
*/ | ||
type<T extends PureModel>(obj: T, key: string): void; | ||
type<T extends PureModel>(obj: T, key: string, opts?: object | undefined): void; | ||
}; | ||
export {}; |
{ | ||
"name": "datx", | ||
"version": "0.15.9", | ||
"version": "0.15.10", | ||
"description": "A MobX data store", | ||
@@ -21,12 +21,12 @@ "main": "dist/index.cjs.js", | ||
"@infinumjs/tslint-config": "^2.0.0-beta.6", | ||
"@types/jest": "^24.0.0", | ||
"@types/node": "^11.9.0", | ||
"jest": "^24.0.0", | ||
"@types/jest": "^24.0.11", | ||
"@types/node": "^11.11.3", | ||
"jest": "^24.5.0", | ||
"mobx": "^5.9.0", | ||
"rollup": "^1.1.2", | ||
"rollup-plugin-typescript2": "^0.19.2", | ||
"rollup": "^1.6.0", | ||
"rollup-plugin-typescript2": "^0.20.1", | ||
"rollup-plugin-uglify": "^6.0.2", | ||
"ts-jest": "^23.10.5", | ||
"tslint": "^5.12.1", | ||
"typescript": "^3.2.4" | ||
"ts-jest": "^24.0.0", | ||
"tslint": "^5.14.0", | ||
"typescript": "^3.3.3333" | ||
}, | ||
@@ -66,5 +66,5 @@ "peerDependencies": { | ||
"dependencies": { | ||
"datx-utils": "^0.15.9" | ||
"datx-utils": "^0.15.10" | ||
}, | ||
"gitHead": "5144b45b9c975045ca4ccac6290ea87ea8b61c45" | ||
"gitHead": "e002ee7447959160cd7a3d19ceceb08eda5ef1db" | ||
} |
@@ -5,4 +5,2 @@ # datx | ||
The library is still work in progress, but it's feature complete. You can track the v1.0 status using the [v1.0 milestone](https://github.com/infinum/datx/milestone/1). | ||
*** | ||
@@ -55,6 +53,8 @@ | ||
* [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) | ||
* [Symbol.for](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol) | ||
* [Object.assign](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) | ||
* [Array.prototype.find](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find) | ||
[How to add the polyfills](https://github.com/infinum/datx/wiki/Troubleshooting#the-library-doesnt-work-in-internet-explorer-11). | ||
## Concepts | ||
@@ -93,2 +93,6 @@ | ||
## Troubleshooting | ||
Having issues with the library? Check out the [troubleshooting](https://github.com/infinum/datx/wiki/Troubleshooting) page or [open](https://github.com/infinum/datx/issues/new) an issue. | ||
*** | ||
@@ -95,0 +99,0 @@ |
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
115
161467
49
3133
Updateddatx-utils@^0.15.10