{"version":3,"sources":["jsdelivr-header.js","/npm/redux-json-api-schema@0.1.0/lib/schema.js"],"names":[],"mappings":"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","file":"/npm/redux-json-api-schema@0.1.0/lib/schema.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/redux-json-api-schema@0.1.0/lib/schema.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SchemaItem = exports.SchemaEntity = undefined;\n\nvar _assign = require('babel-runtime/core-js/object/assign');\n\nvar _assign2 = _interopRequireDefault(_assign);\n\nvar _getIterator2 = require('babel-runtime/core-js/get-iterator');\n\nvar _getIterator3 = _interopRequireDefault(_getIterator2);\n\nvar _typeof2 = require('babel-runtime/helpers/typeof');\n\nvar _typeof3 = _interopRequireDefault(_typeof2);\n\nvar _createClass2 = require('babel-runtime/helpers/createClass');\n\nvar _createClass3 = _interopRequireDefault(_createClass2);\n\nvar _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of');\n\nvar _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf);\n\nvar _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');\n\nvar _classCallCheck3 = _interopRequireDefault(_classCallCheck2);\n\nvar _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');\n\nvar _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);\n\nvar _inherits2 = require('babel-runtime/helpers/inherits');\n\nvar _inherits3 = _interopRequireDefault(_inherits2);\n\nvar _symbol = require('babel-runtime/core-js/symbol');\n\nvar _symbol2 = _interopRequireDefault(_symbol);\n\nvar _lodash = require('lodash');\n\nvar _lodash2 = _interopRequireDefault(_lodash);\n\nvar _actions = require('./actions');\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar singleton = (0, _symbol2.default)();\nvar singletonEnforcer = (0, _symbol2.default)();\n\nvar SchemaError = function (_Error) {\n  (0, _inherits3.default)(SchemaError, _Error);\n\n  function SchemaError(message) {\n    (0, _classCallCheck3.default)(this, SchemaError);\n\n    var _this = (0, _possibleConstructorReturn3.default)(this, (0, _getPrototypeOf2.default)(SchemaError).call(this, message));\n\n    _this.name = _this.constructor.name;\n    _this.message = message;\n    if (typeof Error.captureStackTrace === 'function') {\n      Error.captureStackTrace(_this, _this.constructor);\n    } else {\n      _this.stack = new Error(message).stack;\n    }\n    return _this;\n  }\n\n  return SchemaError;\n}(Error);\n\n// The schema handler. Should handle all entities and related actions.\n\n\nvar Schema = function () {\n  function Schema(enforcer) {\n    (0, _classCallCheck3.default)(this, Schema);\n\n    if (enforcer != singletonEnforcer) throw new SchemaError('Cannot call Schema directly. Use Schema.instance instead.');\n  }\n\n  // Is a singleton still necessary?\n\n\n  (0, _createClass3.default)(Schema, [{\n    key: 'createItem',\n\n\n    // Creates an empty item.\n    value: function createItem(type, attributes, relationships) {\n      if (!this.entities) throw new SchemaError('The schema was not initialized properly. Run initialize() first.');\n      if (!this.entities[type]) throw new SchemaError(type + ' is not a valid entity.');else {\n        return new SchemaItem({\n          id: null,\n          type: type,\n          attributes: attributes,\n          relationships: relationships || {}\n        });\n      }\n    }\n\n    // Creates the base structure of the entity.\n\n  }, {\n    key: 'initialize',\n    value: function initialize(store, entities) {\n      this.store = store;\n      if (!entities || (typeof entities === 'undefined' ? 'undefined' : (0, _typeof3.default)(entities)) !== 'object' || !entities.length) throw new SchemaError('Schema should receive a list of entity names as a parameter.');\n      this.entities = {};\n      var state = store.getState();\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = (0, _getIterator3.default)(entities), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var type = _step.value;\n\n          var entity = new SchemaEntity(type);\n          this.entities[type] = entity;\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    }\n\n    // Allows to call an action related to an entity or an element.\n\n  }, {\n    key: 'dispatch',\n    value: function dispatch(actionCreator) {\n      return this.store.dispatch(actionCreator);\n    }\n  }], [{\n    key: 'fromArray',\n\n\n    // Creates a subset of SchemaEntity with items specified by their IDs.\n    // Should be compatible with all SchemaEntity operations.\n    value: function fromArray(type, ids) {\n      if (!ids instanceof Array) throw new SchemaError('Schema.fromArray() should receive a type and an array of IDs.');\n      return new SchemaEntity(type, ids);\n    }\n  }, {\n    key: 'instance',\n    get: function get() {\n      if (!this[singleton]) {\n        this[singleton] = new Schema(singletonEnforcer);\n      }\n      return this[singleton];\n    }\n  }]);\n  return Schema;\n}();\n\n// Defines a container of SchemaItem elements of the same type.\n\n\nvar SchemaEntity = exports.SchemaEntity = function () {\n  function SchemaEntity(type) {\n    var ids = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1];\n    (0, _classCallCheck3.default)(this, SchemaEntity);\n\n    this.type = type;\n    this.ids = ids;\n  }\n\n  // Returns all items from the schema as raw objects.\n  // Note that it filters all items that weren't found on the state.\n  // TODO: fetch non found items from DB?\n\n\n  (0, _createClass3.default)(SchemaEntity, [{\n    key: 'findById',\n\n\n    // gets an element from an entity from its ID.\n    // returns null if no results are found.\n    value: function findById(id) {\n      var result = this.items.filter(function (item) {\n        return item.id == id;\n      });\n      return result && result.length ? new SchemaItem(result[0]) : null;\n    }\n\n    // performs a simple search on an entity.\n    // TODO: full comparator support (eq, ne, like)\n\n  }, {\n    key: 'where',\n    value: function where(params) {\n      return _lodash2.default.filter(this.items, function (item) {\n        return _lodash2.default.reduce(params, function (result, value, key) {\n          return result && (key == 'id' ? item : item.attributes)[key] == value;\n        }, true);\n      }).map(function (item) {\n        return new SchemaItem(item);\n      });\n    }\n  }, {\n    key: 'items',\n    get: function get() {\n      var entity = Schema.instance.store.getState().api[this.type] || { data: [] };\n      if (this.ids.length) {\n        return this.ids.map(function (id) {\n          return _lodash2.default.find(entity.data, { id: id });\n        }).filter(function (item) {\n          return item;\n        });\n      } else {\n        return entity.data;\n      }\n    }\n\n    // returns all items from the schema as SchemaItem objects.\n\n  }, {\n    key: 'all',\n    get: function get() {\n      return this.items.map(function (item) {\n        return new SchemaItem(item);\n      });\n    }\n\n    // returns the first result in a SchemaEntity.\n\n  }, {\n    key: 'first',\n    get: function get() {\n      return this.items.length ? new SchemaItem(this.items[0]) : undefined;\n    }\n\n    // returns the number of items in a SchemaEntity.\n\n  }, {\n    key: 'count',\n    get: function get() {\n      return this.items.length;\n    }\n  }]);\n  return SchemaEntity;\n}();\n\n// Defines a single item.\n\n\nvar SchemaItem = exports.SchemaItem = function () {\n  function SchemaItem(item) {\n    (0, _classCallCheck3.default)(this, SchemaItem);\n\n    this.id = item.id;\n    this.type = item.type;\n    this.diff = (0, _assign2.default)({}, {\n      attributes: item.attributes || {},\n      relationships: item.relationships || {}\n    });\n    if (!item.id) this._ref = {\n      attributes: item.attributes || {},\n      relationships: item.relationships || {}\n    };\n  }\n\n  // Returns the raw item from the state or a temporary store.\n\n\n  (0, _createClass3.default)(SchemaItem, [{\n    key: 'sanitize',\n\n\n    // Returns a sanitized item, ready to be sent through a JSON API query.\n    value: function sanitize() {\n      return {\n        id: this.id ? this.id.toString() : undefined,\n        type: this.type,\n        attributes: this.diff.attributes || {},\n        relationships: this.diff.relationships ? _lodash2.default.mapValues(this.diff.relationships, function (rel) {\n          return {\n            data: rel.data\n          };\n        }) : {}\n      };\n    }\n\n    // Returns an array of all SchemaItem elements of a given type related to\n    // the item.\n\n  }, {\n    key: 'getRelated',\n    value: function getRelated(relation) {\n      var related = this.relationships[relation];\n      if (related && related.data && related.data.length) {\n        var _ret = function () {\n          var entity = Schema.instance.entities[related.data[0].type].items;\n          if (entity.length) {\n            var result = related.data.map(function (item) {\n              return new SchemaItem(_lodash2.default.find(entity, function (res) {\n                return res.id == item.id;\n              }));\n            });\n            return {\n              v: result[0] ? result : []\n            };\n          }\n        }();\n\n        if ((typeof _ret === 'undefined' ? 'undefined' : (0, _typeof3.default)(_ret)) === \"object\") return _ret.v;\n      }\n      return [];\n    }\n\n    // Counts all related items of a specific type.\n\n  }, {\n    key: 'countRelated',\n    value: function countRelated(relation) {\n      var related = this.relationships[relation];\n      return related && related.data && related.data.length ? related.data.length : 0;\n    }\n  }, {\n    key: 'update',\n    value: function update(data) {\n      // Only attributes and relationships should be updated, everything else is\n      // treated as static. Changes are saved on a temporary `diff` list.\n      this.diff = _lodash2.default.merge({}, this.diff, data);\n      this.attributes = _lodash2.default.merge({}, this.attributes, data.attributes || {});\n      this.relationships = _lodash2.default.merge({}, this.relationships, data.relationships || {});\n    }\n\n    // Triggers a CreateAction event for this item.\n\n  }, {\n    key: 'save',\n    value: function save() {\n      var fn = this.id ? _actions.update : _actions.create;\n      return fn(this.sanitize()); // TODO: clean the diff object\n    }\n  }, {\n    key: 'ref',\n    get: function get() {\n      var _this2 = this;\n\n      if (this.id) {\n        // it's an existing item\n        var entity = Schema.instance.store.getState().api[this.type],\n            result = void 0;\n        if (entity) {\n          result = _lodash2.default.filter(entity.data, function (item) {\n            return item.id === _this2.id;\n          });\n        }\n        return result ? result[0] : null;\n      } else {\n        // it's a new item\n        return this._ref;\n      }\n    },\n    set: function set(data) {\n      if (!this.id) this._ref = _lodash2.default.merge({}, this._ref, data);\n    }\n\n    // Returns the attributes object from the array.\n    // TODO: The ID should be gathered from here too.\n\n  }, {\n    key: 'attributes',\n    get: function get() {\n      return this.ref ? this.ref.attributes : {};\n    },\n    set: function set(data) {\n      this.ref.attributes = data;\n    }\n\n    // Returns the raw list of relationships from the state.\n\n  }, {\n    key: 'relationships',\n    get: function get() {\n      return this.ref ? this.ref.relationships : [];\n    },\n    set: function set(data) {\n      this.ref.relationships = data;\n    }\n  }]);\n  return SchemaItem;\n}();\n\nexports.default = Schema;"]}