UNPKG

@bigtest/mirage

Version:

A client-side server to develop, test and prototype your app.

1,987 lines (1,537 loc) 1.76 MB
(function (global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : (factory((global.BigTest = global.BigTest || {}, global.BigTest.Mirage = {}))); }(this, (function (exports) { 'use strict'; function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { return typeof obj; }; } else { _typeof = function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var _sPO = Object.setPrototypeOf || function _sPO(o, p) { o.__proto__ = p; return o; }; var _construct = typeof Reflect === "object" && Reflect.construct || function _construct(Parent, args, Class) { var Constructor, a = [null]; a.push.apply(a, args); Constructor = Parent.bind.apply(Parent, a); return _sPO(new Constructor(), Class.prototype); }; function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _possibleConstructorReturn(self, call) { if (call && (typeof call === "object" || typeof call === "function")) { return call; } if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } function _slicedToArray(arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return _sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } } var Association = function () { function Association(modelName, opts) { _classCallCheck(this, Association); if (_typeof(modelName) === 'object') { this.modelName = undefined; this.opts = modelName; } else { this.modelName = modelName ? dasherize$$1(modelName) : ''; this.opts = opts || {}; } this.key = ''; this.ownerModelName = ''; } _createClass(Association, [{ key: "setSchema", value: function setSchema(schema) { this.schema = schema; } }, { key: "isReflexive", value: function isReflexive() { var isExplicitReflexive = !!(this.modelName === this.ownerModelName && this.opts.inverse); var isImplicitReflexive = !!(this.opts.inverse === undefined && this.ownerModelName === this.modelName); return isExplicitReflexive || isImplicitReflexive; } }, { key: "isPolymorphic", get: function get() { return this.opts.polymorphic; } }]); return Association; }(); var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } var freeGlobal = _typeof(commonjsGlobal) == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; var _freeGlobal = freeGlobal; var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self && self.Object === Object && self; var root = _freeGlobal || freeSelf || Function('return this')(); var _root = root; var _Symbol2 = _root.Symbol; var _Symbol = _Symbol2; var objectProto$3 = Object.prototype; var hasOwnProperty$3 = objectProto$3.hasOwnProperty; var nativeObjectToString = objectProto$3.toString; var symToStringTag$1 = _Symbol ? _Symbol.toStringTag : undefined; function getRawTag(value) { var isOwn = hasOwnProperty$3.call(value, symToStringTag$1), tag = value[symToStringTag$1]; try { value[symToStringTag$1] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag$1] = tag; } else { delete value[symToStringTag$1]; } } return result; } var _getRawTag = getRawTag; var objectProto$4 = Object.prototype; var nativeObjectToString$1 = objectProto$4.toString; function objectToString(value) { return nativeObjectToString$1.call(value); } var _objectToString = objectToString; var nullTag = '[object Null]'; var undefinedTag = '[object Undefined]'; var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object(value) ? _getRawTag(value) : _objectToString(value); } var _baseGetTag = baseGetTag; function isObject(value) { var type = _typeof(value); return value != null && (type == 'object' || type == 'function'); } var isObject_1 = isObject; var asyncTag = '[object AsyncFunction]'; var funcTag = '[object Function]'; var genTag = '[object GeneratorFunction]'; var proxyTag = '[object Proxy]'; function isFunction(value) { if (!isObject_1(value)) { return false; } var tag = _baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } var isFunction_1 = isFunction; var coreJsData = _root['__core-js_shared__']; var _coreJsData = coreJsData; var maskSrcKey = function () { var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || ''); return uid ? 'Symbol(src)_1.' + uid : ''; }(); function isMasked(func) { return !!maskSrcKey && maskSrcKey in func; } var _isMasked = isMasked; var funcProto$1 = Function.prototype; var funcToString$1 = funcProto$1.toString; function toSource(func) { if (func != null) { try { return funcToString$1.call(func); } catch (e) {} try { return func + ''; } catch (e) {} } return ''; } var _toSource = toSource; var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; var reIsHostCtor = /^\[object .+?Constructor\]$/; var funcProto = Function.prototype; var objectProto$2 = Object.prototype; var funcToString = funcProto.toString; var hasOwnProperty$2 = objectProto$2.hasOwnProperty; var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty$2).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'); function baseIsNative(value) { if (!isObject_1(value) || _isMasked(value)) { return false; } var pattern = isFunction_1(value) ? reIsNative : reIsHostCtor; return pattern.test(_toSource(value)); } var _baseIsNative = baseIsNative; function getValue(object, key) { return object == null ? undefined : object[key]; } var _getValue = getValue; function getNative(object, key) { var value = _getValue(object, key); return _baseIsNative(value) ? value : undefined; } var _getNative = getNative; var defineProperty = function () { try { var func = _getNative(Object, 'defineProperty'); func({}, '', {}); return func; } catch (e) {} }(); var _defineProperty$1 = defineProperty; function baseAssignValue(object, key, value) { if (key == '__proto__' && _defineProperty$1) { _defineProperty$1(object, key, { 'configurable': true, 'enumerable': true, 'value': value, 'writable': true }); } else { object[key] = value; } } var _baseAssignValue = baseAssignValue; function eq(value, other) { return value === other || value !== value && other !== other; } var eq_1 = eq; var objectProto$1 = Object.prototype; var hasOwnProperty$1 = objectProto$1.hasOwnProperty; function assignValue(object, key, value) { var objValue = object[key]; if (!(hasOwnProperty$1.call(object, key) && eq_1(objValue, value)) || value === undefined && !(key in object)) { _baseAssignValue(object, key, value); } } var _assignValue = assignValue; function copyObject(source, props, object, customizer) { var isNew = !object; object || (object = {}); var index = -1, length = props.length; while (++index < length) { var key = props[index]; var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined; if (newValue === undefined) { newValue = source[key]; } if (isNew) { _baseAssignValue(object, key, newValue); } else { _assignValue(object, key, newValue); } } return object; } var _copyObject = copyObject; function identity(value) { return value; } var identity_1 = identity; function apply(func, thisArg, args) { switch (args.length) { case 0: return func.call(thisArg); case 1: return func.call(thisArg, args[0]); case 2: return func.call(thisArg, args[0], args[1]); case 3: return func.call(thisArg, args[0], args[1], args[2]); } return func.apply(thisArg, args); } var _apply = apply; var nativeMax = Math.max; function overRest(func, start, transform) { start = nativeMax(start === undefined ? func.length - 1 : start, 0); return function () { var args = arguments, index = -1, length = nativeMax(args.length - start, 0), array = Array(length); while (++index < length) { array[index] = args[start + index]; } index = -1; var otherArgs = Array(start + 1); while (++index < start) { otherArgs[index] = args[index]; } otherArgs[start] = transform(array); return _apply(func, this, otherArgs); }; } var _overRest = overRest; function constant(value) { return function () { return value; }; } var constant_1 = constant; var baseSetToString = !_defineProperty$1 ? identity_1 : function (func, string) { return _defineProperty$1(func, 'toString', { 'configurable': true, 'enumerable': false, 'value': constant_1(string), 'writable': true }); }; var _baseSetToString = baseSetToString; var HOT_COUNT = 800; var HOT_SPAN = 16; var nativeNow = Date.now; function shortOut(func) { var count = 0, lastCalled = 0; return function () { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(undefined, arguments); }; } var _shortOut = shortOut; var setToString = _shortOut(_baseSetToString); var _setToString = setToString; function baseRest(func, start) { return _setToString(_overRest(func, start, identity_1), func + ''); } var _baseRest = baseRest; var MAX_SAFE_INTEGER = 9007199254740991; function isLength(value) { return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; } var isLength_1 = isLength; function isArrayLike(value) { return value != null && isLength_1(value.length) && !isFunction_1(value); } var isArrayLike_1 = isArrayLike; var MAX_SAFE_INTEGER$1 = 9007199254740991; var reIsUint = /^(?:0|[1-9]\d*)$/; function isIndex(value, length) { length = length == null ? MAX_SAFE_INTEGER$1 : length; return !!length && (typeof value == 'number' || reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; } var _isIndex = isIndex; function isIterateeCall(value, index, object) { if (!isObject_1(object)) { return false; } var type = _typeof(index); if (type == 'number' ? isArrayLike_1(object) && _isIndex(index, object.length) : type == 'string' && index in object) { return eq_1(object[index], value); } return false; } var _isIterateeCall = isIterateeCall; function createAssigner(assigner) { return _baseRest(function (object, sources) { var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined, guard = length > 2 ? sources[2] : undefined; customizer = assigner.length > 3 && typeof customizer == 'function' ? (length--, customizer) : undefined; if (guard && _isIterateeCall(sources[0], sources[1], guard)) { customizer = length < 3 ? undefined : customizer; length = 1; } object = Object(object); while (++index < length) { var source = sources[index]; if (source) { assigner(object, source, index, customizer); } } return object; }); } var _createAssigner = createAssigner; var objectProto$5 = Object.prototype; function isPrototype(value) { var Ctor = value && value.constructor, proto = typeof Ctor == 'function' && Ctor.prototype || objectProto$5; return value === proto; } var _isPrototype = isPrototype; function baseTimes(n, iteratee) { var index = -1, result = Array(n); while (++index < n) { result[index] = iteratee(index); } return result; } var _baseTimes = baseTimes; function isObjectLike(value) { return value != null && _typeof(value) == 'object'; } var isObjectLike_1 = isObjectLike; var argsTag = '[object Arguments]'; function baseIsArguments(value) { return isObjectLike_1(value) && _baseGetTag(value) == argsTag; } var _baseIsArguments = baseIsArguments; var objectProto$7 = Object.prototype; var hasOwnProperty$5 = objectProto$7.hasOwnProperty; var propertyIsEnumerable = objectProto$7.propertyIsEnumerable; var isArguments = _baseIsArguments(function () { return arguments; }()) ? _baseIsArguments : function (value) { return isObjectLike_1(value) && hasOwnProperty$5.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; var isArguments_1 = isArguments; var isArray = Array.isArray; var isArray_1 = isArray; function stubFalse() { return false; } var stubFalse_1 = stubFalse; var isBuffer_1 = createCommonjsModule(function (module, exports) { var freeExports = 'object' == 'object' && exports && !exports.nodeType && exports; var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; var moduleExports = freeModule && freeModule.exports === freeExports; var Buffer = moduleExports ? _root.Buffer : undefined; var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; var isBuffer = nativeIsBuffer || stubFalse_1; module.exports = isBuffer; }); var argsTag$1 = '[object Arguments]'; var arrayTag = '[object Array]'; var boolTag = '[object Boolean]'; var dateTag = '[object Date]'; var errorTag = '[object Error]'; var funcTag$1 = '[object Function]'; var mapTag = '[object Map]'; var numberTag = '[object Number]'; var objectTag = '[object Object]'; var regexpTag = '[object RegExp]'; var setTag = '[object Set]'; var stringTag = '[object String]'; var weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]'; var dataViewTag = '[object DataView]'; var float32Tag = '[object Float32Array]'; var float64Tag = '[object Float64Array]'; var int8Tag = '[object Int8Array]'; var int16Tag = '[object Int16Array]'; var int32Tag = '[object Int32Array]'; var uint8Tag = '[object Uint8Array]'; var uint8ClampedTag = '[object Uint8ClampedArray]'; var uint16Tag = '[object Uint16Array]'; var uint32Tag = '[object Uint32Array]'; var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag$1] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; function baseIsTypedArray(value) { return isObjectLike_1(value) && isLength_1(value.length) && !!typedArrayTags[_baseGetTag(value)]; } var _baseIsTypedArray = baseIsTypedArray; function baseUnary(func) { return function (value) { return func(value); }; } var _baseUnary = baseUnary; var _nodeUtil = createCommonjsModule(function (module, exports) { var freeExports = 'object' == 'object' && exports && !exports.nodeType && exports; var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module; var moduleExports = freeModule && freeModule.exports === freeExports; var freeProcess = moduleExports && _freeGlobal.process; var nodeUtil = function () { try { return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }(); module.exports = nodeUtil; }); var nodeIsTypedArray = _nodeUtil && _nodeUtil.isTypedArray; var isTypedArray = nodeIsTypedArray ? _baseUnary(nodeIsTypedArray) : _baseIsTypedArray; var isTypedArray_1 = isTypedArray; var objectProto$6 = Object.prototype; var hasOwnProperty$4 = objectProto$6.hasOwnProperty; function arrayLikeKeys(value, inherited) { var isArr = isArray_1(value), isArg = !isArr && isArguments_1(value), isBuff = !isArr && !isArg && isBuffer_1(value), isType = !isArr && !isArg && !isBuff && isTypedArray_1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? _baseTimes(value.length, String) : [], length = result.length; for (var key in value) { if ((inherited || hasOwnProperty$4.call(value, key)) && !(skipIndexes && (key == 'length' || isBuff && (key == 'offset' || key == 'parent') || isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || _isIndex(key, length)))) { result.push(key); } } return result; } var _arrayLikeKeys = arrayLikeKeys; function overArg(func, transform) { return function (arg) { return func(transform(arg)); }; } var _overArg = overArg; var nativeKeys = _overArg(Object.keys, Object); var _nativeKeys = nativeKeys; var objectProto$8 = Object.prototype; var hasOwnProperty$6 = objectProto$8.hasOwnProperty; function baseKeys(object) { if (!_isPrototype(object)) { return _nativeKeys(object); } var result = []; for (var key in Object(object)) { if (hasOwnProperty$6.call(object, key) && key != 'constructor') { result.push(key); } } return result; } var _baseKeys = baseKeys; function keys(object) { return isArrayLike_1(object) ? _arrayLikeKeys(object) : _baseKeys(object); } var keys_1 = keys; var objectProto = Object.prototype; var hasOwnProperty = objectProto.hasOwnProperty; var assign = _createAssigner(function (object, source) { if (_isPrototype(source) || isArrayLike_1(source)) { _copyObject(source, keys_1(source), object); return; } for (var key in source) { if (hasOwnProperty.call(source, key)) { _assignValue(object, key, source[key]); } } }); var assign_1 = assign; function toCollectionName(type) { var modelName = dasherize$$1(type); return camelize$$1(pluralize(modelName)); } function toModelName(type) { var modelName = dasherize$$1(type); return singularize(modelName); } var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack']; function assert(bool, text) { if (typeof bool === 'string' && !text) { throw new MirageError(bool); } if (!bool) { throw new MirageError(text.replace(/^ +/gm, '') || 'Assertion failed'); } } function MirageError() { var tmp = Error.apply(this, arguments); for (var idx = 0; idx < errorProps.length; idx++) { var prop = errorProps[idx]; if (['description', 'message', 'stack'].indexOf(prop) > -1) { this[prop] = "Mirage: ".concat(tmp[prop]); } else { this[prop] = tmp[prop]; } } console.error(this.message); console.error(this); } MirageError.prototype = Object.create(Error.prototype); var BelongsTo = function (_Association) { _inherits(BelongsTo, _Association); function BelongsTo() { _classCallCheck(this, BelongsTo); return _possibleConstructorReturn(this, (BelongsTo.__proto__ || Object.getPrototypeOf(BelongsTo)).apply(this, arguments)); } _createClass(BelongsTo, [{ key: "getForeignKeyArray", value: function getForeignKeyArray() { return [camelize$$1(this.ownerModelName), this.getForeignKey()]; } }, { key: "getForeignKey", value: function getForeignKey() { return "".concat(camelize$$1(this.key), "Id"); } }, { key: "addMethodsToModelClass", value: function addMethodsToModelClass(ModelClass, key) { var modelPrototype = ModelClass.prototype; var association = this; var foreignKey = this.getForeignKey(); var associationHash = _defineProperty({}, key, this); modelPrototype.belongsToAssociations = assign_1(modelPrototype.belongsToAssociations, associationHash); this.schema.addDependentAssociation(this, this.modelName); modelPrototype.associationKeys.push(key); modelPrototype.associationIdKeys.push(foreignKey); Object.defineProperty(modelPrototype, foreignKey, { get: function get() { this._tempAssociations = this._tempAssociations || {}; var tempParent = this._tempAssociations[key]; var id; if (tempParent === null) { id = null; } else { if (association.isPolymorphic) { if (tempParent) { id = { id: tempParent.id, type: tempParent.modelName }; } else { id = this.attrs[foreignKey]; } } else { if (tempParent) { id = tempParent.id; } else { id = this.attrs[foreignKey]; } } } return id; }, set: function set(id) { var tempParent; if (id === null) { tempParent = null; } else if (id !== undefined) { if (association.isPolymorphic) { assert(_typeof(id) === 'object', "You're setting an ID on the polymorphic association '".concat(association.key, "' but you didn't pass in an object. Polymorphic IDs need to be in the form { type, id }.")); tempParent = association.schema[toCollectionName(id.type)].find(id.id); } else { tempParent = association.schema[toCollectionName(association.modelName)].find(id); assert(tempParent, "Couldn't find ".concat(association.modelName, " with id = ").concat(id)); } } this[key] = tempParent; } }); Object.defineProperty(modelPrototype, key, { get: function get() { this._tempAssociations = this._tempAssociations || {}; var tempParent = this._tempAssociations[key]; var foreignKeyId = this[foreignKey]; var model = null; if (tempParent) { model = tempParent; } else if (foreignKeyId !== null) { if (association.isPolymorphic) { model = association.schema[toCollectionName(foreignKeyId.type)].find(foreignKeyId.id); } else { model = association.schema[toCollectionName(association.modelName)].find(foreignKeyId); } } return model; }, set: function set(model) { this._tempAssociations = this._tempAssociations || {}; this._tempAssociations[key] = model; if (model && model.hasInverseFor(association)) { var inverse = model.inverseFor(association); model.associate(this, inverse); } } }); modelPrototype["new".concat(capitalize(key))] = function () { var modelName, attrs; if (association.isPolymorphic) { modelName = arguments.length <= 0 ? undefined : arguments[0]; attrs = arguments.length <= 1 ? undefined : arguments[1]; } else { modelName = association.modelName; attrs = arguments.length <= 0 ? undefined : arguments[0]; } var parent = association.schema[toCollectionName(modelName)].new(attrs); this[key] = parent; return parent; }; modelPrototype["create".concat(capitalize(key))] = function () { var modelName, attrs; if (association.isPolymorphic) { modelName = arguments.length <= 0 ? undefined : arguments[0]; attrs = arguments.length <= 1 ? undefined : arguments[1]; } else { modelName = association.modelName; attrs = arguments.length <= 0 ? undefined : arguments[0]; } var parent = association.schema[toCollectionName(modelName)].create(attrs); this[key] = parent; this.save(); return parent; }; } }, { key: "disassociateAllDependentsFromTarget", value: function disassociateAllDependentsFromTarget(model) { var _this = this; var owner = this.ownerModelName; var fk; if (this.isPolymorphic) { fk = { type: model.modelName, id: model.id }; } else { fk = model.id; } var dependents = this.schema[toCollectionName(owner)].where(function (potentialOwner) { var id = potentialOwner[_this.getForeignKey()]; if (!id) { return false; } if (_typeof(id) === 'object') { return id.type === fk.type && id.id === fk.id; } else { return id === fk; } }); dependents.models.forEach(function (dependent) { dependent.disassociate(model, _this); dependent.save(); }); } }]); return BelongsTo; }(Association); function createBaseFor(fromRight) { return function (object, iteratee, keysFunc) { var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; while (length--) { var key = props[fromRight ? length : ++index]; if (iteratee(iterable[key], key, iterable) === false) { break; } } return object; }; } var _createBaseFor = createBaseFor; var baseFor = _createBaseFor(); var _baseFor = baseFor; function baseForOwn(object, iteratee) { return object && _baseFor(object, iteratee, keys_1); } var _baseForOwn = baseForOwn; function createBaseEach(eachFunc, fromRight) { return function (collection, iteratee) { if (collection == null) { return collection; } if (!isArrayLike_1(collection)) { return eachFunc(collection, iteratee); } var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection); while (fromRight ? index-- : ++index < length) { if (iteratee(iterable[index], index, iterable) === false) { break; } } return collection; }; } var _createBaseEach = createBaseEach; var baseEach = _createBaseEach(_baseForOwn); var _baseEach = baseEach; var symbolTag = '[object Symbol]'; function isSymbol(value) { return _typeof(value) == 'symbol' || isObjectLike_1(value) && _baseGetTag(value) == symbolTag; } var isSymbol_1 = isSymbol; var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; var reIsPlainProp = /^\w*$/; function isKey(value, object) { if (isArray_1(value)) { return false; } var type = _typeof(value); if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol_1(value)) { return true; } return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); } var _isKey = isKey; var nativeCreate = _getNative(Object, 'create'); var _nativeCreate = nativeCreate; function hashClear() { this.__data__ = _nativeCreate ? _nativeCreate(null) : {}; this.size = 0; } var _hashClear = hashClear; function hashDelete(key) { var result = this.has(key) && delete this.__data__[key]; this.size -= result ? 1 : 0; return result; } var _hashDelete = hashDelete; var HASH_UNDEFINED = '__lodash_hash_undefined__'; var objectProto$9 = Object.prototype; var hasOwnProperty$7 = objectProto$9.hasOwnProperty; function hashGet(key) { var data = this.__data__; if (_nativeCreate) { var result = data[key]; return result === HASH_UNDEFINED ? undefined : result; } return hasOwnProperty$7.call(data, key) ? data[key] : undefined; } var _hashGet = hashGet; var objectProto$10 = Object.prototype; var hasOwnProperty$8 = objectProto$10.hasOwnProperty; function hashHas(key) { var data = this.__data__; return _nativeCreate ? data[key] !== undefined : hasOwnProperty$8.call(data, key); } var _hashHas = hashHas; var HASH_UNDEFINED$1 = '__lodash_hash_undefined__'; function hashSet(key, value) { var data = this.__data__; this.size += this.has(key) ? 0 : 1; data[key] = _nativeCreate && value === undefined ? HASH_UNDEFINED$1 : value; return this; } var _hashSet = hashSet; function Hash(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } Hash.prototype.clear = _hashClear; Hash.prototype['delete'] = _hashDelete; Hash.prototype.get = _hashGet; Hash.prototype.has = _hashHas; Hash.prototype.set = _hashSet; var _Hash = Hash; function listCacheClear() { this.__data__ = []; this.size = 0; } var _listCacheClear = listCacheClear; function assocIndexOf(array, key) { var length = array.length; while (length--) { if (eq_1(array[length][0], key)) { return length; } } return -1; } var _assocIndexOf = assocIndexOf; var arrayProto = Array.prototype; var splice = arrayProto.splice; function listCacheDelete(key) { var data = this.__data__, index = _assocIndexOf(data, key); if (index < 0) { return false; } var lastIndex = data.length - 1; if (index == lastIndex) { data.pop(); } else { splice.call(data, index, 1); } --this.size; return true; } var _listCacheDelete = listCacheDelete; function listCacheGet(key) { var data = this.__data__, index = _assocIndexOf(data, key); return index < 0 ? undefined : data[index][1]; } var _listCacheGet = listCacheGet; function listCacheHas(key) { return _assocIndexOf(this.__data__, key) > -1; } var _listCacheHas = listCacheHas; function listCacheSet(key, value) { var data = this.__data__, index = _assocIndexOf(data, key); if (index < 0) { ++this.size; data.push([key, value]); } else { data[index][1] = value; } return this; } var _listCacheSet = listCacheSet; function ListCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } ListCache.prototype.clear = _listCacheClear; ListCache.prototype['delete'] = _listCacheDelete; ListCache.prototype.get = _listCacheGet; ListCache.prototype.has = _listCacheHas; ListCache.prototype.set = _listCacheSet; var _ListCache = ListCache; var Map$1 = _getNative(_root, 'Map'); var _Map = Map$1; function mapCacheClear() { this.size = 0; this.__data__ = { 'hash': new _Hash(), 'map': new (_Map || _ListCache)(), 'string': new _Hash() }; } var _mapCacheClear = mapCacheClear; function isKeyable(value) { var type = _typeof(value); return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null; } var _isKeyable = isKeyable; function getMapData(map, key) { var data = map.__data__; return _isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map; } var _getMapData = getMapData; function mapCacheDelete(key) { var result = _getMapData(this, key)['delete'](key); this.size -= result ? 1 : 0; return result; } var _mapCacheDelete = mapCacheDelete; function mapCacheGet(key) { return _getMapData(this, key).get(key); } var _mapCacheGet = mapCacheGet; function mapCacheHas(key) { return _getMapData(this, key).has(key); } var _mapCacheHas = mapCacheHas; function mapCacheSet(key, value) { var data = _getMapData(this, key), size = data.size; data.set(key, value); this.size += data.size == size ? 0 : 1; return this; } var _mapCacheSet = mapCacheSet; function MapCache(entries) { var index = -1, length = entries == null ? 0 : entries.length; this.clear(); while (++index < length) { var entry = entries[index]; this.set(entry[0], entry[1]); } } MapCache.prototype.clear = _mapCacheClear; MapCache.prototype['delete'] = _mapCacheDelete; MapCache.prototype.get = _mapCacheGet; MapCache.prototype.has = _mapCacheHas; MapCache.prototype.set = _mapCacheSet; var _MapCache = MapCache; var FUNC_ERROR_TEXT = 'Expected a function'; function memoize(func, resolver) { if (typeof func != 'function' || resolver != null && typeof resolver != 'function') { throw new TypeError(FUNC_ERROR_TEXT); } var memoized = function memoized() { var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; if (cache.has(key)) { return cache.get(key); } var result = func.apply(this, args); memoized.cache = cache.set(key, result) || cache; return result; }; memoized.cache = new (memoize.Cache || _MapCache)(); return memoized; } memoize.Cache = _MapCache; var memoize_1 = memoize; var MAX_MEMOIZE_SIZE = 500; function memoizeCapped(func) { var result = memoize_1(func, function (key) { if (cache.size === MAX_MEMOIZE_SIZE) { cache.clear(); } return key; }); var cache = result.cache; return result; } var _memoizeCapped = memoizeCapped; var reLeadingDot = /^\./; var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; var reEscapeChar = /\\(\\)?/g; var stringToPath = _memoizeCapped(function (string) { var result = []; if (reLeadingDot.test(string)) { result.push(''); } string.replace(rePropName, function (match, number, quote, string) { result.push(quote ? string.replace(reEscapeChar, '$1') : number || match); }); return result; }); var _stringToPath = stringToPath; function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } var _arrayMap = arrayMap; var INFINITY = 1 / 0; var symbolProto = _Symbol ? _Symbol.prototype : undefined; var symbolToString = symbolProto ? symbolProto.toString : undefined; function baseToString(value) { if (typeof value == 'string') { return value; } if (isArray_1(value)) { return _arrayMap(value, baseToString) + ''; } if (isSymbol_1(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = value + ''; return result == '0' && 1 / value == -INFINITY ? '-0' : result; } var _baseToString = baseToString; function toString(value) { return value == null ? '' : _baseToString(value); } var toString_1 = toString; function castPath(value, object) { if (isArray_1(value)) { return value; } return _isKey(value, object) ? [value] : _stringToPath(toString_1(value)); } var _castPath = castPath; function last(array) { var length = array == null ? 0 : array.length; return length ? array[length - 1] : undefined; } var last_1 = last; var INFINITY$1 = 1 / 0; function toKey(value) { if (typeof value == 'string' || isSymbol_1(value)) { return value; } var result = value + ''; return result == '0' && 1 / value == -INFINITY$1 ? '-0' : result; } var _toKey = toKey; function baseGet(object, path) { path = _castPath(path, object); var index = 0, length = path.length; while (object != null && index < length) { object = object[_toKey(path[index++])]; } return index && index == length ? object : undefined; } var _baseGet = baseGet; function baseSlice(array, start, end) { var index = -1, length = array.length; if (start < 0) { start = -start > length ? 0 : length + start; } end = end > length ? length : end; if (end < 0) { end += length; } length = start > end ? 0 : end - start >>> 0; start >>>= 0; var result = Array(length); while (++index < length) { result[index] = array[index + start]; } return result; } var _baseSlice = baseSlice; function parent(object, path) { return path.length < 2 ? object : _baseGet(object, _baseSlice(path, 0, -1)); } var _parent = parent; function baseInvoke(object, path, args) { path = _castPath(path, object); object = _parent(object, path); var func = object == null ? object : object[_toKey(last_1(path))]; return func == null ? undefined : _apply(func, object, args); } var _baseInvoke = baseInvoke; var invokeMap = _baseRest(function (collection, path, args) { var index = -1, isFunc = typeof path == 'function', result = isArrayLike_1(collection) ? Array(collection.length) : []; _baseEach(collection, function (value) { result[++index] = isFunc ? _apply(path, value, args) : _baseInvoke(value, path, args); }); return result; }); var invokeMap_1 = invokeMap; function stackClear() { this.__data__ = new _ListCache(); this.size = 0; } var _stackClear = stackClear; function stackDelete(key) { var data = this.__data__, result = data['delete'](key); this.size = data.size; return result; } var _stackDelete = stackDelete; function stackGet(key) { return this.__data__.get(key); } var _stackGet = stackGet; function stackHas(key) { return this.__data__.has(key); } var _stackHas = stackHas; var LARGE_ARRAY_SIZE = 200; function stackSet(key, value) { var data = this.__data__; if (data instanceof _ListCache) { var pairs = data.__data__; if (!_Map || pairs.length < LARGE_ARRAY_SIZE - 1) { pairs.push([key, value]); this.size = ++data.size; return this; } data = this.__data__ = new _MapCache(pairs); } data.set(key, value); this.size = data.size; return this; } var _stackSet = stackSet; function Stack(entries) { var data = this.__data__ = new _ListCache(entries); this.size = data.size; } Stack.prototype.clear = _stackClear; Stack.prototype['delete'] = _stackDelete; Stack.prototype.get = _stackGet; Stack.prototype.has = _stackHas; Stack.prototype.set = _stackSet; var _Stack = Stack; var HASH_UNDEFINED$2 = '__lodash_hash_undefined__'; function setCacheAdd(value) { this.__data__.set(value, HASH_UNDEFINED$2); return this; } var _setCacheAdd = setCacheAdd; function setCacheHas(value) { return this.__data__.has(value); } var _setCacheHas = setCacheHas; function SetCache(values) { var index = -1, length = values == null ? 0 : values.length; this.__data__ = new _MapCache(); while (++index < length) { this.add(values[index]); } } SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd; SetCache.prototype.has = _setCacheHas; var _SetCache = SetCache; function arraySome(array, predicate) { var index = -1, length = array == null ? 0 : array.length; while (++index < length) { if (predicate(array[index], index, array)) { return true; } } return false; } var _arraySome = arraySome; function cacheHas(cache, key) { return cache.has(key); } var _cacheHas = cacheHas; var COMPARE_PARTIAL_FLAG$1 = 1; var COMPARE_UNORDERED_FLAG = 2; function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$1, arrLength = array.length, othLength = other.length; if (arrLength != othLength && !(isPartial && othLength > arrLength)) { return false; } var stacked = stack.get(array); if (stacked && stack.get(other)) { return stacked == other; } var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new _SetCache() : undefined; stack.set(array, other); stack.set(other, array); while (++index < arrLength) { var arrValue = array[index], othValue = other[index]; if (customizer) { var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); } if (compared !== undefined) { if (compared) { continue; } result = false; break; } if (seen) { if (!_arraySome(other, function (othValue, othIndex) { if (!_cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { return seen.push(othIndex); } })) { result = false; break; } } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { result = false; break; } } stack['delete'](array); stack['delete'](other); return result; } var _equalArrays = equalArrays; var Uint8Array = _root.Uint8Array; var _Uint8Array = Uint8Array; function mapToArray(map) { var index = -1, result = Array(map.size); map.forEach(function (value, key) { result[++index] = [key, value]; }); return result; } var _mapToArray = mapToArray; function setToArray(set) { var index = -1, result = Array(set.size); set.forEach(function (value) { result[++index] = value; }); return result; } var _setToArray = setToArray; var COMPARE_PARTIAL_FLAG$2 = 1; var COMPARE_UNORDERED_FLAG$1 = 2; var boolTag$1 = '[object Boolean]'; var dateTag$1 = '[object Date]'; var errorTag$1 = '[object Error]'; var mapTag$1 = '[object Map]'; var numberTag$1 = '[object Number]'; var regexpTag$1 = '[object RegExp]'; var setTag$1 = '[object Set]'; var stringTag$1 = '[object String]'; var symbolTag$1 = '[object Symbol]'; var arrayBufferTag$1 = '[object ArrayBuffer]'; var dataViewTag$1 = '[object DataView]'; var symbolProto$1 = _Symbol ? _Symbol.prototype : undefined; var symbolValueOf = symbolProto$1 ? symbolProto$1.valueOf : undefined; function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { switch (tag) { case dataViewTag$1: if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { return false; } object = object.buffer; other = other.buffer; case arrayBufferTag$1: if (object.byteLength != other.byteLength || !equalFunc(new _Uint8Array(object), new _Uint8Array(other))) { return false; } return true; case boolTag$1: case dateTag$1: case numberTag$1: return eq_1(+object, +other); case errorTag$1: return object.name == other.name && object.message == other.message; case regexpTag$1: case stringTag$1: return object == other + ''; case mapTag$1: var convert = _mapToArray; case setTag$1: var isPartial = bitmask & COMPARE_PARTIAL_FLAG$2; convert || (convert = _setToArray); if (object.size != other.size && !isPartial) { return false; } var stacked = stack.get(object); if (stacked) { return stacked == other; } bitmask |= COMPARE_UNORDERED_FLAG$1; stack.set(object, other); var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); stack['delete'](object); return result; case symbolTag$1: if (symbolValueOf) { return symbolValueOf.call(object) == symbolValueOf.call(other); } } return false; } var _equalByTag = equalByTag; function arrayPush(array, values) { var index = -1, length = values.length, offset = array.length; while (++index < length) { array[offset + index] = values[index]; } return array; } var _arrayPush = arrayPush; function baseGetAllKeys(object, keysFunc, symbolsFunc) { var result = keysFunc(object); return isArray_1(object) ? result : _arrayPush(result, symbolsFunc(object)); } var _baseGetAllKeys = baseGetAllKeys; function arrayFilter(array, predicate) { var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; while (++index < length) { var value = array[index]; if (predicate(value, index, array)) { result[resIndex++] = value; } } return result; } var _arrayFilter = arrayFilter; function stubArray() { return []; } var stubArray_1 = stubArray; var objectProto$13 = Object.prototype; var propertyIsEnumerable$1 = objectProto$13.propertyIsEnumerable; var nativeGetSymbols = Object.getOwnPropertySymbols; var getSymbols = !nativeGetSymbols ? stubArray_1 : function (object) { if (object == null) { return []; } object = Object(object); return _arrayFilter(nativeGetSymbols(object), function (symbol) { return propertyIsEnumerable$1.call(object, symbol); }); }; var _getSymbols = getSymbols; function getAllKeys(object) { return _baseGetAllKeys(object, keys_1, _getSymbols); } var _getAllKeys = getAllKeys; var COMPARE_PARTIAL_FLAG$3 = 1; var objectProto$12 = Object.prototype; var hasOwnProperty$10 = objectProto$12.hasOwnProperty; function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = _getAllKeys(object), objLength = objProps.length, othProps = _getAllKeys(other), othLength = othProps.length; if (objLength != othLength && !isPartial) { return false; } var index = objLength; while (index--) { var key = objProps[index]; if (!(isPartial ? key in other : hasOwnProperty$10.call(other, key))) { return false; } } var stacked = stack.get(object); if (stacked && stack.get(other)) { return stacked == other; } var result = true; stack.set(object, other); stack.set(other, object); var skipCtor = isPartial; while (++index < objLength) { key = objProps[index]; var objValue = object[key], othValue = other[key]; if (customizer) { var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); } if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { result = false; break; } skipCtor || (skipCtor = key == 'constructor'); } if (result && !skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) { result = false; } } stack['delete'](object); stack['delete'](other); return result; } var _equalObjects = equalObjects; var DataView = _getNative(_root, 'DataView'); var _DataView = DataView; var Promise$1 = _getNative(_root, 'Promise'); var _Promise = Promise$1; var Set = _getNative(_root, 'Set'); var _Set = Set; var WeakMap = _getNative(_root, 'WeakMap'); var _WeakMap = WeakMap; var mapTag$2 = '[object Map]'; var objectTag$2 = '[object Object]'; var promiseTag = '[object Promise]'; var setTag$2 = '[object Set]'; var weakMapTag$1 = '[object WeakMap]'; var dataViewTag$2 = '[object DataView]'; var dataViewCtorString = _toSource(_DataView); var mapCtorString = _toSource(_Map); var promiseCtorString = _toSource(_Promise); var setCtorString = _toSource(_Set); var weakMapCtorString = _toSo