{"version":3,"file":"orbit-state-tree.mjs","sources":["../node_modules/rollup-plugin-node-builtins/src/es6/events.js","../lib/Serializer.js","../lib/StateTree.js","../lib/requestSelector.js","../lib/recordSelector.js"],"sourcesContent":["'use strict';\n\nvar domain;\n\n// This constructor is used to store event handlers. Instantiating this is\n// faster than explicitly calling `Object.create(null)` to get a \"clean\" empty\n// object (tested with v8 v4.9).\nfunction EventHandlers() {}\nEventHandlers.prototype = Object.create(null);\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\nexport default EventEmitter;\nexport {EventEmitter};\n\n// nodejs oddity\n// require('events') === require('events').EventEmitter\nEventEmitter.EventEmitter = EventEmitter\n\nEventEmitter.usingDomains = false;\n\nEventEmitter.prototype.domain = undefined;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nEventEmitter.defaultMaxListeners = 10;\n\nEventEmitter.init = function() {\n  this.domain = null;\n  if (EventEmitter.usingDomains) {\n    // if there is an active domain, then attach to it.\n    if (domain.active && !(this instanceof domain.Domain)) {\n      this.domain = domain.active;\n    }\n  }\n\n  if (!this._events || this._events === Object.getPrototypeOf(this)._events) {\n    this._events = new EventHandlers();\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || isNaN(n))\n    throw new TypeError('\"n\" argument must be a positive number');\n  this._maxListeners = n;\n  return this;\n};\n\nfunction $getMaxListeners(that) {\n  if (that._maxListeners === undefined)\n    return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return $getMaxListeners(this);\n};\n\n// These standalone emit* functions are used to optimize calling of event\n// handlers for fast cases because emit() itself often has a variable number of\n// arguments and can be deoptimized because of that. These functions always have\n// the same number of arguments and thus do not get deoptimized, so the code\n// inside them can execute faster.\nfunction emitNone(handler, isFn, self) {\n  if (isFn)\n    handler.call(self);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self);\n  }\n}\nfunction emitOne(handler, isFn, self, arg1) {\n  if (isFn)\n    handler.call(self, arg1);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1);\n  }\n}\nfunction emitTwo(handler, isFn, self, arg1, arg2) {\n  if (isFn)\n    handler.call(self, arg1, arg2);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2);\n  }\n}\nfunction emitThree(handler, isFn, self, arg1, arg2, arg3) {\n  if (isFn)\n    handler.call(self, arg1, arg2, arg3);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].call(self, arg1, arg2, arg3);\n  }\n}\n\nfunction emitMany(handler, isFn, self, args) {\n  if (isFn)\n    handler.apply(self, args);\n  else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n    for (var i = 0; i < len; ++i)\n      listeners[i].apply(self, args);\n  }\n}\n\nEventEmitter.prototype.emit = function emit(type) {\n  var er, handler, len, args, i, events, domain;\n  var needDomainExit = false;\n  var doError = (type === 'error');\n\n  events = this._events;\n  if (events)\n    doError = (doError && events.error == null);\n  else if (!doError)\n    return false;\n\n  domain = this.domain;\n\n  // If there is no 'error' event listener then throw.\n  if (doError) {\n    er = arguments[1];\n    if (domain) {\n      if (!er)\n        er = new Error('Uncaught, unspecified \"error\" event');\n      er.domainEmitter = this;\n      er.domain = domain;\n      er.domainThrown = false;\n      domain.emit('error', er);\n    } else if (er instanceof Error) {\n      throw er; // Unhandled 'error' event\n    } else {\n      // At least give some kind of context to the user\n      var err = new Error('Uncaught, unspecified \"error\" event. (' + er + ')');\n      err.context = er;\n      throw err;\n    }\n    return false;\n  }\n\n  handler = events[type];\n\n  if (!handler)\n    return false;\n\n  var isFn = typeof handler === 'function';\n  len = arguments.length;\n  switch (len) {\n    // fast cases\n    case 1:\n      emitNone(handler, isFn, this);\n      break;\n    case 2:\n      emitOne(handler, isFn, this, arguments[1]);\n      break;\n    case 3:\n      emitTwo(handler, isFn, this, arguments[1], arguments[2]);\n      break;\n    case 4:\n      emitThree(handler, isFn, this, arguments[1], arguments[2], arguments[3]);\n      break;\n    // slower\n    default:\n      args = new Array(len - 1);\n      for (i = 1; i < len; i++)\n        args[i - 1] = arguments[i];\n      emitMany(handler, isFn, this, args);\n  }\n\n  if (needDomainExit)\n    domain.exit();\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n\n  events = target._events;\n  if (!events) {\n    events = target._events = new EventHandlers();\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener) {\n      target.emit('newListener', type,\n                  listener.listener ? listener.listener : listener);\n\n      // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n      events = target._events;\n    }\n    existing = events[type];\n  }\n\n  if (!existing) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] = prepend ? [listener, existing] :\n                                          [existing, listener];\n    } else {\n      // If we've already got an array, just append.\n      if (prepend) {\n        existing.unshift(listener);\n      } else {\n        existing.push(listener);\n      }\n    }\n\n    // Check for listener leak\n    if (!existing.warned) {\n      m = $getMaxListeners(target);\n      if (m && m > 0 && existing.length > m) {\n        existing.warned = true;\n        var w = new Error('Possible EventEmitter memory leak detected. ' +\n                            existing.length + ' ' + type + ' listeners added. ' +\n                            'Use emitter.setMaxListeners() to increase limit');\n        w.name = 'MaxListenersExceededWarning';\n        w.emitter = target;\n        w.type = type;\n        w.count = existing.length;\n        emitWarning(w);\n      }\n    }\n  }\n\n  return target;\n}\nfunction emitWarning(e) {\n  typeof console.warn === 'function' ? console.warn(e) : console.log(e);\n}\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n    function prependListener(type, listener) {\n      return _addListener(this, type, listener, true);\n    };\n\nfunction _onceWrap(target, type, listener) {\n  var fired = false;\n  function g() {\n    target.removeListener(type, g);\n    if (!fired) {\n      fired = true;\n      listener.apply(target, arguments);\n    }\n  }\n  g.listener = listener;\n  return g;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  if (typeof listener !== 'function')\n    throw new TypeError('\"listener\" argument must be a function');\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n    function prependOnceListener(type, listener) {\n      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\n      this.prependListener(type, _onceWrap(this, type, listener));\n      return this;\n    };\n\n// emits a 'removeListener' event iff the listener was removed\nEventEmitter.prototype.removeListener =\n    function removeListener(type, listener) {\n      var list, events, position, i, originalListener;\n\n      if (typeof listener !== 'function')\n        throw new TypeError('\"listener\" argument must be a function');\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      list = events[type];\n      if (!list)\n        return this;\n\n      if (list === listener || (list.listener && list.listener === listener)) {\n        if (--this._eventsCount === 0)\n          this._events = new EventHandlers();\n        else {\n          delete events[type];\n          if (events.removeListener)\n            this.emit('removeListener', type, list.listener || listener);\n        }\n      } else if (typeof list !== 'function') {\n        position = -1;\n\n        for (i = list.length; i-- > 0;) {\n          if (list[i] === listener ||\n              (list[i].listener && list[i].listener === listener)) {\n            originalListener = list[i].listener;\n            position = i;\n            break;\n          }\n        }\n\n        if (position < 0)\n          return this;\n\n        if (list.length === 1) {\n          list[0] = undefined;\n          if (--this._eventsCount === 0) {\n            this._events = new EventHandlers();\n            return this;\n          } else {\n            delete events[type];\n          }\n        } else {\n          spliceOne(list, position);\n        }\n\n        if (events.removeListener)\n          this.emit('removeListener', type, originalListener || listener);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.removeAllListeners =\n    function removeAllListeners(type) {\n      var listeners, events;\n\n      events = this._events;\n      if (!events)\n        return this;\n\n      // not listening for removeListener, no need to emit\n      if (!events.removeListener) {\n        if (arguments.length === 0) {\n          this._events = new EventHandlers();\n          this._eventsCount = 0;\n        } else if (events[type]) {\n          if (--this._eventsCount === 0)\n            this._events = new EventHandlers();\n          else\n            delete events[type];\n        }\n        return this;\n      }\n\n      // emit removeListener for all listeners on all events\n      if (arguments.length === 0) {\n        var keys = Object.keys(events);\n        for (var i = 0, key; i < keys.length; ++i) {\n          key = keys[i];\n          if (key === 'removeListener') continue;\n          this.removeAllListeners(key);\n        }\n        this.removeAllListeners('removeListener');\n        this._events = new EventHandlers();\n        this._eventsCount = 0;\n        return this;\n      }\n\n      listeners = events[type];\n\n      if (typeof listeners === 'function') {\n        this.removeListener(type, listeners);\n      } else if (listeners) {\n        // LIFO order\n        do {\n          this.removeListener(type, listeners[listeners.length - 1]);\n        } while (listeners[0]);\n      }\n\n      return this;\n    };\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  var evlistener;\n  var ret;\n  var events = this._events;\n\n  if (!events)\n    ret = [];\n  else {\n    evlistener = events[type];\n    if (!evlistener)\n      ret = [];\n    else if (typeof evlistener === 'function')\n      ret = [evlistener.listener || evlistener];\n    else\n      ret = unwrapListeners(evlistener);\n  }\n\n  return ret;\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? Reflect.ownKeys(this._events) : [];\n};\n\n// About 1.5x faster than the two-arg version of Array#splice().\nfunction spliceOne(list, index) {\n  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1)\n    list[i] = list[k];\n  list.pop();\n}\n\nfunction arrayClone(arr, i) {\n  var copy = new Array(i);\n  while (i--)\n    copy[i] = arr[i];\n  return copy;\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n  return ret;\n}\n","import Jsona from 'jsona'\nimport invariant from 'invariant'\n\n/**\n * Serialize plain objects into json api format\n */\nexport default class Serializer {\n  constructor (schema) {\n    this._formatter = new Jsona()\n    this._schema = schema\n  }\n\n  /**\n   * Augment object with attributes needed by formatter\n   *\n   * @param {String} type Object type\n   * @param {Object} object\n   */\n  _augmentObject (type, object) {\n    const relationships = this._schema.models[type].relationships\n    const relationshipNames = relationships ? Object.keys(relationships) : []\n\n    for (let relationshipName of relationshipNames) {\n      if (!object[relationshipName]) {\n        continue\n      }\n      if (Array.isArray(object[relationshipName])) {\n        object[relationshipName] = object[relationshipName].map(\n          relationshipObject => this._augmentObject(relationships[relationshipName].model, relationshipObject)\n        )\n        continue\n      }\n      object[relationshipName] = this._augmentObject(relationships[relationshipName].model, object[relationshipName])\n    }\n\n    return Object.assign(\n      {\n        type: type,\n        relationshipNames: relationshipNames\n      },\n      object\n    )\n  }\n\n  /**\n   * Serialize an object into json api format\n   *\n   * @param {String} type Object type\n   * @param {Object} object Object\n   * @returns {Object}\n   */\n  serialize (type, object) {\n    invariant(type in this._schema.models, 'serialized type must exist in schema')\n    return this._formatter.serialize({stuff: this._augmentObject(type, object)})\n  }\n}\n","import EventEmitter from 'events'\nimport invariant from 'invariant'\nimport normalize from 'json-api-normalizer'\nimport Serializer from './Serializer'\nimport { Exception as OrbitException } from '@orbit/core'\n\nexport default class StateTree {\n  /**\n   * Initialize the state tree with your store and schema instances\n   *\n   * @param {Object} {store, schema}\n   * @memberof StateTree\n   */\n  constructor ({store, schema}) {\n    invariant(store, 'Store instance required')\n    invariant(schema, 'Schema instance required')\n    this._store = store\n    this._schema = schema\n    this._serializer = new Serializer(this._schema)\n    this._events = new EventEmitter()\n    this._lastRequestId = 0\n    this._state = {\n      entities: {},\n      requests: {}\n    }\n  }\n\n  /**\n   * Listen for tree changes, receving a new tree every time a change is comitted\n   *\n   * @param {Function} callback\n   */\n  onChange (callback) {\n    return this._events.addListener('change', callback)\n  }\n\n  /**\n   * Listen for unhandled errors, errors coming from orbitjs are described on request object\n   *\n   * @param {Function} callback\n   */\n  onUnhandledError (callback) {\n    return this._events.addListener('unhandledError', callback)\n  }\n\n  /**\n   * Adds an record\n   *\n   * @param {String} type\n   * @param {Object} object\n   */\n  addRecord (type, object) {\n    return this._storeUpdate('addRecord', [this._serialize(type, object)])\n  }\n\n  /**\n   * Replaces an entire record\n   *\n   * @param {String} type\n   * @param {Object} object\n   */\n  replaceRecord (type, object) {\n    return this._storeUpdate('replaceRecord', [this._serialize(type, object)])\n  }\n\n  /**\n   * Removes an record\n   *\n   * @param {String} type\n   * @param {String} id\n   */\n  removeRecord (type, id) {\n    return this._storeUpdate('removeRecord', [{type, id}])\n  }\n\n  /**\n   * Replaces a key\n   *\n   * @param {String} type\n   * @param {String} id\n   * @param {String} keyName\n   * @param {String} keyValue\n   */\n  replaceKey (type, id, keyName, keyValue) {\n    return this._storeUpdate('replaceKey', [{type, id}, keyName, keyValue])\n  }\n\n  /**\n   * Replaces an attribute\n   *\n   * @param {String} type\n   * @param {String} id\n   * @param {String} attributeName\n   * @param {String} attributeValue\n   */\n  replaceAttribute (type, id, attributeName, attributeValue) {\n    return this._storeUpdate('replaceAttribute', [{type, id}, attributeName, attributeValue])\n  }\n\n  /**\n   * Adds a member to a to-many relationship\n   *\n   * @param {String} type\n   * @param {String} id\n   * @param {String} relationshipName\n   * @param {String} relationshipId\n   */\n  addToRelatedRecords (type, id, relationshipName, relationshipId) {\n    this._validateRelationship(type, relationshipName, 'hasMany')\n    const relationshipType = this._schema.models[type].relationships[relationshipName].model\n    return this._storeUpdate('addToRelatedRecords', [{type, id}, relationshipName, {type: relationshipType, id: relationshipId}])\n  }\n\n  /**\n   * Removes a member from a to-many relationship\n   *\n   * @param {String} type\n   * @param {String} id\n   * @param {String} relationshipName\n   * @param {String} relationshipId\n   */\n  removeFromRelatedRecords (type, id, relationshipName, relationshipId) {\n    this._validateRelationship(type, relationshipName, 'hasMany')\n    const relationshipType = this._schema.models[type].relationships[relationshipName].model\n    return this._storeUpdate('removeFromRelatedRecords', [{type, id}, relationshipName, {type: relationshipType, id: relationshipId}])\n  }\n\n  /**\n   * Replaces every member of a to-many relationship\n   *\n   * @param {String} type\n   * @param {String} id\n   * @param {String} relationshipName\n   * @param {String[]} relationshipIds\n   */\n  replaceRelatedRecords (type, id, relationshipName, relationshipIds) {\n    this._validateRelationship(type, relationshipName, 'hasMany')\n    const relationshipType = this._schema.models[type].relationships[relationshipName].model\n    const data = relationshipIds.map(id => ({type: relationshipType, id}))\n    return this._storeUpdate('replaceRelatedRecords', [{type, id}, relationshipName, data])\n  }\n\n  /**\n   * Replaces a to-one relationship\n   *\n   * @param {String} type\n   * @param {String} id\n   * @param {String} relationshipName\n   * @param {String} relationshipId\n   */\n  replaceRelatedRecord (type, id, relationshipName, relationshipId) {\n    this._validateRelationship(type, relationshipName, 'hasOne')\n    const relationshipType = this._schema.models[type].relationships[relationshipName].model\n    return this._storeUpdate('replaceRelatedRecord', [{type, id}, relationshipName, {type: relationshipType, id: relationshipId}])\n  }\n\n  /**\n   * Find a record by its identity.\n   *\n   * @param {String} type\n   * @param {String} id\n   */\n  findRecord (type, id) {\n    return this._storeQuery('findRecord', [{type, id}])\n  }\n\n  /**\n   * Find all records of a specific type.\n   *\n   * @param {String} type\n   * @param {Object} query\n   */\n  findRecords (type, query) {\n    const hook = (builder) => {\n      if (query.filter) {\n        for (let filter of query.filter) {\n          builder.filter(filter)\n        }\n      }\n      if (query.sort) {\n        for (let sort of query.sort) {\n          builder.sort(sort)\n        }\n      }\n      if (query.page) {\n        builder.page(query.page)\n      }\n      return builder\n    }\n    return this._storeQuery('findRecords', [type], hook)\n  }\n\n  /**\n   * Find a related record in a to-one relationship\n   *\n   * @param {String} type\n   * @param {String} id\n   * @param {String} relationship\n   */\n  findRelatedRecord (type, id, relationship) {\n    this._validateRelationship(type, relationship, 'hasOne')\n    return this._storeQuery('findRelatedRecord', [{type, id}, relationship])\n  }\n\n  /**\n   * Find a related record in a to-one relationship\n   *\n   * @param {String} type\n   * @param {String} id\n   * @param {String} relationship\n   */\n  findRelatedRecords (type, id, relationship) {\n    this._validateRelationship(type, relationship, 'hasMany')\n    return this._storeQuery('findRelatedRecords', [{type, id}, relationship])\n  }\n\n  _validateRelationship (type, name, relationshipType) {\n    const isValid = this._schema.models[type] &&\n      this._schema.models[type].relationships[name] &&\n      (!relationshipType || this._schema.models[type].relationships[name].type === relationshipType)\n    if (!isValid) {\n      throw new Error('Invalid relationship ' + name + ' on model ' + type + ' with type ' + relationshipType)\n    }\n  }\n\n  _serialize (type, object) {\n    return this._serializer.serialize(type, object).data\n  }\n\n  _storeUpdate (method, args) {\n    const requestId = this._createRequest()\n    const promise = this._store.update(t => t[method].apply(t, args)).then(\n      jsonApiObject => this._handeRequestSuccess(requestId, jsonApiObject)\n    ).catch(\n      error => this._handleRequestError(requestId, error)\n    )\n    return {requestId, promise}\n  }\n\n  _storeQuery (method, args, hook) {\n    const requestId = this._createRequest()\n    const promise = this._store.query(queryBuilder => {\n      let query = queryBuilder[method].apply(queryBuilder, args)\n      if (hook) {\n        query = hook(query)\n      }\n      return query\n    }).then(\n      jsonApiObject => this._handeRequestSuccess(requestId, jsonApiObject)\n    ).catch(\n      error => this._handleRequestError(requestId, error)\n    )\n    return {requestId, promise}\n  }\n\n  _createRequest () {\n    const requestId = ++this._lastRequestId\n    this._mergeState({\n      requests: {\n        [requestId]: {\n          id: requestId,\n          completed: false,\n          timestamp: (new Date()).getTime()\n        }\n      }\n    })\n    return requestId\n  }\n\n  _handeRequestSuccess (requestId, response) {\n    const idsByType = {}\n    if (Array.isArray(response)) {\n      for (let item of response) {\n        if (!idsByType[item.type]) {\n          idsByType[item.type] = []\n        }\n        idsByType[item.type].push(item.id)\n      }\n    } else if (response && response.type) {\n      idsByType[response.type] = [response.id]\n    }\n    this._insertEntities(requestId, normalize({data: response}), idsByType)\n  }\n\n  _handleRequestError (requestId, error) {\n    if (!(error instanceof OrbitException)) {\n      this._events.emit('unhandledError', error, requestId)\n      return error\n    }\n    const request = {\n      id: requestId,\n      completed: true,\n      result: {},\n      error: {\n        message: error.message,\n        description: error.description,\n        type: error.type,\n        id: error.id,\n        relationship: error.relationship\n      }\n    }\n    this._mergeState({\n      entities: {},\n      requests: {\n        [requestId]: request\n      }\n    })\n  }\n\n  _insertEntities (requestId, entities, idsByType) {\n    const request = {\n      id: requestId,\n      completed: true,\n      result: idsByType,\n      error: null\n    }\n    this._mergeState({\n      entities: entities,\n      requests: {\n        [requestId]: request\n      }\n    })\n  }\n\n  _mergeState (mergedState) {\n    const newState = Object.assign({}, this._state)\n    for (let key in mergedState.entities) {\n      newState.entities[key] = Object.assign({}, this._state.entities[key], mergedState.entities[key])\n    }\n    for (let key in mergedState.requests) {\n      newState.requests[key] = Object.assign({}, this._state.requests[key], mergedState.requests[key])\n    }\n    this._state = newState\n    this._events.emit('change', this._state)\n  }\n}\n","/**\n * Returns an request object from current state tree\n */\nexport default function requestSelector (state, requestId) {\n  return state.requests[requestId]\n}\n","import build from 'redux-object'\n\n/**\n * Return a record from current state tree\n */\nexport default function recordSelector (state, type, id) {\n  return build(state.entities, type, id)\n}\n"],"names":["Serializer","schema","_formatter","Jsona","_schema","type","object","relationships","models","relationshipNames","Object","keys","relationshipName","Array","isArray","map","_augmentObject","model","relationshipObject","assign","serialize","stuff","StateTree","store","_store","_serializer","_events","EventEmitter","_lastRequestId","_state","callback","addListener","_storeUpdate","_serialize","id","keyName","keyValue","attributeName","attributeValue","relationshipId","_validateRelationship","relationshipType","relationshipIds","data","_storeQuery","query","hook","builder","filter","sort","page","relationship","name","isValid","Error","method","args","requestId","_createRequest","promise","update","t","apply","then","_handeRequestSuccess","jsonApiObject","catch","_handleRequestError","error","queryBuilder","_mergeState","Date","getTime","response","idsByType","item","push","_insertEntities","normalize","OrbitException","emit","request","message","description","entities","mergedState","newState","key","requests","requestSelector","state","recordSelector","build"],"mappings":"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"}